C# 高效获取查询和解析结果
我打算使用MailSystem.NET阅读所有邮件(我想草稿中的内容除外),并提取UUID、日期、发件人和所有收件人的电子邮件 我想让它获取,从最近开始,继续向后扫描,一次加载100个标题 如果在此操作期间收到新电子邮件,我不希望邮件索引更改影响进度 我想听听这方面的建议。在我看来,Fetch()包装器可以处理单个邮件,而收件箱搜索功能提供的是邮件索引序号,而不是UID。我相信UID对于并发活动会更加健壮 我可以调用imap.Command(“fetch1:100(uidrfc822.header)”),但是我不知道如何使用MailSystem.NET解析结果 还有,有没有一种方式可以说“获取下100条消息,其UID少于上次看到的UID”?如果可以安全地假设UID总是随着以后的消息而增加。我的意思是,这是基于消息索引序号的另一种选择C# 高效获取查询和解析结果,c#,imap,mailsystem.net,C#,Imap,Mailsystem.net,我打算使用MailSystem.NET阅读所有邮件(我想草稿中的内容除外),并提取UUID、日期、发件人和所有收件人的电子邮件 我想让它获取,从最近开始,继续向后扫描,一次加载100个标题 如果在此操作期间收到新电子邮件,我不希望邮件索引更改影响进度 我想听听这方面的建议。在我看来,Fetch()包装器可以处理单个邮件,而收件箱搜索功能提供的是邮件索引序号,而不是UID。我相信UID对于并发活动会更加健壮 我可以调用imap.Command(“fetch1:100(uidrfc822.heade
谢谢 我无法使用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);
}
}
}
}