我使用S22.IMAP库如下:
using (ImapClient client = new ImapClient(imap, 993,
usuario, psw, AuthMethod.Login, true))
{
foreach (var uid in client.Search(SearchCondition.Unseen()))
{
var message = client.GetMessage(uid);
foreach (Attachment atc in message.Attachments)
{
if (System.IO.Path.GetExtension(atc.Name) == ".xml")
{
String archivoXML_texto = "";
byte[] allBytes = new byte[atc.ContentStream.Length];
int bytesRead = atc.ContentStream.Read(allBytes, 0, (int)atc.ContentStream.Length);
using (MemoryStream memory = new MemoryStream(allBytes))
{
StreamReader archivoXML = new StreamReader(memory);
archivoXML_texto = archivoXML.ReadToEnd();
archivoXML.Close();
memory.Dispose();
}
.......
.......
}
}
}
}
}
我有一个问题:当我尝试阅读某些邮件的附件时, 我在调试没有阅读附件的代码时意识到。 关于这个事件的奇怪之处在于,它发生在一些电子邮件,以及gmail和私人电子邮件中(我没有说所有这些域都没有读取附件),其他人读得很好。
问题:
我想知道阻止我阅读这些电子邮件的原因是什么。是否存在一些隐私设置,例如在gmail中阻止代码中的附件?
如果这是真的,你会如何启用它?或者我应该改变代码的实现方式吗?
什么是最好或最好的例子?
答案 0 :(得分:0)
using (var client = new ImapClient ()) {
client.Connect ("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);
client.Authenticate ("mailo@gmail.com", "password");
client.Inbox.Open(FolderAccess.ReadWrite);
var uids = client.Inbox.Search(SearchQuery.NotSeen);
foreach (var uid in uids)
{
var message = client.Inbox.GetMessage(uid);
client.Inbox.AddFlags(uid, MessageFlags.Seen, true);
foreach (var attachment in message.Attachments.OfType<MimePart>())
{
if (System.IO.Path.GetExtension(attachment.FileName) == ".xml")
{
byte[] allBytes = new byte[attachment.Content.Stream.Length];
int bytesRead = attachment.Content.Stream.Read(allBytes, 0, (int)attachment.Content.Stream.Length);
string texto_definitivo = "";
String archivoXML_textoBase64 = "";
using (MemoryStream memory = new MemoryStream(allBytes))
{
StreamReader archivoXML = new StreamReader(memory);
archivoXML_textoBase64 = archivoXML.ReadToEnd();
byte[] temp_backToBytes = Convert.FromBase64String(archivoXML_textoBase64);
texto_definitivo = Encoding.ASCII.GetString(temp_backToBytes);
archivoXML.Close();
memory.Dispose();
}
}
}
}
client.Disconnect (true);
}
将base64这样的文本转换为字符串会更好。如果附件的文本内容是直接获得的,而不是转换为byte [],byte []来链接附件的内容(因为某些奇怪的原因是base64中的字符串),来自字符串base64,这将是理想的到byte [],从byte []到string。
如果某人有更好的解决方案,那就太棒了。