c# - AE.Net.Mail message.value 为空

标签 c# asp.net .net lazy-loading imap

我正在使用 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/

相关文章:

c# - 将对数据网格所做的更改反射(reflect)回数据集和数据表

.NET MVC 2 RequireHttps - 如何将 www.mysite.com 重定向到 mysite.com

c# - 为什么重命名加载的 .net 程序集有效?

c# - 如何正确使用仓库模式?

javascript - 在回发中使用 __EVENTARGUMENT

javascript - 右键单击时禁用默认的 silverlight 上下文菜单

c# - 无法将类型 'System.Collections.Generic.List< >' 隐式转换为 'System.Collections.Generic.IList< >'

C#/Resharper 5 结构搜索,检测并警告是否具有某些属性的类上的任何非虚拟公共(public)方法

c# - 为什么不对 switch 语句强制执行显式 fall-through 而不是显式 break?

c# - asp.net mvc/Sql 双寄存器