IMAP编码的电子邮件 [英] IMAP Encoded Emails

查看:143
本文介绍了IMAP编码的电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Rohit Joshi的IMAP库访问IMAP电子邮件帐户。

I am using Rohit Joshi's IMAP library to access an IMAP email account.

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

So far, I have a program that connects to the mail server, retrieves all unread messages and saves them in an XML file. My problem is that some of the messages come back readable and some comeback encoded and impossible to read.

可读:

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

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

Here is my code. Any help as to what I need to do to get the email readable would be appreciated.

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


推荐答案

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

The text is encoded in Base64. You could use the following function to decode it:

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

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

Also note that the e-mail contains newlines which are not in a Windows format, but you could solve that like this:

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

这篇关于IMAP编码的电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