rfc 2045 entity
Inheritance: IEnumerable, IDisposable
Example #1
0
        public static string get_from_addr(SharpMimeMessage mime_message)
        {
            string from_addr = "";

            if (mime_message.Header.From != null && mime_message.Header.From != "")
            {
                from_addr = SharpMimeTools.parserfc2047Header(mime_message.Header.From);

                // handle multiline subject
                from_addr = from_addr.Replace("\t", " ");
            }
            else
            {
                from_addr = "[No From]";
            }

            return from_addr;
        }
Example #2
0
        static void test1() {
            String s = @"Received: from EMEAMAICLI-ED33.main.glb.corp.local ([169.254.3.202]) by
 EMEAMAICLI-EH01.main.glb.corp.local ([10.30.30.30]) with mapi; Thu, 4 Oct
 2012 12:53:30 +0200
From: Corey Trager <*****@*****.**>
To: HOLDING df-cgf-systemes-test <*****@*****.**>
Date: Thu, 4 Oct 2012 12:53:29 +0200
Subject: This is the mail title for Test 1
Thread-Topic: This is the mail title for Test 1
Thread-Index: Ac2iG4qeNG4GodS/RhCEZtD6FTjmFAAAT0XQAABcA7A=
Message-ID:
 <*****@*****.**>
Accept-Language: fr-FR, en-US
Content-Language: fr-FR
X-MS-Exchange-Organization-AuthAs: Internal
X-MS-Exchange-Organization-AuthMechanism: 04
X-MS-Exchange-Organization-AuthSource: EMEAMAICLI-EH01.main.glb.corp.local
X-MS-Has-Attach:
X-MS-Exchange-Organization-SCL: -1
X-MS-TNEF-Correlator:
acceptlanguage: fr-FR, en-US
Content-Type: text/plain; charset=""iso-8859-1""
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0

Hello Test 1,

Description of the test :
There is no attachment, no enclosed image, just plain text

Regards,
Rapha=EBl
";
            byte[] bytes = Encoding.UTF8.GetBytes(s);
            System.IO.MemoryStream stream = new System.IO.MemoryStream(bytes);
            SharpMimeMessage mime_message = new SharpMimeMessage(stream);
            System.Diagnostics.Debug.Print(mime_message.BodyDecoded);

        
        }
Example #3
0
        ///////////////////////////////////////////////////////////////////////
        public static string determine_part_filename(SharpMimeMessage part)
        {


            string filename = "";

            filename = part.Header.ContentDispositionParameters["filename"];


            // try again
            if (string.IsNullOrEmpty(filename))
            {
                filename = part.Header.ContentTypeParameters["name"];
            }


            // Maybe it's still some sort of non-text part but without a filename.
            // Like an inline image, or the html alternative of a plain text body.
            if (string.IsNullOrEmpty(filename))
            {

                if (part.Header.ContentType.ToLower().IndexOf("text/plain") > -1)
                {
                    // The plain text body.  We don't want to
                    // add this as an attachment.

                }
                else
                {

                    // Some other mime part we don't understand.
                    // Let's make it an attachment with a synthesized filename, just so we don't loose it.

                    // Change text/html to text.html, etc
                    // so that downstream logic that reacts
                    // to the file extensions works.
                    filename = part.Header.ContentType;
                    filename = filename.Replace("/", ".");
                    int pos = filename.IndexOf(";");
                    if (pos > 0)
                    {
                        filename = filename.Substring(0, pos);
                    }
                }
            }

            if (filename == null)
            {
                filename = "";
            }

            return filename;

        }
Example #4
0
        ///////////////////////////////////////////////////////////////////////
        public static bool is_attachment(SharpMimeMessage part)
        {
            string filename = part.Header.ContentDispositionParameters["filename"];
            if (string.IsNullOrEmpty(filename))
            {
                filename = part.Header.ContentTypeParameters["name"];
            }

            if (filename != null && filename != "")
            {
                return true;
            }
            else
            {
                return false;
            }
        }
Example #5
0
 public MessageViewModel(SharpMimeMessage message)
 {
     Message = message;
 }
Example #6
0
 private bool parse()
 {
     
     if (!IsMultipart || Equals(mi.parts.Parent))
     {
         return true;
     }
     switch (mi.header.TopLevelMediaType)
     {
         case MimeTopLevelMediaType.message:
             mi.parts.Parent = this;
             SharpMimeMessage message = new SharpMimeMessage(this.message, mi.start_body, mi.end);
             mi.parts.Add(message);
             break;
         case MimeTopLevelMediaType.multipart:
             this.message.SeekPoint(mi.start_body);
             String line;
             mi.parts.Parent = this;
             String boundary_start = String.Concat("--", mi.header.ContentTypeParameters["boundary"]);
             String boundary_end = String.Concat("--", mi.header.ContentTypeParameters["boundary"], "--");
             for (line = this.message.ReadLine(); line != null; line = this.message.ReadLine())
             {
                 // It can't be a boundary line
                 if (line.Length < 3)
                     continue;
                 // Match start boundary line
                 if (line.Length == boundary_start.Length && line == boundary_start)
                 {
                     if (mi.parts.Count > 0)
                     {
                         mi.parts[mi.parts.Count - 1].mi.end = this.message.Position_preRead;
                     }
                     SharpMimeMessage msg = new SharpMimeMessage(this.message, this.message.Position);
                     mi.parts.Add(msg);
                     // Match end boundary line
                 }
                 else if (line.Length == boundary_end.Length && line == boundary_end)
                 {
                     mi.end = this.message.Position_preRead;
                     if (mi.parts.Count > 0)
                     {
                         mi.parts[mi.parts.Count - 1].mi.end = this.message.Position_preRead;
                     }
                     break;
                 }
             }
             break;
         case MimeTopLevelMediaType.audio:
         case MimeTopLevelMediaType.image:
         case MimeTopLevelMediaType.text:
         case MimeTopLevelMediaType.video:
         case MimeTopLevelMediaType.application:
         default:
             break;
     }
     return !false;
 }
Example #7
0
 private void ParseMessage(Stream stream, MimeTopLevelMediaType types, SharpDecodeOptions options, String preferredtextsubtype, String path)
 {
     Attachments = new List<SharpAttachment>();
     using (SharpMimeMessage message = new SharpMimeMessage(stream))
     {
         ParseMessage(message, types, (options & SharpDecodeOptions.AllowHtml) == SharpDecodeOptions.AllowHtml, options, preferredtextsubtype, path);
         Headers = message.Header;
     }
     // find and decode uuencoded content if configured to do so (and attachments a allowed)
     if ((options & SharpDecodeOptions.UuDecode) == SharpDecodeOptions.UuDecode
            && (options & SharpDecodeOptions.AllowAttachments) == SharpDecodeOptions.AllowAttachments)
         UuDecode(path);
     // Date
     _date = SharpMimeTools.parseDate(Headers.Date);
     if (_date.Equals(DateTime.MinValue))
     {
         String date = Headers["Received"];
         if (date == null)
             date = String.Empty;
         if (date.IndexOf("\r\n") > 0)
             date = date.Substring(0, date.IndexOf("\r\n"));
         if (date.LastIndexOf(';') > 0)
             date = date.Substring(date.LastIndexOf(';') + 1).Trim();
         else
             date = String.Empty;
         _date = SharpMimeTools.parseDate(date);
     }
     // Subject
     _subject = SharpMimeTools.parserfc2047Header(Headers.Subject);
     // To
     To = SharpMimeAddressCollection.Parse(Headers.To);
     // From
     SharpMimeAddressCollection from = SharpMimeAddressCollection.Parse(Headers.From);
     foreach (SharpMimeAddress item in from)
     {
         _from_name = item.Name;
         _from_addr = item.Address;
         if (_from_name == null || _from_name.Equals(String.Empty))
             _from_name = item.Address;
     }
 }
Example #8
0
        ///////////////////////////////////////////////////////////////////////
        public static string get_headers_for_comment(SharpMimeMessage mime_message)
        {
            string headers = "";

            if (mime_message.Header.Subject != null && mime_message.Header.Subject != "")
            {
                headers = "Subject: " + MyMime.get_subject(mime_message) + "\n";
            }

            if (mime_message.Header.To != null && mime_message.Header.To != "")
            {
                headers += "To: " + MyMime.get_to(mime_message) + "\n";
            }

            if (mime_message.Header.Cc != null && mime_message.Header.Cc != "")
            {
                headers += "Cc: " + MyMime.get_cc(mime_message) + "\n";
            }

            return headers;
        }
Example #9
0
        public static string get_comment(SharpMimeMessage mime_message)
        {
            string comment = MyMime.extract_comment_text_from_email(mime_message, "text/plain");
            
            // Corey says... commenting this out 2014-04-03.  I simply can't remember what I was thinking here.
            // Why would I copy the HTML version of the email into the comment text?

            //if (comment == null)
            //{
            //    comment = MyMime.extract_comment_text_from_email(mime_message, "text/html");
            //}

            if (comment == null)
            {
                comment = "NO PLAIN TEXT MESSAGE BODY FOUND";
            }

            return comment;
        }
Example #10
0
        static void test2()
        {
            String s = @"Received: from EMEAMAICLI-ED33.main.glb.corp.local ([169.254.3.202]) by
 EMEAMAICLI-EH02.main.glb.corp.local ([10.30.30.31]) with mapi; Thu, 4 Oct
 2012 15:14:34 +0200
From: Corey Trager <*****@*****.**>
To: HOLDING df-cgf-systemes-test <*****@*****.**>
Date: Thu, 4 Oct 2012 15:14:32 +0200
Subject: This is the mail title for Test 2
Thread-Topic: This is the mail title for Test 2
Thread-Index: Ac2iG4qeNG4GodS/RhCEZtD6FTjmFAAAT0XQAABcA7AAABrJgA==
Message-ID:
 <*****@*****.**>
Accept-Language: fr-FR, en-US
Content-Language: fr-FR
X-MS-Exchange-Organization-AuthAs: Internal
X-MS-Exchange-Organization-AuthMechanism: 04
X-MS-Exchange-Organization-AuthSource: EMEAMAICLI-EH02.main.glb.corp.local
X-MS-Has-Attach: yes
X-MS-Exchange-Organization-SCL: -1
X-MS-TNEF-Correlator:
acceptlanguage: fr-FR, en-US
Content-Type: multipart/related;
	boundary=""_002_1372B39E66C04B4E9D95CF73184032B006FD4ABDF2EMEAMAICLIED3_"";
	type=""text/plain""
MIME-Version: 1.0

--_002_1372B39E66C04B4E9D95CF73184032B006FD4ABDF2EMEAMAICLIED3_
Content-Type: text/plain; charset=""iso-8859-1""
Content-Transfer-Encoding: quoted-printable

Hello Test 2,

Description of the test :
There is no attachment but there is one image enclosed within the mail text=
, here it is :

[cid:[email protected]]
Regards,
Rapha=EBl



--_002_1372B39E66C04B4E9D95CF73184032B006FD4ABDF2EMEAMAICLIED3_
Content-Type: image/png; name=""image001.png""
Content-Description: image001.png
Content-Disposition: inline; filename=""image001.png""; size=11296;
	creation-date=""Thu, 04 Oct 2012 13:14:33 GMT"";
	modification-date=""Thu, 04 Oct 2012 13:14:33 GMT""
Content-ID: <[email protected]>
Content-Transfer-Encoding: base64

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
gg==

--_002_1372B39E66C04B4E9D95CF73184032B006FD4ABDF2EMEAMAICLIED3_--";

            byte[] bytes = Encoding.UTF8.GetBytes(s);
            System.IO.MemoryStream stream = new System.IO.MemoryStream(bytes);
            SharpMimeMessage mime_message = new SharpMimeMessage(stream);
            String comment = get_comment(mime_message);
            System.Diagnostics.Debug.Print(comment);

        }
Example #11
0
        static void test5() {
            String s = @"Received: from EMEAMAICLI-ED33.main.glb.corp.local ([169.254.3.202]) by
 EMEAMAICLI-EH01.main.glb.corp.local ([10.30.30.30]) with mapi; Thu, 4 Oct
 2012 15:26:16 +0200
From: Corey Trager <*****@*****.**>
To: HOLDING df-cgf-systemes-test <*****@*****.**>
Date: Thu, 4 Oct 2012 15:26:15 +0200
Subject: This is the mail title for Test 5
Thread-Topic: This is the mail title for Test 5
Thread-Index:
 Ac2iG4qeNG4GodS/RhCEZtD6FTjmFAAAT0XQAABcA7AAABrJgAAE/dogAAAv3cA=
Message-ID:
 <*****@*****.**>
Accept-Language: fr-FR, en-US
Content-Language: fr-FR
X-MS-Exchange-Organization-AuthAs: Internal
X-MS-Exchange-Organization-AuthMechanism: 04
X-MS-Exchange-Organization-AuthSource: EMEAMAICLI-EH01.main.glb.corp.local
X-MS-Has-Attach: yes
X-MS-Exchange-Organization-SCL: -1
X-MS-TNEF-Correlator:
acceptlanguage: fr-FR, en-US
Content-Type: multipart/mixed;
	boundary=""_002_1372B39E66C04B4E9D95CF73184032B006FD4ABE03EMEAMAICLIED3_""
MIME-Version: 1.0

--_002_1372B39E66C04B4E9D95CF73184032B006FD4ABE03EMEAMAICLIED3_
Content-Type: text/plain; charset=""iso-8859-1""
Content-Transfer-Encoding: quoted-printable

Hello Test 5,

Description of the test :
There is no image enclosed but there is one mail (MSG format) attached to t=
he mail.

Regards,
Rapha=EBl


--_002_1372B39E66C04B4E9D95CF73184032B006FD4ABE03EMEAMAICLIED3_
Content-Type: message/rfc822

From: Corey Trager <*****@*****.**>
To: HOLDING df-cgf-systemes-test <*****@*****.**>
Date: Thu, 4 Oct 2012 15:25:22 +0200
Subject: This is a dummy mail title
Thread-Topic: This is a dummy mail title
Thread-Index:
 Ac2iG4qeNG4GodS/RhCEZtD6FTjmFAAAT0XQAABcA7AAABrJgAAE/dogAAAzcaA=
Accept-Language: fr-FR, en-US
Content-Language: fr-FR
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
Content-Type: text/plain; charset=""us-ascii""
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0

This is a dummy mail body.

This mail will be put in attachment for the test 5.



R


--_002_1372B39E66C04B4E9D95CF73184032B006FD4ABE03EMEAMAICLIED3_--";

            byte[] bytes = Encoding.UTF8.GetBytes(s);
            System.IO.MemoryStream stream = new System.IO.MemoryStream(bytes);
            SharpMimeMessage mime_message = new SharpMimeMessage(stream);
            String comment = get_comment(mime_message);
            System.Diagnostics.Debug.Print(comment);

        }
Example #12
0
        static void test2b() {

            String s = @"To: ""aaa""
Subject: bbb
Date: Wed, 23 Jan 2013 20:46:58 -0600
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary=""----=_NextPart_000_0006_01CDF9AA.CE5B7830""
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Unsent: 1
X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3538.513

This is a multi-part message in MIME format.

------=_NextPart_000_0006_01CDF9AA.CE5B7830
Content-Type: text/plain;
	charset=""iso-8859-1""
Content-Transfer-Encoding: quoted-printable

qqqqq ccccc
qqqqq ccccc
qqqqq ccccc
------=_NextPart_000_0006_01CDF9AA.CE5B7830
Content-Type: text/html;
	charset=""iso-8859-1""
Content-Transfer-Encoding: quoted-printable

<HTML><HEAD></HEAD>
<BODY dir=3Dltr>
<DIV dir=3Dltr>
<DIV style=3D""FONT-FAMILY: 'Calibri'; COLOR: #000000; FONT-SIZE: 12pt"">
<DIV>qqqqqq ccccc</DIV></DIV></DIV></BODY></HTML>

------=_NextPart_000_0006_01CDF9AA.CE5B7830--";

            byte[] bytes = Encoding.UTF8.GetBytes(s);
            System.IO.MemoryStream stream = new System.IO.MemoryStream(bytes);
            SharpMimeMessage mime_message = new SharpMimeMessage(stream);
            String comment = get_comment(mime_message);
            System.Diagnostics.Debug.Print(comment);

        }
Example #13
0
 private static string GetName(SharpMimeMessage part)
 {
     return part.Name ?? String.Concat("generated_", part.GetHashCode(), ".", part.Header.SubType);
 }
Example #14
0
        ///////////////////////////////////////////////////////////////////////
        public static void add_attachments(SharpMimeMessage mime_message, int bugid, int parent_postid, Security security)
        {
            if (mime_message.IsMultipart)
            {
                foreach (SharpMimeMessage part in mime_message)
                {
                    if (part.IsMultipart)
                    {
                        // recursive call to this function
                        add_attachments(part, bugid, parent_postid, security);
                    }
                    else
                    {

                        string filename = determine_part_filename(part);

                        if (filename != "")
                        {
                            add_attachment(filename, part, bugid, parent_postid, security);
                        }
                    }
                }
            }

            else
            {
                string filename = determine_part_filename(mime_message);

                if (filename != "")
                {
                    add_attachment(filename, mime_message, bugid, parent_postid, security);
                }
            }

        }
