Click here to Skip to main content
11,578,739 members (63,987 online)
Click here to Skip to main content

A C# Implementation of Mime De/encode

, 21 Aug 2005 CPOL 87.3K 2.9K 36
Rate this:
Please Sign up or sign in to vote.
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.Smile | :) 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)

Share

About the Author

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

You may also be interested in...

Comments and Discussions

 
QuestionBug report - last field doesn't get loaded in LoadHead Pin
jtrotman1-Jun-15 13:30
memberjtrotman1-Jun-15 13:30 
GeneralHpw to download attatchment that are inside MIME file Pin
rishi2123-Feb-11 17:48
memberrishi2123-Feb-11 17:48 
GeneralError decoding image attachments please help Pin
Wajeeh7-Dec-09 20:40
memberWajeeh7-Dec-09 20:40 
GeneralUnsafe code Pin
GWBas1c6-Aug-09 9:38
memberGWBas1c6-Aug-09 9:38 
Does this need unsafe code? MIME handling isn't special enough to warrant the elevated privileges needed to work with pointers.
GeneralGreat! Thanks. Pin
bhiller24-Jul-09 3:29
memberbhiller24-Jul-09 3:29 
Generalgod bless you Pin
bookerman12-Jan-09 5:10
memberbookerman12-Jan-09 5:10 
GeneralLicense Pin
Member 384073731-Aug-08 4:18
memberMember 384073731-Aug-08 4:18 
GeneralBug: empty lines in mime header and mime body without children Pin
dB.26-Jun-08 6:17
memberdB.26-Jun-08 6:17 
GeneralBug: inifinite loop in processing Pin
dB.26-Jun-08 4:15
memberdB.26-Jun-08 4:15 
GeneralMIME digital signature Pin
kerberos_prozac5-Jul-06 6:53
memberkerberos_prozac5-Jul-06 6:53 
GeneralRe: MIME digital signature Pin
kerberos_prozac5-Jul-06 7:11
memberkerberos_prozac5-Jul-06 7:11 
QuestionHow can we use this to send emails? Pin
BohemianDre26-Jun-06 16:51
memberBohemianDre26-Jun-06 16:51 
Generaldecode from binary Pin
jsli@ukr.net5-Jan-06 21:48
memberjsli@ukr.net5-Jan-06 21:48 
GeneralA Couple Bugs Pin
msailing27-Oct-05 7:52
membermsailing27-Oct-05 7:52 
QuestionCan someone confirm that this works outside of encoding and decoding using the same classes? Pin
Anonymous22-Sep-05 14:59
sussAnonymous22-Sep-05 14:59 
AnswerRe: Can someone confirm that this works outside of encoding and decoding using the same classes? Pin
Anonymous23-Sep-05 10:12
sussAnonymous23-Sep-05 10:12 
AnswerWHOOPS! Looks like I was wrong. Pin
Anonymous23-Sep-05 10:23
sussAnonymous23-Sep-05 10:23 
GeneralMEDIA VEDIO --&gt; MEDIA VIDEO Pin
feuerfrei22-Aug-05 0:05
memberfeuerfrei22-Aug-05 0:05 
GeneralRe: MEDIA VEDIO --&gt; MEDIA VIDEO Pin
lionwind22-Aug-05 1:58
memberlionwind22-Aug-05 1:58 
GeneralC# conversion Pin
szgt21-Aug-05 22:28
memberszgt21-Aug-05 22:28 
GeneralRe: C# conversion Pin
lionwind22-Aug-05 1:53
memberlionwind22-Aug-05 1:53 

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.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150603.1 | Last Updated 22 Aug 2005
Article Copyright 2005 by tauyoung
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid