Click here to Skip to main content
15,867,453 members
Articles / Programming Languages / C#
Article

A C# Implementation of Mime De/encode

Rate me:
Please Sign up or sign in to vote.
4.00/5 (16 votes)
21 Aug 2005CPOL 150.2K   4.2K   38   23
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

C#
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

C#
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)


Written By
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 Pin
rishi2123-Feb-11 17:48
rishi2123-Feb-11 17:48 

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

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