Example #15
0
        public static string get_cc(SharpMimeMessage mime_message)
        {
            string cc = "";
            if (mime_message.Header.Cc != null && mime_message.Header.Cc != "")
            {
                cc = SharpMimeTools.parserfc2047Header(mime_message.Header.Cc);

                // handle multiline
                cc = cc.Replace("\t", " ");
            }
            return cc;
        }
Example #16
0
        ///////////////////////////////////////////////////////////////////////

        public static void add_attachment(string filename, SharpMimeMessage part, int bugid, int parent_postid, Security security)
        {

            Util.write_to_log("attachment:" + filename);

            string missing_attachment_msg = "";

            int max_upload_size = Convert.ToInt32(Util.get_setting("MaxUploadSize", "100000"));
            if (part.Size > max_upload_size)
            {
                missing_attachment_msg = "ERROR: email attachment exceeds size limit.";
            }

            string content_type = part.Header.TopLevelMediaType + "/" + part.Header.SubType;
            string desc;
            MemoryStream attachmentStream = new MemoryStream();

            if (missing_attachment_msg == "")
            {
                desc = "email attachment";
            }
            else
            {
                desc = missing_attachment_msg;
            }

            part.DumpBody(attachmentStream);
            attachmentStream.Position = 0;
            Bug.insert_post_attachment(
                security,
                bugid,
                attachmentStream,
                (int)attachmentStream.Length,
                filename,
                desc,
                content_type,
                parent_postid,
                false,  // not hidden
                false); // don't send notifications

        }
Example #17
0
        public static string get_to(SharpMimeMessage mime_message)
        {
            string to = "";
            if (mime_message.Header.To != null && mime_message.Header.To != "")
            {
                to = SharpMimeTools.parserfc2047Header(mime_message.Header.To);

                // handle multiline
                to = to.Replace("\t", " ");
            }
            return to;
        }
Example #18
0
        public static Security get_synthesized_security(SharpMimeMessage mime_message, string from_addr, string username)
        {
            // Get the btnet user, which might actually be a user that corresonds with the email sender, not the username above
            DataRow dr = MyMime.get_user_datarow_maybe_using_from_addr(mime_message, from_addr, username);

            // simulate a user having logged in, for downstream code
            Security security = new Security();
            security.context = System.Web.HttpContext.Current;
            security.user.username = username;
            security.user.usid = (int)dr["us_id"];
            security.user.is_admin = Convert.ToBoolean(dr["us_admin"]);
            security.user.org = (int)dr["us_org"];
            security.user.other_orgs_permission_level = (int)dr["og_other_orgs_permission_level"];
            security.user.forced_project = (int)dr["us_forced_project"];

            return security;
        }
Example #19
0
        public static string get_comment(SharpMimeMessage mime_message)
        {
            string comment = MyMime.extract_comment_text_from_email(mime_message, "text/plain");
            if (comment == null)
            {
                comment = MyMime.extract_comment_text_from_email(mime_message, "text/html");
            }

            if (comment == null)
            {
                comment = "NO PLAIN TEXT MESSAGE BODY FOUND";
            }

            return comment;
        }
Example #20
0
        public static string get_subject(SharpMimeMessage mime_message)
        {
            string subject = "";

            if (mime_message.Header.Subject != null && mime_message.Header.Subject != "")
            {
                subject = SharpMimeTools.parserfc2047Header(mime_message.Header.Subject);

                // handle multiline subject
                subject = subject.Replace("\t", " ");

            }
            else
            {
                subject = "[No Subject]";
            }

            return subject;
        }
