我想要使用MailSystem.NET来读取所有邮件(我想是草稿中的内容除外)并提取UUID,日期,发件人,所有收件人电子邮件。
我想让它从最近开始并继续向后扫描,一次加载可能100个标题的批次。
如果在此操作期间有新电子邮件进入,我不希望消息索引更改影响进度。
我想就此提出一些建议。在我看来,Fetch()包装器处理单个消息,并且收件箱搜索功能提供消息索引序数而不是UID。我相信UID对并发活动会更强大。
我可以调用imap.Command(“fetch 1:100(uid rfc822.header)”),但后来我不知道如何使用MailSystem.NET来解析结果。
另外,有没有办法说“获取UID小于上次看到的UID的下100条消息”?如果可以安全地假设UID总是随着后来的消息而增加。我的意思是这是一个基于消息索引序号的替代方法。
谢谢!
答案 0 :(得分:0)
我无法使用MailSystem.NET回答您的问题,但我可以使用更好的C#IMAP库来回答这个问题:MailKit。
using System;
using MailKit.Net.Imap;
using MailKit;
using MimeKit;
namespace TestClient {
class Program
{
public static void Main (string[] args)
{
using (var client = new ImapClient ()) {
client.Connect ("imap.friends.com", 993, true);
// Note: since we don't have an OAuth2 token, disable
// the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove ("XOAUTH");
client.Authenticate ("joey", "password");
// The Inbox folder is always available on all IMAP servers...
client.Inbox.Open (FolderAccess.ReadOnly);
// Note: The envelope contains the date and all of the email addresses
var items = MessageSummaryItems.UniqueId | MessageSummaryItems.Envelope;
int upper = client.Inbox.Count - 1;
int lower = Math.Max (upper - 100, 0);
while (lower <= upper) {
foreach (var message in client.Inbox.Fetch (lower, upper, items)) {
Console.WriteLine ("Sender: {0}", message.Envelope.Sender);
Console.WriteLine ("From: {0}", message.Envelope.From);
Console.WriteLine ("To: {0}", message.Envelope.To);
Console.WriteLine ("Cc: {0}", message.Envelope.Cc);
if (message.Envelope.Date.HasValue)
Console.WriteLine ("Date: {0}", message.Envelope.Date.Value);
}
upper = lower - 1;
lower = Math.Max (upper - 100, 0);
}
client.Disconnect (true);
}
}
}
}