/// <summary> /// Parses the address. /// </summary> /// <param name="input">The input.</param> /// <returns></returns> public static Address ParseAddress(string input) { Address address = new Address(); input = input.TrimEnd(';'); try { if (input.IndexOf("<") == -1) { address.Email = Parser.RemoveWhiteSpaces(input); } else { address.Email = System.Text.RegularExpressions.Regex.Match(input, "<(.|[.])*>").Value.TrimStart('<').TrimEnd('>'); address.Name = input.Replace("<" + address.Email + ">", ""); address.Email = Parser.Clean(Parser.RemoveWhiteSpaces(address.Email)); if (address.Name.IndexOf("\"") == -1) { address.Name = Parser.Clean(address.Name); } address.Name = address.Name.Trim(new char[] { ' ', '\"' }); } return(address); } catch { return(new Address(input)); } }
//End of address parsing. //Date parsing conformant to RFC2822 and accepting RFC822 dates. public static System.DateTime ParseAsUniversalDateTime(string input) { input = Parser.ReplaceTimeZone(input); input = Parser.Clean(input); input = System.Text.RegularExpressions.Regex.Replace(input,@" +"," "); input = System.Text.RegularExpressions.Regex.Replace(input,@"( +: +)|(: +)|( +:)",":"); if(input.IndexOf(",")!=-1) { input = input.Replace(input.Split(',')[0]+", ",""); } string[] parts = input.Split(' '); int year = System.Convert.ToInt32(parts[2]); if(year<100) { if(year>49) year += 1900; else year += 2000; } int month = Parser.GetMonth(parts[1]); int day = System.Convert.ToInt32(parts[0]); string[] dateParts = parts[3].Split(':'); int hour = System.Convert.ToInt32(dateParts[0]); int minute = System.Convert.ToInt32(dateParts[1]); int second = 0; if(dateParts.Length>2) second = System.Convert.ToInt32(dateParts[2]); int offset_hours = System.Convert.ToInt32(parts[4].Substring(0,3)); int offset_minutes = System.Convert.ToInt32(parts[4].Substring(3,2)); System.DateTime date = new System.DateTime(year,month,day,hour,minute,second); date = date.AddHours(-offset_hours); date = date.AddMinutes(-offset_minutes); return date; }