Example #21
0
        ///////////////////////////////////////////////////////////////////////    
        public static DataRow get_user_datarow_maybe_using_from_addr(SharpMimeMessage mime_message, string from_addr, string username)
        {

            DataRow dr = null;

            string sql = @"
select us_id, us_admin, us_username, us_org, og_other_orgs_permission_level, isnull(us_forced_project,0) us_forced_project
from users
inner join orgs on us_org = og_id
where us_username = N'$us'";

            // Create a new user from the "from" email address    
            string btnet_service_username = Util.get_setting("CreateUserFromEmailAddressIfThisUsername", "");
            if (!string.IsNullOrEmpty(from_addr) && username == btnet_service_username)
            {

                // We can do a better job of parsing the from_addr here than we did in btnet_service.exe    
                if (mime_message != null)
                {
                    if (mime_message.Header.From != null && mime_message.Header.From != "")
                    {
                        from_addr = SharpMimeTools.parserfc2047Header(mime_message.Header.From);

                        // handle multiline from
                        from_addr = from_addr.Replace("\t", " ");
                    }
                }

                // See if there's already a username that matches this email address
                username = Email.simplify_email_address(from_addr);

                // Does a user with this email already exist?
                sql = sql.Replace("$us", username.Replace("'", "''"));

                // We maybe found [email protected], so let's use him as the user instead of the btnet_service.exe user
                dr = btnet.DbUtil.get_datarow(sql);

                // We didn't find the user, so let's create him, using the email address as the username.	
                if (dr == null)
                {

                    bool use_domain_as_org_name = Util.get_setting("UseEmailDomainAsNewOrgNameWhenCreatingNewUser", "0") == "1";

                    btnet.User.copy_user(
                        username,
                        username,
                        "", "", "",  // first, last, signature
                        0,  // salt
                        Guid.NewGuid().ToString(), // random value for password,
                        Util.get_setting("CreateUsersFromEmailTemplate", "[error - missing user template]"),
                        use_domain_as_org_name);

                    // now that we have created a user, try again
                    dr = btnet.DbUtil.get_datarow(sql);
                }
            }
            else
            {
                // Use the btnet_service.exe user as the username
                sql = sql.Replace("$us", username.Replace("'", "''"));
                dr = btnet.DbUtil.get_datarow(sql);
            }

            return dr;
        }
