Click here to Skip to main content
15,504,286 members
Articles / Programming Languages / C#
Article
Posted 21 Aug 2005

Stats

144K views
4.2K downloads
38 bookmarked

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

 
QuestionBug report - exception for multiline params Pin
iblesq14-Oct-16 4:35
iblesq14-Oct-16 4:35 
AnswerRe: Bug report - exception for multiline params Pin
iblesq14-Oct-16 21:30
iblesq14-Oct-16 21:30 
QuestionBug report - last field doesn't get loaded in LoadHead Pin
jtrotman1-Jun-15 14:30
jtrotman1-Jun-15 14:30 
GeneralHpw to download attatchment that are inside MIME file Pin
rishi2123-Feb-11 18:48
rishi2123-Feb-11 18:48 
GeneralError decoding image attachments please help Pin
Wajeeh7-Dec-09 21:40
Wajeeh7-Dec-09 21:40 
GeneralUnsafe code Pin
GWBas1c6-Aug-09 10:38
GWBas1c6-Aug-09 10:38 
GeneralGreat! Thanks. Pin
Bernhard Hiller24-Jul-09 4:29
Bernhard Hiller24-Jul-09 4:29 
Generalgod bless you Pin
bookerman12-Jan-09 6:10
bookerman12-Jan-09 6:10 
GeneralLicense Pin
Member 384073731-Aug-08 5:18
Member 384073731-Aug-08 5:18 
GeneralBug: empty lines in mime header and mime body without children Pin
dB.26-Jun-08 7:17
dB.26-Jun-08 7:17 
GeneralBug: inifinite loop in processing Pin
dB.26-Jun-08 5:15
dB.26-Jun-08 5:15 
GeneralMIME digital signature Pin
kerberos_prozac5-Jul-06 7:53
kerberos_prozac5-Jul-06 7:53 
GeneralRe: MIME digital signature Pin
kerberos_prozac5-Jul-06 8:11
kerberos_prozac5-Jul-06 8:11 
QuestionHow can we use this to send emails? Pin
BohemianDre26-Jun-06 17:51
BohemianDre26-Jun-06 17:51 
Generaldecode from binary Pin
PJ_VIN5-Jan-06 22:48
PJ_VIN5-Jan-06 22:48 
GeneralA Couple Bugs Pin
msailing27-Oct-05 8:52
msailing27-Oct-05 8:52 
QuestionCan someone confirm that this works outside of encoding and decoding using the same classes? Pin
Anonymous22-Sep-05 15:59
Anonymous22-Sep-05 15:59 
AnswerRe: Can someone confirm that this works outside of encoding and decoding using the same classes? Pin
Anonymous23-Sep-05 11:12
Anonymous23-Sep-05 11:12 
AnswerWHOOPS! Looks like I was wrong. Pin
Anonymous23-Sep-05 11:23
Anonymous23-Sep-05 11:23 
GeneralMEDIA VEDIO --&gt; MEDIA VIDEO Pin
feuerfrei22-Aug-05 1:05
feuerfrei22-Aug-05 1:05 
GeneralRe: MEDIA VEDIO --&gt; MEDIA VIDEO Pin
tauyoung22-Aug-05 2:58
tauyoung22-Aug-05 2:58 
GeneralC# conversion Pin
szgt21-Aug-05 23:28
szgt21-Aug-05 23:28 
GeneralRe: C# conversion PinPopular
tauyoung22-Aug-05 2:53
tauyoung22-Aug-05 2:53 

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.