我正在使用 AE.net.mail 从 hotmail 帐户下载附件。以下是代码。 消息数组根据给定条件获取所有邮件。问题是除了第一条记录之外,每条记录的 message.Value 属性都是空的。
ImapClient ic = new ImapClient("imap-mail.outlook.com", "xxx@hotmail.com", "xxx", ImapClient.AuthMethods.Login, 993, true))
{
ic.SelectMailbox("INBOX");
Lazy<MailMessage>[] messages = ic.SearchMessages(SearchCondition.From("xxx@yahoo.com"));
foreach (Lazy<MailMessage> message in messages)
{
MailMessage m = message.Value;
}
foreach (Attachment attachment in m.Attachments)
{
fileExtension = Path.GetExtension(attachment.Filename);
attachment.Save(@"H:\Demo\" + fileName + Path.GetExtension(attachment.Filename));
}
}
我不明白为什么。请指导。谢谢。
最佳答案
我建议使用 MailKit反而。这是实际上遵循规范的更好的 IMAP 客户端实现。
MailKit 建立在 MimeKit 之上这是适用于 .NET 的最佳/最快/最强大的 MIME 解析器库。它比 OpenPOP.NET 的解析器快 25 倍,比 SharpMimeTools 快 75 倍,比 Mail.dll 快 70 倍,比 MIMER 快 65 倍,并且比所有开源 ImapClient 实现中包含的所有 MIME 解析器快得多(并且可能也比商业 MIME 解析器更好/更快)。
MimeKit 和 MailKit 都基于标记化流解析器,这不仅意味着它们比其他库更快,还意味着它们可以更好地符合规范,最重要的是,这意味着它们不需要阅读整个在解析消息之前将来自 IMAP 服务器的响应放入一个巨大的字符串缓冲区 - MailKit 直接从套接字解析消息,这大大减少了大消息的内存使用量。
using System;
using System.Net;
using System.Threading;
using MailKit.Net.Imap;
using MailKit.Search;
using MailKit;
using MimeKit;
namespace TestClient {
class Program
{
public static void Main (string[] args)
{
using (var client = new ImapClient ()) {
var credentials = new NetworkCredential ("xxx@hotmail.com", "xxx");
var uri = new Uri ("imaps://imap-mail.outlook.com");
using (var cancel = new CancellationTokenSource ()) {
client.Connect (uri, cancel.Token);
client.Authenticate (credentials, cancel.Token);
// Open the Inbox folder
client.Inbox.Open (FolderAccess.ReadOnly, cancel.Token);
var query = SearchQuery.FromContains ("xxx@yahoo.com");
foreach (var uid in client.Inbox.Search (query, cancel.Token)) {
var message = client.Inbox.GetMessage (uid, cancel.Token);
}
client.Disconnect (true, cancel.Token);
}
}
}
}
}
关于c# - AE.Net.Mail message.value 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21242600/