【问题标题】:IMAP Encoded EmailsIMAP 编码电子邮件
【发布时间】:2011-08-11 21:04:38
【问题描述】:

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

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

可读:

<Part ID="1">
- <Part ID="1.1">
  <DATA>Please respond if you receive this =20 Thanks =20 =20 *******=20 *************=20 =20 </DATA> 

不可读:

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

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

//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();

【问题讨论】:

    标签: c# email imap


    【解决方案1】:

    文本以 Base64 编码。您可以使用以下函数对其进行解码:

    public string DecodeBase64(string s)
    {
        byte[] buf = Convert.FromBase64String(s);
        return System.Text.Encoding.UTF8.GetString(buf);
    }
    

    另请注意,电子邮件包含非 Windows 格式的换行符,但您可以这样解决:

    resultStr = DecodeBase64(emailStr).Replace("\n", System.Environment.NewLine);
    

    【讨论】:

    • 是的,就是这样。但@jkruer01 请注意,电子邮件也可能包含许多其他 MIME 类型,因此此解决方案不适用于 所有 消息,仅适用于 Base64 编码的消息。
    • 确实!但如果不了解他用于 IMAP 访问的组件的更多信息,很难说他应该如何做出改变。
    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多