ParseAddress() public static method

public static ParseAddress ( string input ) : ActiveUp.Net.Mail.Address
input string
return ActiveUp.Net.Mail.Address
Esempio n. 1
0
        public static void ParseHeader(ref Header header)
        {
            string hdr = System.Text.Encoding.ASCII.GetString(header.OriginalData);
            hdr = System.Text.RegularExpressions.Regex.Match(hdr, @"[\s\S]+?((?=\r?\n\r?\n)|\Z)").Value;
            hdr = Parser.Unfold(hdr);
            hdr = Codec.RFC2047Decode(hdr);
            System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(hdr, @"(?<=((\r?\n)|\n)|\A)\S+:(.|(\r?\n[\t ]))+(?=((\r?\n)\S)|\Z)");
            while(m.Success)
            {
                string name = FormatFieldName(m.Value.Substring(0, m.Value.IndexOf(':')));
                string value = m.Value.Substring(m.Value.IndexOf(":") + 1);
                if (name.Equals("received")) header.Trace.Add(Parser.ParseTrace(m.Value.Trim(' ')));
                else if (name.Equals("to")) header.To = Parser.ParseAddresses(value);
                else if (name.Equals("cc")) header.Cc = Parser.ParseAddresses(value);
                else if (name.Equals("bcc")) header.Bcc = Parser.ParseAddresses(value);
                else if (name.Equals("reply-to")) header.ReplyTo = Parser.ParseAddress(value);
                else if (name.Equals("from")) header.From = Parser.ParseAddress(value);
                else if (name.Equals("sender")) header.Sender = Parser.ParseAddress(value);
                else if (name.Equals("content-type")) header.ContentType = Parser.GetContentType(m.Value);
                else if (name.Equals("content-disposition")) header.ContentDisposition = Parser.GetContentDisposition(m.Value);

                header.HeaderFields.Add(name, value);
                header.HeaderFieldNames.Add(name, m.Value.Substring(0, m.Value.IndexOf(':')));
                m = m.NextMatch();
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Parses a string containing addresses in the following formats :
        /// <list type="circle">
        /// <item>"John Doe" &lt;[email protected]>,"Mike Johns" &lt;[email protected]></item>
        /// <item>"John Doe" &lt;[email protected]>;"Mike Johns" &lt;[email protected]></item>
        /// <item>&lt;[email protected]></item>
        /// <item>[email protected]</item>
        /// </list>
        /// </summary>
        /// <param name="input">A string containing addresses in the formats desribed above.</param>
        /// <returns>An AddressCollection object containing the parsed addresses.</returns>
        public static AddressCollection ParseAddresses(string input)
        {
            //TODO: enforce parser to use regex
            AddressCollection addresses = new AddressCollection();

            string[] comma_separated = input.Split(',');
            for (int i = 0; i < comma_separated.Length; i++)
            {
                if (comma_separated[i].IndexOf("@") == -1 && comma_separated.Length > (i + 1))
                {
                    comma_separated[i + 1] = comma_separated[i] + comma_separated[i + 1];
                }
            }

            for (int i = 0; i < comma_separated.Length; i++)
            {
                if (comma_separated[i].IndexOf("@") != -1)
                {
                    addresses.Add(Parser.ParseAddress((comma_separated[i].IndexOf("<") != -1 && comma_separated[i].IndexOf(":") != -1 && comma_separated[i].IndexOf(":") < comma_separated[i].IndexOf("<")) ? ((comma_separated[i].Split(':')[0].IndexOf("\"") == -1) ? comma_separated[i].Split(':')[1] : comma_separated[i]) : comma_separated[i]));
                }
            }

            //MatchCollection matches = Regex.Matches(input, "(\"(?<name>.+?)\")*\\s*<?(?<email>[^<>,\"\\s]+)>?");

            //foreach (Match m in matches)
            //    addresses.Add(m.Groups["email"].Value, m.Groups["name"].Value);

            return(addresses);
        }
Esempio n. 3
0
        /*private static void ParseMessage(ref Message message)
        {
            ParseMessage(ref message, new X509Certificate2Collection());
        }*/
        private static Message ParseMessage(byte[] data)
        {
            string msg = System.Text.Encoding.ASCII.GetString(data);
            Message message = (Message)Parser.ParseMimeTypedAndEncodedContent(msg);

            foreach (string key in message.HeaderFields.AllKeys)
            {
                string name = key;
                string value = message.HeaderFields[key];
                if (name.Equals("received")) message.Trace.Add(Parser.ParseTrace(key + ": " + value));
                else if (name.Equals("to")) message.To = Parser.ParseAddresses(value);
                else if (name.Equals("cc")) message.Cc = Parser.ParseAddresses(value);
                else if (name.Equals("bcc")) message.Bcc = Parser.ParseAddresses(value);
                else if (name.Equals("reply-to")) message.ReplyTo = Parser.ParseAddress(value);
                else if (name.Equals("from")) message.From = Parser.ParseAddress(value);
                else if (name.Equals("sender")) message.Sender = Parser.ParseAddress(value);
                else if (name.Equals("content-type")) message.ContentType = Parser.GetContentType(key + ": " + value);
                else if (name.Equals("content-disposition")) message.ContentDisposition = Parser.GetContentDisposition(key + ": " + value);
                else if (name.Equals("domainkey-signature")) message.Signatures.DomainKeys = Signature.Parse(key + ": " + value, message);
            }

            return message;
            //if (message.ContentType.MimeType != null && message.ContentType.MimeType.IndexOf("multipart/signed") != -1) message.IsSigned = true;
            //if (message.ContentType.MimeType != null && message.ContentType.MimeType.IndexOf("multipart/encrypted") != -1) message.IsEncrypted = true;

        }
Esempio n. 4
0
        /// <summary>
        /// Creates the Address using the specified Internet email (RFC 2822 addr-spec).
        /// </summary>
        /// <param name="email">The email address to use.</param>
        public Address(string email)
        {
            Address addr = Parser.ParseAddress(email);

            Email = addr.Email;
            Name  = addr.Name;
        }
Esempio n. 5
0
        /// <summary>
        /// Creates the Address using the specified Internet email (RFC 2822 addr-spec).
        /// </summary>
        /// <param name="email">The email address to use.</param>
        public Address(string email)
        {
            /*this.Email =
             * this.Name = string.Empty;*/
            Address addr = Parser.ParseAddress(email);

            this.Email = addr.Email;
            this.Name  = addr.Name;
        }
Esempio n. 6
0
		//Address parsing conformant to RFC2822's addr-spec.
		/// <summary>
		/// Parses a string containing addresses in the following formats :
		/// <list type="circle">
		/// <item>"John Doe" &lt;[email protected]>,"Mike Johns" &lt;[email protected]></item>
		/// <item>"John Doe" &lt;[email protected]>;"Mike Johns" &lt;[email protected]></item>
		/// <item>&lt;[email protected]></item>
		/// <item>[email protected]</item>
		/// </list>
		/// </summary>
		/// <param name="input">A string containing addresses in the formats desribed above.</param>
		/// <returns>An AddressCollection object containing the parsed addresses.</returns>
        public static AddressCollection ParseAddresses(string input)
		{
            AddressCollection addresses = new AddressCollection();
			string[] comma_separated = input.Split(',');
			for(int i=0;i<comma_separated.Length;i++) 
				if(comma_separated[i].IndexOf("@")==-1 && comma_separated.Length>(i+1)) 
					comma_separated[i+1] = comma_separated[i]+comma_separated[i+1];

			for(int i=0;i<comma_separated.Length;i++) /*if(comma_separated[i].IndexOf("@")!=-1)*/ 
				addresses.Add(Parser.ParseAddress((comma_separated[i].IndexOf("<")!=-1 && comma_separated[i].IndexOf(":")!=-1 && comma_separated[i].IndexOf(":")<comma_separated[i].IndexOf("<")) ? ((comma_separated[i].Split(':')[0].IndexOf("\"")==-1) ? comma_separated[i].Split(':')[1] : comma_separated[i]) : comma_separated[i]));

			return addresses;
		}
Esempio n. 7
0
        /// <summary>
        /// Parses the message.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <returns></returns>
        public static Message ParseMessage(byte[] data)
        {
            //string msg = System.Text.Encoding.ASCII.GetString(data);
#if !PocketPC
            string msg = System.Text.Encoding.UTF8.GetString(data, 0, data.Length);
#else
            string msg = Pop3Client.PPCEncode.GetString(data, 0, data.Length);
#endif

            Message message = new Message();

            try
            {
                // Build a part tree and get all headers.
                MimePart part = ParseMimePart(msg, message);

                // Fill a new message object with the new information.
                message.OriginalData     = data;
                message.HeaderFields     = part.HeaderFields;
                message.HeaderFieldNames = part.HeaderFieldNames;

                // Dispatch header fields to corresponding object.
                foreach (string key in message.HeaderFields.AllKeys)
                {
                    string name  = key;
                    string value = message.HeaderFields[key];
                    // TODO : Fix trace
                    if (name.Equals("received"))
                    {
                        message.Trace.Add(Parser.ParseTrace(key + ": " + value));
                    }
                    else if (name.Equals("to"))
                    {
                        message.To = Parser.ParseAddresses(value);
                    }
                    else if (name.Equals("cc"))
                    {
                        message.Cc = Parser.ParseAddresses(value);
                    }
                    else if (name.Equals("bcc"))
                    {
                        message.Bcc = Parser.ParseAddresses(value);
                    }
                    else if (name.Equals("reply-to"))
                    {
                        message.ReplyTo = Parser.ParseAddress(value);
                    }
                    else if (name.Equals("from"))
                    {
                        message.From = Parser.ParseAddress(value);
                    }
                    else if (name.Equals("sender"))
                    {
                        message.Sender = Parser.ParseAddress(value);
                    }
                    else if (name.Equals("content-type"))
                    {
                        message.ContentType = Parser.GetContentType(key + ": " + value);
                    }
                    else if (name.Equals("content-disposition"))
                    {
                        message.ContentDisposition = Parser.GetContentDisposition(key + ": " + value);
                    }
                    else if (name.Equals("domainkey-signature"))
                    {
                        message.Signatures.DomainKeys = Signature.Parse(key + ": " + value, message);
                    }
                }

                if (message.ContentType.MimeType.Equals("application/pkcs7-mime") ||
                    message.ContentType.MimeType.Equals("application/x-pkcs7-mime"))
                {
                    if (message.ContentType.Parameters["smime-type"] != null &&
                        message.ContentType.Parameters["smime-type"].Equals("enveloped-data"))
                    {
                        message.IsSmimeEncrypted = true;
                    }
                    if (message.ContentType.Parameters["smime-type"] != null &&
                        message.ContentType.Parameters["smime-type"].Equals("signed-data"))
                    {
                        message.HasSmimeSignature = true;
                    }
                }

                if (message.ContentType.MimeType.Equals("multipart/signed"))
                {
                    message.HasSmimeDetachedSignature = true;
                }

                // Keep a reference to the part tree within the new Message object.
                message.PartTreeRoot = part;

                DispatchParts(ref message);

                // Dispatch the part tree content to the appropriate collections and properties.
                // TODO
            }
            catch (Exception ex)
            {
                if (ErrorParsing != null)
                {
                    ErrorParsing(null, ex);
                }
            }
            return(message);
        }
Esempio n. 8
0
        /// <summary>
        /// Parses the header.
        /// </summary>
        /// <param name="header">The header.</param>
        public static void ParseHeader(ref Header header)
        {
#if !PocketPC
            string hdr = System.Text.Encoding.GetEncoding("iso-8859-1").GetString(header.OriginalData, 0, header.OriginalData.Length);
#else
            string hdr = Pop3Client.PPCEncode.GetString(header.OriginalData, 0, header.OriginalData.Length);
#endif
            hdr = System.Text.RegularExpressions.Regex.Match(hdr, @"[\s\S]+?((?=\r?\n\r?\n)|\Z)").Value;
            hdr = Parser.Unfold(hdr);
            //hdr = hdr);
            System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(hdr, @"(?<=((\r?\n)|\n)|\A)\S+:(.|(\r?\n[\t ]))+(?=((\r?\n)\S)|\Z)");
            while (m.Success)
            {
                string name  = FormatFieldName(m.Value.Substring(0, m.Value.IndexOf(':')));
                string value = Codec.RFC2047Decode(m.Value.Substring(m.Value.IndexOf(":") + 1)).Trim('\r', '\n').TrimStart(' ');
                if (name.Equals("received"))
                {
                    header.Trace.Add(Parser.ParseTrace(m.Value.Trim(' ')));
                }
                else if (name.Equals("to"))
                {
                    header.To = Parser.ParseAddresses(value);
                }
                else if (name.Equals("cc"))
                {
                    header.Cc = Parser.ParseAddresses(value);
                }
                else if (name.Equals("bcc"))
                {
                    header.Bcc = Parser.ParseAddresses(value);
                }
                else if (name.Equals("reply-to"))
                {
                    header.ReplyTo = Parser.ParseAddress(value);
                }
                else if (name.Equals("from"))
                {
                    header.From = Parser.ParseAddress(value);
                }
                else if (name.Equals("sender"))
                {
                    header.Sender = Parser.ParseAddress(value);
                }
                else if (name.Equals("content-type"))
                {
                    header.ContentType = Parser.GetContentType(m.Value);
                }
                else if (name.Equals("content-disposition"))
                {
                    header.ContentDisposition = Parser.GetContentDisposition(m.Value);
                }
                //else
                //{
                header.HeaderFields.Add(name, value);
                header.HeaderFieldNames.Add(name, m.Value.Substring(0, m.Value.IndexOf(':')));
                //}
                m = m.NextMatch();

                if (HeaderFieldParsing != null)
                {
                    HeaderFieldParsing(null, header);
                }
            }
        }
Esempio n. 9
0
		private static void ParseMessage(ref Message message, X509Certificate2Collection certificates)
		{   
            // Header parsing work
        
            string msg = System.Text.Encoding.ASCII.GetString(message.OriginalData);
            string header = msg.Substring(0,Regex.Match(msg, @"\r?\n\r?\n").Index);
            header = Parser.Unfold(header);
            header = Codec.RFC2047Decode(header);
            Match m = Regex.Match(header, @"(?<=((\r?\n)|\n)|\A)\S+:(.|(\r?\n[\t ]))+(?=((\r?\n)\S)|\Z)");
            while (m.Success)
            {
                string name = FormatFieldName(m.Value.Substring(0, m.Value.IndexOf(':')));
                string value = m.Value.Substring(m.Value.IndexOf(":") + 1);
                if (name.Equals("received")) message.Trace.Add(Parser.ParseTrace(m.Value.Trim(' ')));
                else if (name.Equals("to")) message.To = Parser.ParseAddresses(value);
                else if (name.Equals("cc")) message.Cc = Parser.ParseAddresses(value);
                else if (name.Equals("bcc")) message.Bcc = Parser.ParseAddresses(value);
                else if (name.Equals("reply-to")) message.ReplyTo = Parser.ParseAddress(value);
                else if (name.Equals("from")) message.From = Parser.ParseAddress(value);
                else if (name.Equals("sender")) message.Sender = Parser.ParseAddress(value);
                else if (name.Equals("content-type")) message.ContentType = Parser.GetContentType(m.Value);
                else if (name.Equals("content-disposition")) message.ContentDisposition = Parser.GetContentDisposition(m.Value);
                else if (name.Equals("domainkey-signature")) message.Signatures.DomainKeys = Signature.Parse(m.Value,message);

                message.HeaderFields.Add(name,value);
                message.HeaderFieldNames.Add(name, m.Value.Substring(0, m.Value.IndexOf(':')));
                m = m.NextMatch();
            }

            // Body parsing work

            if (message.ContentType.MimeType != null && message.ContentType.MimeType.IndexOf("multipart/signed") != -1) message.IsSigned = true;
            if (message.ContentType.MimeType != null && message.ContentType.MimeType.IndexOf("multipart/encrypted") != -1) message.IsEncrypted = true;

            //MimeTypedAndEncodedContent part = Parser.ParseMimeTypedAndEncodedContent(msg);//, certificates);
            
            /*if (part.ContentType.MimeType!=null && part.ContentType.MimeType.IndexOf("multipart/") != -1)
	        {
                Parser.ParseMultipart(ref message, part, certificates);
		        Parser.DistributeParts(ref message);
		        Parser.SetBodies(ref message);
	        }
            else if (part.ContentDisposition.Disposition.Equals("attachment"))
            {
                message.AllMimeParts.Add(part);
                message.Attachments.Add(part);
            }
            else
            {
                message.AllMimeParts.Add(part);
                if (part.ContentType.MimeType!=null && part.ContentType.MimeType.ToLower().IndexOf("text/html") != -1)
                {
                    if (part.ContentTransferEncoding == ContentTransferEncoding.Base64) message.BodyHtml.Text = System.Text.Encoding.GetEncoding(part.Charset).GetString(System.Convert.FromBase64String(part.TextContent.Substring(0, part.TextContent.IndexOf("\r\n\r\n"))));
                    else message.BodyHtml.Text = part.TextContent;
                }
                else if (part.ContentType.MimeType != null && part.ContentType.MimeType.ToLower().IndexOf("text/plain") != -1)
                {
                    if (part.ContentTransferEncoding == ContentTransferEncoding.Base64) message.BodyText.Text = System.Text.Encoding.GetEncoding(part.Charset).GetString(System.Convert.FromBase64String(part.TextContent.Substring(0, part.TextContent.IndexOf("\r\n\r\n"))));
                    else message.BodyText.Text = part.TextContent;
                }
                else
                {
                    message.BodyText.Text = System.Text.Encoding.ASCII.GetString(message.BodyBinary);
                }
            }

			if (!ActiveUp.Base.InternalLicense.Status.IsRegistered || ActiveUp.Base.InternalLicense.IsLite())
			{

				if (message.BodyHtml.Text.Length > 0
					&& message.BodyHtml.Text.IndexOf(ActiveUp.Base.InternalLicense.UnRegisteredHtmlSent) == -1
					&& message.BodyHtml.Text.IndexOf(ActiveUp.Base.InternalLicense.SponsorHtmlSent) == -1
					&& message.BodyHtml.Text.IndexOf(ActiveUp.Base.InternalLicense.UnRegisteredHtmlReceived) == -1)
					message.BodyHtml.Text = ActiveUp.Base.InternalLicense.UnRegisteredHtmlReceived + "<br><br>" +  message.BodyHtml.Text;
                
				if ((message.BodyText.Text.Length > 0 || message.BodyHtml.Text.Length == 0)
					&& message.BodyText.Text.IndexOf(ActiveUp.Base.InternalLicense.UnRegisteredTextSent) == -1
					&& message.BodyText.Text.IndexOf(ActiveUp.Base.InternalLicense.SponsorTextSent) == -1
					&& message.BodyText.Text.IndexOf(ActiveUp.Base.InternalLicense.UnRegisteredTextReceived) == -1)
					message.BodyText.Text = ActiveUp.Base.InternalLicense.UnRegisteredTextReceived + "\n\n" + message.BodyText.Text; 
			}
			
            else if (ActiveUp.Base.InternalLicense.IsSponsored())
			{
				if (message.BodyHtml.Text.Length > 0
					&& message.BodyHtml.Text.IndexOf(ActiveUp.Base.InternalLicense.SponsorHtmlSent) == -1
					&& message.BodyHtml.Text.IndexOf(ActiveUp.Base.InternalLicense.SponsorHtmlReceived) == -1
					&& message.BodyHtml.Text.IndexOf(ActiveUp.Base.InternalLicense.UnRegisteredHtmlSent) == -1)
					message.BodyHtml.Text += "<br><br>" + ActiveUp.Base.InternalLicense.SponsorHtmlReceived;

				if ((message.BodyText.Text.Length > 0 || message.BodyHtml.Text.Length == 0)
					&& message.BodyText.Text.IndexOf(ActiveUp.Base.InternalLicense.SponsorTextSent) == -1
					&& message.BodyText.Text.IndexOf(ActiveUp.Base.InternalLicense.SponsorTextReceived) == -1
					&& message.BodyHtml.Text.IndexOf(ActiveUp.Base.InternalLicense.UnRegisteredTextSent) == -1)
					message.BodyText.Text += "\n\n" + ActiveUp.Base.InternalLicense.SponsorTextReceived;
			}*/
		}