Example #22
0
 private void ParseMessage(SharpMimeMessage part, MimeTopLevelMediaType types, bool html, SharpDecodeOptions options, String preferredtextsubtype, String path)
 {
     if ((types & part.Header.TopLevelMediaType) != part.Header.TopLevelMediaType)
     {
         return;
     }
     switch (part.Header.TopLevelMediaType)
     {
         case MimeTopLevelMediaType.multipart:
         case MimeTopLevelMediaType.message:
             // TODO: allow other subtypes of "message"
             if (part.Header.TopLevelMediaType.Equals(MimeTopLevelMediaType.message))
             {
                 // Only message/rfc822 allowed, other subtypes ignored
                 if (part.Header.SubType == "rfc822")
                 {
                     // If NotRecursiveRfc822 option is set, handle part as an attachment
                     if ((options & SharpDecodeOptions.NotRecursiveRfc822) == SharpDecodeOptions.NotRecursiveRfc822)
                     {
                         goto case anmar.SharpMimeTools.MimeTopLevelMediaType.application;
                     }
                 }
                 else
                 {
                     break;
                 }
             }
             if (part.Header.SubType.Equals("alternative") && part.PartsCount > 0)
             {
                 SharpMimeMessage altenative = null;
                 // Get the first mime part of the alternatives that has a accepted Mime-Type
                 for (int i = part.PartsCount; i > 0; i--)
                 {
                     SharpMimeMessage item = part.GetPart(i - 1);
                     if ((types & part.Header.TopLevelMediaType) != part.Header.TopLevelMediaType
                         || (!html && item.Header.TopLevelMediaType.Equals(MimeTopLevelMediaType.text) && item.Header.SubType.Equals("html"))
                         )
                     {
                         continue;
                     }
                     // First allowed one.
                     if (altenative == null)
                     {
                         altenative = item;
                         // We don't have to select body part based on subtype if not asked for, or not a text one
                         // or it's already the preferred one
                         if (preferredtextsubtype == null || item.Header.TopLevelMediaType != MimeTopLevelMediaType.text || (preferredtextsubtype != null && item.Header.SubType == preferredtextsubtype))
                         {
                             break;
                         }
                         // This one is preferred over the last part
                     }
                     else if (preferredtextsubtype != null && item.Header.TopLevelMediaType == MimeTopLevelMediaType.text && item.Header.SubType == preferredtextsubtype)
                     {
                         altenative = item;
                         break;
                     }
                 }
                 if (altenative != null)
                 {
                     // If message body as html is allowed and part has a Content-ID field
                     // add an anchor to mark this body part
                     if (html && part.Header.Contains("Content-ID") && (options & SharpDecodeOptions.NamedAnchors) == SharpDecodeOptions.NamedAnchors)
                     {
                         // There is a previous text body, so enclose it in <pre>
                         if (!HasHtmlBody && _body.Length > 0)
                         {
                             _body = String.Concat("<pre>", HttpUtility.HtmlEncode(_body), "</pre>");
                             HasHtmlBody = true;
                         }
                         // Add the anchor
                         _body = String.Concat(_body, "<a name=\"", SharpMimeTools.Rfc2392Url(MessageID), "_", SharpMimeTools.Rfc2392Url(part.Header.ContentID), "\"></a>");
                     }
                     ParseMessage(altenative, types, html, options, preferredtextsubtype, path);
                 }
                 // TODO: Take into account each subtype of "multipart" and "message"
             }
             else if (part.PartsCount > 0)
             {
                 foreach (SharpMimeMessage item in part)
                 {
                     ParseMessage(item, types, html, options, preferredtextsubtype, path);
                 }
             }
             break;
         case MimeTopLevelMediaType.text:
             if ((part.Disposition == null || !part.Disposition.Equals("attachment"))
                 && (part.Header.SubType.Equals("plain") || part.Header.SubType.Equals("html")))
             {
                 bool body_was_html = HasHtmlBody;
                 // HTML content not allowed
                 if (part.Header.SubType.Equals("html"))
                 {
                     if (!html)
                         break;
                     else
                         HasHtmlBody = true;
                 }
                 if (html && part.Header.Contains("Content-ID") && (options & SharpDecodeOptions.NamedAnchors) == SharpDecodeOptions.NamedAnchors)
                 {
                     HasHtmlBody = true;
                 }
                 if (HasHtmlBody && !body_was_html && !String.IsNullOrEmpty(_body))
                 {
                     _body = String.Concat("<pre>", HttpUtility.HtmlEncode(_body), "</pre>");
                 }
                 // If message body is html and this part has a Content-ID field
                 // add an anchor to mark this body part
                 if (HasHtmlBody && part.Header.Contains("Content-ID") && (options & SharpDecodeOptions.NamedAnchors) == SharpDecodeOptions.NamedAnchors)
                 {
                     _body = String.Concat(_body, "<a name=\"", SharpMimeTools.Rfc2392Url(MessageID), "_", SharpMimeTools.Rfc2392Url(part.Header.ContentID), "\"></a>");
                 }
                 if (HasHtmlBody && part.Header.SubType.Equals("plain"))
                 {
                     _body = String.Concat(_body, "<pre>", HttpUtility.HtmlEncode(part.BodyDecoded), "</pre>");
                 }
                 else
                     _body = String.Concat(_body, part.BodyDecoded);
             }
             else
             {
                 if ((types & MimeTopLevelMediaType.application) != MimeTopLevelMediaType.application)
                 {
                     return;
                 }
                 goto case anmar.SharpMimeTools.MimeTopLevelMediaType.application;
             }
             break;
         case MimeTopLevelMediaType.application:
         case MimeTopLevelMediaType.audio:
         case MimeTopLevelMediaType.image:
         case MimeTopLevelMediaType.video:
             // Attachments not allowed.
             if ((options & SharpDecodeOptions.AllowAttachments) != SharpDecodeOptions.AllowAttachments)
                 break;
             SharpAttachment attachment = null;
             // Save to a file
             if (path != null)
             {
                 FileInfo file = part.DumpBody(path, true);
                 if (file != null)
                 {
                     attachment = new SharpAttachment(file);
                     attachment.Name = file.Name;
                     attachment.Size = file.Length;
                 }
                 // Save to a stream
             }
             else
             {
                 using (MemoryStream stream = new MemoryStream())
                 {
                     if (part.DumpBody(stream))
                     {
                         if (stream != null && stream.CanSeek)
                             stream.Seek(0, SeekOrigin.Begin);
                         attachment = new SharpAttachment(stream);
                         if (part.Name != null)
                             attachment.Name = part.Name;
                         else
                             attachment.Name = String.Concat("generated_", part.GetHashCode(), ".", part.Header.SubType);
                         attachment.Size = stream.Length;
                     }
                 }
             }
             if (attachment != null && part.Header.SubType == "ms-tnef" && (options & SharpDecodeOptions.DecodeTnef) == SharpDecodeOptions.DecodeTnef)
             {
                 // Try getting attachments form a tnef stream
                 Stream stream = attachment.Stream;
                 SharpTnefMessage tnef = new SharpTnefMessage(stream);
                 if (tnef.Parse(path))
                 {
                     if (tnef.Attachments != null)
                     {
                         Attachments.AddRange(tnef.Attachments);
                     }
                     attachment.Close();
                     // Delete the raw tnef file
                     if (attachment.SavedFile != null)
                     {
                         if (stream != null && stream.CanRead)
                         {
                             stream.Close();
                             stream = null;
                         }
                         attachment.SavedFile.Delete();
                     }
                     attachment = null;
                     tnef.Close();
                 }
                 else
                 {
                     // The read-only stream is no longer needed and locks the file
                     if (attachment.SavedFile != null && stream != null && stream.CanRead)
                     {
                         stream.Close();
                         stream = null;
                     }
                 }
                 stream = null;
                 tnef = null;
             }
             if (attachment != null)
             {
                 if (part.Disposition != null && part.Disposition == "inline")
                 {
                     attachment.Inline = true;
                 }
                 attachment.MimeTopLevelMediaType = part.Header.TopLevelMediaType;
                 attachment.MimeMediaSubType = part.Header.SubType;
                 // Store attachment's CreationTime
                 if (part.Header.ContentDispositionParameters.ContainsKey("creation-date"))
                     attachment.CreationTime = SharpMimeTools.parseDate(part.Header.ContentDispositionParameters["creation-date"]);
                 // Store attachment's LastWriteTime
                 if (part.Header.ContentDispositionParameters.ContainsKey("modification-date"))
                     attachment.LastWriteTime = SharpMimeTools.parseDate(part.Header.ContentDispositionParameters["modification-date"]);
                 if (part.Header.Contains("Content-ID"))
                     attachment.ContentID = part.Header.ContentID;
                 Attachments.Add(attachment);
             }
             break;
         default:
             break;
     }
 }
