在使用C#的MailKit库时,我使用了CountChanged配合Idle来完成新邮件的监听,但是这个方法时灵时不灵,可以肯定的是CountChanged事件使监听到了新邮件,因为每次发邮件时控制台都有一个线程中断的log,如图
, 但是根本不进入CountChanged 绑定的新方法里面,不知道为什么有时可以有时不行,环境.net freamwork4.7 MailKit 4.9.0,以下是我的代码
using (var client = new ImapClient())
{
client.Connect("imap.qq.com", 993, true);
client.Authenticate("111111@qq.com", "asfasewwf");
var inbox = client.Inbox;
inbox.Open(FolderAccess.ReadOnly);
inbox.CountChanged += async (sender, e) =>
{
Console.WriteLine("新邮件");
try
{
using (var client1 = new ImapClient())
{
client1.Connect(mailhost, 993, true);
client1.Authenticate("111111@qq.com","asfasewwf");
var inbox1 = client1.Inbox;
inbox1.Open(FolderAccess.ReadOnly);
MimeMessage message = inbox1.GetMessage(inbox1.Count - 1);
DateTimeOffset sentDate = message.Date;
string emaildate = sentDate.ToString("yyyy-MM-dd HH:mm:ss");
string address = message.From.Mailboxes.ToList()[0].Address;
}
}catch(Exception ee)
{
MessageBox.Show(ee.Message);
}
};
using (var cts = new CancellationTokenSource())
{
client.Idle(cts.Token);
cts.Cancel();
}
inbox.Close();
client.Disconnect(true);
}