Click here to Skip to main content
15,891,473 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 151.1K   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

 
GeneralUnsafe code Pin
GWBas1c6-Aug-09 9:38
GWBas1c6-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.

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.