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

A C# Implementation of Mime De/encode

, 21 Aug 2005
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)

About the Author

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

Comments and Discussions

 
GeneralHpw to download attatchment that are inside MIME file Pinmemberrishi2123-Feb-11 17:48 
GeneralError decoding image attachments please help PinmemberWajeeh7-Dec-09 20:40 
GeneralUnsafe code PinmemberGWBas1c6-Aug-09 9:38 
GeneralGreat! Thanks. Pinmemberbhiller24-Jul-09 3:29 
Generalgod bless you Pinmemberbookerman12-Jan-09 5:10 
GeneralLicense PinmemberMember 384073731-Aug-08 4:18 
GeneralBug: empty lines in mime header and mime body without children PinmemberdB.26-Jun-08 6:17 
GeneralBug: inifinite loop in processing PinmemberdB.26-Jun-08 4:15 
MimeBody.cs, line 75 has an inifinite loop if int nBstart2 = strData.IndexOf(strBstart, nBstart); is -1. This ends up gobbling memory. I have a large queue of spam mail with malformed boundaries that runs into this. A quick fix is:
 
while(nBstart < nBend)
{
nBstart = nBstart + strBstart.Length + 2;
int nBstart2 = strData.IndexOf(strBstart, nBstart);
if (nBstart2 == -1) nBstart2 = nBend;
MimeBody ChildBody = CreatePart();
ChildBody.LoadBody(strData.Substring(nBstart, nBstart2 - nBstart));
nBstart = nBstart2;
}
 

GeneralMIME digital signature Pinmemberkerberos_prozac5-Jul-06 6:53 
GeneralRe: MIME digital signature Pinmemberkerberos_prozac5-Jul-06 7:11 
QuestionHow can we use this to send emails? PinmemberBohemianDre26-Jun-06 16:51 
Generaldecode from binary Pinmemberjsli@ukr.net5-Jan-06 21:48 
GeneralA Couple Bugs Pinmembermsailing27-Oct-05 7:52 
QuestionCan someone confirm that this works outside of encoding and decoding using the same classes? PinsussAnonymous22-Sep-05 14:59 
AnswerRe: Can someone confirm that this works outside of encoding and decoding using the same classes? PinsussAnonymous23-Sep-05 10:12 
AnswerWHOOPS! Looks like I was wrong. PinsussAnonymous23-Sep-05 10:23 
GeneralMEDIA VEDIO --&gt; MEDIA VIDEO Pinmemberfeuerfrei22-Aug-05 0:05 
GeneralRe: MEDIA VEDIO --&gt; MEDIA VIDEO Pinmemberlionwind22-Aug-05 1:58 
GeneralC# conversion Pinmemberszgt21-Aug-05 22:28 
GeneralRe: C# conversion Pinmemberlionwind22-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 | Mobile
Web03 | 2.8.140709.1 | Last Updated 22 Aug 2005
Article Copyright 2005 by tauyoung
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid