首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IMAP编码的电子邮件

IMAP编码的电子邮件
EN

Stack Overflow用户
提问于 2011-08-11 20:47:13
回答 1查看 1.3K关注 0票数 0

我正在使用Rohit Joshi's IMAP library访问IMAP电子邮件帐户。

到目前为止,我有一个程序可以连接到邮件服务器,检索所有未读的消息,并将它们保存在一个XML文件中。我的问题是,一些消息返回时是可读的,而一些消息是编码的,无法读取。

可读性:

代码语言:javascript
运行
复制
<Part ID="1">
- <Part ID="1.1">
  <DATA>Please respond if you receive this =20 Thanks =20 =20 *******=20 *************=20 =20 </DATA> 

无法读取:

代码语言:javascript
运行
复制
<Part ID="1">
  <DATA>SGVsbG8gRGVhbGVyIENhciBTZWFyY2gsCgogV2UgaGF2ZSBiZWVuIHJlcXVlc3RlZCBieSBMT1cg Q09VTlRSWSBNT1RPUlMgdG8gcmVjZWl2ZSB0aGVpciB2ZWhpY2xlCmludmVudG9yeSBkYXRhIGZy b20geW91IGZvciBFdmVyeUNhckxpc3RlZC5jb20uCiBEYXRhIHNob3VsZCBiZSBzZW50IHRvIHlv dXIgRE1pIERhdGEgJiBNZWRpYSBTdG9yZSAoYWthIC0gRGVhbGVyIFBvcnRhbCkKZnRwIGFjY291 bnQuCgogKioqKiogKioqKioKCiAqKiogKioqCgogSWYgcG9zc2libGUsIHBsZWFzZSBzZW5kIGFs bCBhdmFpbGFibGUgdmVoaWNsZSBpbnZlbnRvcnkgZGF0YSBhdCB0aGlzCnRpbWUuIFRoaXMgd2ls bCBhbGxvdyB1cyB0byBlbnN1cmUgYW55IGZ1dHVyZSBhZGp1c3RtZW50cyB0byB0aGUgZGF0YSB3 ZQpleHBvcnQgYXJlIGVhc2lseSBhY2NvbXBsaXNoZWQgd2l0aG91dCBoYXZpbmcgdG8gcmVxdWVz dCBhIGNoYW5nZSB0byB5b3VyCmV4cG9ydC4gUGxlYXNlIGRvIG5vdCBzZW5kIGltYWdlcyB1bmxl c3MgaW1hZ2VzIGFyZSByZXF1ZXN0ZWQgYmVsb3cuCgogRGVhbGVyIFBvcnRhbCBJRDogRFAzNzgy NQogTE9XIENPVU5UUlkgTU9UT1JTCiAxIEJsdWZmdG9uIFJkLgogQmx1ZmZ0b24sIFNDIDI5OTEw CgoKIENvbnRhY3QgSW5mb3JtYXRpb24gb24gUmVjb3JkCiBDb250YWN0IE5hbWU6IE1pa2UgQ29k eQogQ29udGFjdCBQaG9uZTogODQzLTgxNS01MTAwCiBDb250YWN0IEUtTWFpbDogbG93Y291bnRy eW1vdG9yc0B5YWhvby5jb20KCiBSZXF1ZXN0aW5nIFByb2plY3Q6IEV2ZXJ5Q2FyTGlzdGVkLmNv bQogSW1hZ2VzIFJlcXVlc3RlZDogKipZZXMqKgogRXhwb3J0IFdlYnNpdGU6IGV2ZXJ5Y2FybGlz dGVkLmNvbQoKIFdoaWxlIHRoZSBkYXRhIGlzIGluaXRpYWxseSByZXF1ZXN0ZWQgZm9yIEV2ZXJ5 Q2FyTGlzdGVkLmNvbSwgdGhlIGRhdGEKbWF5IHBvdGVudGlhbGx5IGJlIHNlbnQgdG8gYW55IHBy b2plY3Qgc2VydmljZWQgYnkgb3VyIERhdGEgJgpNZWRpYSBTdG9yZQplbnZpcm9ubWVudCBpbiB0 aGUgZnV0dXJlLgoKIElmIHBvc3NpYmxlIHBsZWFzZSBsZXQgdXMga25vdyB3aGVuIHdlIHNob3Vs ZCBleHBlY3QgZGF0YSBmb3IgdGhpcwpkZWFsZXJzaGlwLgogVGhhbmsgeW91LAoKIERpZ2l0YWwg TW90b3J3b3JrcywgSW5jLgogRGF0YSAmIE1lZGlhIFN0b3JlL0RlYWxlciBQb3J0YWwgL1RoaXJk IFBhcnR5IFN1cHBvcnQKW0xJTks6IG1haWx0bzp0aGlyZHBhcnR5c3VwcG9ydEBkaWdpdGFsbW90 b3J3b3Jrcy5jb21dCnRoaXJkcGFydHlzdXBwb3J0QGRpZ2l0YWxtb3RvcndvcmtzLmNvbQogKDUx MikgNDkzLTg4MzMKClRoaXMgbWVzc2FnZSBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZSBpbnRlbmRl ZCBvbmx5IGZvciB0aGUgdXNlIG9mIHRoZSBhZGRyZXNzZWUgYW5kIG1heSBjb250YWluIGluZm9y bWF0aW9uIHRoYXQgaXMgcHJpdmlsZWdlZCBhbmQgY29uZmlkZW50aWFsLiBJZiB0aGUgcmVhZGVy IG9mIHRoZSBtZXNzYWdlIGlzIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50IG9yIGFuIGF1dGhv cml6ZWQgcmVwcmVzZW50YXRpdmUgb2YgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91IGFyZSBo ZXJlYnkgbm90aWZpZWQgdGhhdCBhbnkgZGlzc2VtaW5hdGlvbiBvZiB0aGlzIGNvbW11bmljYXRp b24gaXMgc3RyaWN0bHkgcHJvaGliaXRlZC4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgdGhpcyBjb21t dW5pY2F0aW9uIGluIGVycm9yLCBwbGVhc2Ugbm90aWZ5IHVzIGltbWVkaWF0ZWx5IGJ5IGUtbWFp bCBhbmQgZGVsZXRlIHRoZSBtZXNzYWdlIGFuZCBhbnkgYXR0YWNobWVudHMgZnJvbSB5b3VyIHN5 c3RlbS4K </DATA> 

