Click here to Skip to main content
Licence CPOL
First Posted 21 Aug 2005
Views 64,279
Downloads 1,424
Bookmarked 33 times

A C# Implementation of Mime De/encode

By | 21 Aug 2005 | Article
A C# implementation of Mime de/encode

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

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralHpw to download attatchment that are inside MIME file Pinmemberrishi2117:48 23 Feb '11  
GeneralError decoding image attachments please help PinmemberWajeeh20:40 7 Dec '09  
GeneralUnsafe code PinmemberGWBas1c9:38 6 Aug '09  
GeneralGreat! Thanks. Pinmemberbhiller3:29 24 Jul '09  
Generalgod bless you Pinmemberbookerman5:10 12 Jan '09  
GeneralLicense PinmemberMember 38407374:18 31 Aug '08  
GeneralBug: empty lines in mime header and mime body without children PinmemberdB.6:17 26 Jun '08  
GeneralBug: inifinite loop in processing PinmemberdB.4:15 26 Jun '08  
GeneralMIME digital signature Pinmemberkerberos_prozac6:53 5 Jul '06  
GeneralRe: MIME digital signature Pinmemberkerberos_prozac7:11 5 Jul '06  
QuestionHow can we use this to send emails? PinmemberBohemianDre16:51 26 Jun '06  
Generaldecode from binary Pinmemberjsli@ukr.net21:48 5 Jan '06  
GeneralA Couple Bugs Pinmembermsailing7:52 27 Oct '05  
QuestionCan someone confirm that this works outside of encoding and decoding using the same classes? PinsussAnonymous14:59 22 Sep '05  
AnswerRe: Can someone confirm that this works outside of encoding and decoding using the same classes? PinsussAnonymous10:12 23 Sep '05  
AnswerWHOOPS! Looks like I was wrong. PinsussAnonymous10:23 23 Sep '05  
GeneralMEDIA VEDIO --> MEDIA VIDEO Pinmemberfeuerfrei0:05 22 Aug '05  
GeneralRe: MEDIA VEDIO --> MEDIA VIDEO Pinmemberlionwind1:58 22 Aug '05  
yeah, right, my mistakeBlush | :O ...thanks, feuerfrei.
 
while(true){
Love(life);
}
GeneralC# conversion Pinmemberszgt22:28 21 Aug '05  
GeneralRe: C# conversion Pinmemberlionwind1:53 22 Aug '05  

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

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

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