我正在使用AE.net.mail从hotmail帐户下载附件。以下是代码。
  Messages数组根据给定条件获取所有邮件。问题是每个记录的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/

10-12 12:45
查看更多