这是我的代码。任何关于我需要做什么,使电子邮件可读性的帮助将不胜感激。

代码语言:javascript
运行
复制
//Connect to the Mail Server
Imap oImap = new Imap();
oImap.Login(ConfigurationSettings.AppSettings["emailServer"], ConfigurationSettings.AppSettings["emailUser"], ConfigurationSettings.AppSettings["emailPass"]);

//Select the INBOX Folder
oImap.SelectFolder("INBOX");

//Get all Unread messages
ArrayList msgList = new ArrayList();
string[] searchData = new string[1];
searchData[0] = "unseen";

oImap.SearchMessage(searchData, false, msgList);

MemoryStream stm = new MemoryStream(); //using a memory stream buffer for XmlTextWrite to write
XmlTextWriter oXmlWriter = new XmlTextWriter(stm, System.Text.Encoding.UTF8);
oXmlWriter.Formatting = Formatting.Indented;
oXmlWriter.WriteStartDocument(true);
oXmlWriter.WriteStartElement("Emails");

for (int i = 1; i < msgList.Count; i++)
{                
    oXmlWriter.WriteStartElement("Message");
    oXmlWriter.WriteAttributeString("UID", msgList[i].ToString());

    try
    {
        oImap.FetchMessage(msgList[i].ToString(), oXmlWriter, true);           
    }
    catch (Exception e)
    {
    }

    oXmlWriter.WriteEndElement();                
}
oXmlWriter.WriteEndElement();
oXmlWriter.WriteEndDocument();
oXmlWriter.Flush();

stm.Seek(0, SeekOrigin.Begin); //have to move the offset to zero to read from the beginning of the memory stream

XmlTextReader xr = new XmlTextReader(stm);
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xr);
stm.Flush();
xr.Close();
stm.Close();
oXmlWriter.Close();
oXmlWriter = null;

xmldoc.Save("email.xml");
Console.WriteLine(xmldoc.ToString());

oImap.LogOut();
EN

回答 1

Stack Overflow用户

发布于 2011-08-11 20:58:34

文本以Base64格式编码。您可以使用以下函数来解码它:

代码语言:javascript
运行
复制
public string DecodeBase64(string s)
{
    byte[] buf = Convert.FromBase64String(s);
    return System.Text.Encoding.UTF8.GetString(buf);
}

还要注意的是,电子邮件包含的换行符不是Windows格式的,但您可以这样解决:

代码语言:javascript
运行
复制
resultStr = DecodeBase64(emailStr).Replace("\n", System.Environment.NewLine);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7026101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档