【发布时间】:2016-06-25 14:22:07
【问题描述】:
我正在尝试创建一个小的网络应用程序来充当 Gmail 的网络邮件客户端...
我使用以下代码从我的收件箱中获取电子邮件:
public ActionResult Index()
{
using (var client = new ImapClient())
{
using (var cancel = new CancellationTokenSource())
{
ServicePointManager.ServerCertificateValidationCallback += (o, c, ch, er) => true;
client.Connect("imap.gmail.com", 993, true, cancel.Token);
// If you want to disable an authentication mechanism,
// you can do so by removing the mechanism like this:
client.AuthenticationMechanisms.Remove("XOAUTH");
client.Authenticate("********@gmail.com", "****", cancel.Token);
// The Inbox folder is always available...
var inbox = client.Inbox;
inbox.Open(FolderAccess.ReadOnly, cancel.Token);
m = new List<string>();
// download each message based on the message index
for (int i = 0; i < inbox.length; i++)
{
var message = inbox.GetMessage(i, cancel.Token);
m.Insert(i, message.TextBody);
}
client.Disconnect(true, cancel.Token);
}
}
return View(m.ToList());
}
我不喜欢这种做法的原因是这部分代码:
for (int i = 0; i < inbox.length; i++)
{
var message = inbox.GetMessage(i, cancel.Token);
m.Insert(i, message.TextBody);
}
提取所有邮件需要很长时间,大约每 5 秒提取 40 封邮件……所以如果有人有 2000 封邮件,加载所有邮件需要 20 分钟……
有没有更快的方法将所有电子邮件加载到我的 MVC 应用程序中? :/
附:我试过用有 10000 封电子邮件的电子邮件来做这件事,而且它需要很长时间才能获取所有电子邮件....
【问题讨论】:
-
这是什么 IMAP 库?它是否提供了一次获取多条消息的命令?
-
回应 Max 的问题,您使用的是什么 IMAP 库?您是否考虑过仅检索电子邮件标头?这会快得多,因为您没有检索身体和附件。如果用户想要打开特定的电子邮件,您可以这样做
-
这看起来像我的 IMAP 库 MailKit。
标签: asp.net-mvc email gmail imap