Example #23
0
        ///////////////////////////////////////////////////////////////////////
        // This should be rewritten with recursion...
        public static string extract_comment_text_from_email(SharpMimeMessage mime_message, string mimetype)
        {

            string comment = null;

            // use the first plain text message body
            foreach (SharpMimeMessage part in mime_message)
            {
                if (part.IsMultipart)
                {
                    foreach (SharpMimeMessage subpart in part)
                    {

                        if (subpart.IsMultipart)
                        {
                            foreach (SharpMimeMessage sub2 in subpart)
                            {
                                if (sub2.Header.ContentType.ToLower().IndexOf(mimetype) > -1
                                && !is_attachment(sub2))
                                {
                                    comment = sub2.BodyDecoded;
                                    break;
                                }
                            }
                        }
                        else
                        {
                            if (subpart.Header.ContentType.ToLower().IndexOf(mimetype) > -1
                            && !is_attachment(subpart))
                            {
                                comment = subpart.BodyDecoded;
                                break;
                            }
                        }
                    }
                }
                else
                {
                    if (part.Header.ContentType.ToLower().IndexOf(mimetype) > -1
                    && !is_attachment(part))
                    {
                        comment = part.BodyDecoded;
                        break;
                    }
                }
            }


            if (comment == null)
            { 
                if (mime_message.Header.ContentType.ToLower().IndexOf(mimetype) > -1)
                {
                    comment = mime_message.BodyDecoded;
                }
            }

            return comment;
        }
Example #24
0
 public InspectorWindow(SharpMimeMessage message)
 {
     InitializeComponent();
     Message = new MessageViewModel(message);
 }
Example #25
0
        public static string get_comment(SharpMimeMessage mime_message)
        {
            string comment = "";

            if (mime_message.Header.ContentType.ToLower().IndexOf("text/plain") > -1
            && !MyMime.is_attachment(mime_message))
            {
                comment = mime_message.BodyDecoded;
            }
            else
            {
                comment = MyMime.extract_comment_text_from_email(mime_message, "text/plain");
                if (comment == null)
                {
                    comment = MyMime.extract_comment_text_from_email(mime_message, "text/html");
                }

                if (comment == null)
                {
                    comment = "NO PLAIN TEXT MESSAGE BODY FOUND";
                }
            }

            return comment;
        }