我正在使用AE.net.mail从hotmail帐户下载附件。以下是代码。 Messages数组根据给定条件获取所有邮件。问题是除第一条记录外,每条记录的message.Value属性都是null。
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));
}
}
我无法理解为什么。请指导。感谢名单。
答案 0 :(得分:0)
我建议改用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);
}
}
}
}
}