C# 实现的 MIME 解/编码
C# 实现的 MIME 解/编码
引言
几天前,当我需要一个 MIME 库来编码/解码 C# 中的一些 MIME 类型消息时,我没有找到任何合适的类。我找到的唯一的是 C++ 实现,作者是 nickadams。我阅读了他的代码,然后将其翻译成 C# 代码。它对我来说工作得很好。
如何使用
它的使用就像 nickadams 的代码一样简单:) 这是示例
编码消息
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);
解码消息
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());
}
}
最后...
非常感谢 nickadams。你的出色工作对我的帮助很大。
历史
- 2005 年 8 月 21 日:初始发布