Click here to Skip to main content
Click here to Skip to main content

A C# Implementation of Mime De/encode

By , 21 Aug 2005
 

Introduction

Several days ago, when I needed a MIME lib to encode/decode some MIME type messages in C#, I did not find any suitable classes. What I only found is a C++ implementation written by nickadams. I read his code and then, I translated it into C# code. And it works well for me.

How To Use

It is as easy to use as nickadams' code.:) Here's the example:

Encode a Message

   MimeMessage mail = new MimeMessage();
   mail.SetDate();
   mail.Setversion();
   mail.SetFrom("sender@local.com",null);
   mail.SetTo("recipient1@server1.com, 
      Nick Name <recipient2@server1.com>, 
      \"Nick Name\" <recipient3@server2.com>");
   mail.SetCC("recipient4@server4.com",null);
   mail.SetSubject("test mail",null);
   mail.SetFieldValue("X-Priority", "3 (Normal)", null);

   // Initialize header
   mail.SetContentType("multipart/mixed");
   // generate a boundary string automatically
   // if the parameter is NULL
   mail.SetBoundary(null);
   // Add a text body part
   // default Content-Type is "text/plain"
   // default Content-Transfer-Encoding is "7bit"
   MimeBody mBody = mail.CreatePart();
   mBody.SetText("Hi, there");  // set the content of the body part

   // Add a file attachment body part
   mBody = mail.CreatePart();
   mBody.SetDescription("enclosed photo",null);
   mBody.SetTransferEncoding("base64");
   // if Content-Type is not specified, it'll be
   // set to "image/jpeg" by ReadFromFile()
   mBody.ReadFromFile(".\\00.jpg"); 

   // Generate a simple message
   MimeMessage mail2 = new MimeMessage();
   mail2.SetFrom("abc@abc.com",null);
   mail2.SetTo("abc@abc.com",null);
   mail2.SetSubject("This is an attached message",null);
   mail2.SetText("Content of attached message.\r\n");

   // Attach the message
   mBody = mail.CreatePart();
   mBody.SetDescription("enclosed message",null);
   mBody.SetTransferEncoding("7bit");
   // if Content-Type is not specified, it'll be
   // set to "message/rfc822" by SetMessage()
   mBody.SetMessage(mail2); 

   // Add an embedded multipart
   mBody = mail.CreatePart();
   mBody.SetContentType("multipart/alternative");
   mBody.SetBoundary("embeded_multipart_boundary");
   MimeBody mBodyChild = mBody.CreatePart();
   mBodyChild.SetText("Content of Part 1\r\n");
   mBodyChild = mBody.CreatePart();
   mBodyChild.SetText("Content of Part 2\r\n");

   //store content to a string buffer
   StringBuilder sb = new StringBuilder();
   mail.StoreBody(sb);

Decode a Message

   StreamReader sr = new StreamReader(".\\aaa.txt");
   string message = sr.ReadToEnd();
   MimeMessage aMimeMessage = new MimeMessage();
   aMimeMessage.LoadBody(message);
   ArrayList bodylist = new ArrayList();
   aMimeMessage.GetBodyPartList(bodylist);
   for(int i=0;i<bodylist.Count;i++)
   {
    MimeBody ab = (MimeBody) bodylist[i];
    if(ab.IsText())
    {
     string m = ab.GetText();
     System.Windows.Forms.MessageBox.Show(m);
    }
    else if(ab.IsAttachment())
    {
     ab.WriteToFile("new"+ab.GetName());
    }
   }

Finally...

Many thanks to nickadams. Your great work helps me a lot.

History

  • 21st August, 2005: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

lionwind
Web Developer
China China
Member
I think I have to start coding my life now...Smile | :)

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralHpw to download attatchment that are inside MIME filememberrishi2123 Feb '11 - 17:48 
GeneralError decoding image attachments please helpmemberWajeeh7 Dec '09 - 20:40 
GeneralUnsafe codememberGWBas1c6 Aug '09 - 9:38 
GeneralGreat! Thanks.memberbhiller24 Jul '09 - 3:29 
Maybe only China and Germany have to suffer from missing ASCII compatibility... I tried several Pop3 projects on codeproject, but they failed when it came to national characters in the email body, or in the subject line. Now, I take Peter Huber's Pop3MailClient, call GetRawEmail, and put the raw message into MIME.MimeMessage. It really works!
 
A minor fix I had to introduce is an error encountered with subject line
"Subject: =?utf-8?Q?=34=2e=38=33=36_neue_Positionen_=2d_Ihre_aktuelle_Stellen=c3=bcbersicht?="
It is in MimeFieldCodeBase.DecodeToString, line 36 of the file. Simply do a if (j == k + 2) j = s.IndexOf("?=", j + 1); before determining the substring.
Generalgod bless youmemberbookerman12 Jan '09 - 5:10 
GeneralLicensememberMember 384073731 Aug '08 - 4:18 
GeneralBug: empty lines in mime header and mime body without childrenmemberdB.26 Jun '08 - 6:17 
GeneralBug: inifinite loop in processingmemberdB.26 Jun '08 - 4:15 
GeneralMIME digital signaturememberkerberos_prozac5 Jul '06 - 6:53 
GeneralRe: MIME digital signaturememberkerberos_prozac5 Jul '06 - 7:11 
QuestionHow can we use this to send emails?memberBohemianDre26 Jun '06 - 16:51 
Generaldecode from binarymemberjsli@ukr.net5 Jan '06 - 21:48 
GeneralA Couple Bugsmembermsailing27 Oct '05 - 7:52 
QuestionCan someone confirm that this works outside of encoding and decoding using the same classes?sussAnonymous22 Sep '05 - 14:59 
AnswerRe: Can someone confirm that this works outside of encoding and decoding using the same classes?sussAnonymous23 Sep '05 - 10:12 
AnswerWHOOPS! Looks like I was wrong.sussAnonymous23 Sep '05 - 10:23 
GeneralMEDIA VEDIO --&gt; MEDIA VIDEOmemberfeuerfrei22 Aug '05 - 0:05 
GeneralRe: MEDIA VEDIO --&gt; MEDIA VIDEOmemberlionwind22 Aug '05 - 1:58 
GeneralC# conversionmemberszgt21 Aug '05 - 22:28 
GeneralRe: C# conversionmemberlionwind22 Aug '05 - 1:53 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130516.1 | Last Updated 22 Aug 2005
Article Copyright 2005 by lionwind
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid