C# 高效获取查询和解析结果

C# 高效获取查询和解析结果,c#,imap,mailsystem.net,C#,Imap,Mailsystem.net,我打算使用MailSystem.NET阅读所有邮件(我想草稿中的内容除外),并提取UUID、日期、发件人和所有收件人的电子邮件 我想让它获取,从最近开始,继续向后扫描,一次加载100个标题 如果在此操作期间收到新电子邮件,我不希望邮件索引更改影响进度 我想听听这方面的建议。在我看来,Fetch()包装器可以处理单个邮件,而收件箱搜索功能提供的是邮件索引序号,而不是UID。我相信UID对于并发活动会更加健壮 我可以调用imap.Command(“fetch1:100(uidrfc822.heade

我打算使用MailSystem.NET阅读所有邮件(我想草稿中的内容除外),并提取UUID、日期、发件人和所有收件人的电子邮件

我想让它获取,从最近开始,继续向后扫描,一次加载100个标题

如果在此操作期间收到新电子邮件,我不希望邮件索引更改影响进度

我想听听这方面的建议。在我看来,Fetch()包装器可以处理单个邮件,而收件箱搜索功能提供的是邮件索引序号,而不是UID。我相信UID对于并发活动会更加健壮

我可以调用imap.Command(“fetch1:100(uidrfc822.header)”),但是我不知道如何使用MailSystem.NET解析结果

还有,有没有一种方式可以说“获取下100条消息,其UID少于上次看到的UID”?如果可以安全地假设UID总是随着以后的消息而增加。我的意思是,这是基于消息索引序号的另一种选择


谢谢

我无法使用MailSystem.NET回答您的问题,但我可以使用更好的C#IMAP库回答此问题:

使用系统;
使用MailKit.Net.Imap;
使用邮箱;
使用MimeKit;
命名空间测试客户端{
班级计划
{
公共静态void Main(字符串[]args)
{
使用(var client=new ImapClient()){
client.Connect(“imap.friends.com”,993,true);
//注意:由于我们没有OAuth2令牌,请禁用
//XOAUTH2身份验证机制。
client.AuthenticationMechanisms.Remove(“XOAUTH”);
客户端。验证(“乔伊”,“密码”);
//收件箱文件夹在所有IMAP服务器上始终可用。。。
client.Inbox.Open(FolderAccess.ReadOnly);
//注意:信封包含日期和所有电子邮件地址
var items=MessageSummaryItems.UniqueId | MessageSummaryItems.信封;
int upper=client.Inbox.Count-1;
int lower=Math.Max(上限-100,0);

对不起,是的,我想打993
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);
            }
        }
    }
}