发送邮件时 MailKit SMTP 变慢

MailKit SMTP slow when sending messages

我一直在使用 MailKit 通过 IMAP 检索一些电子邮件并使用 SMTP () 转发它们,但是 SMTP 发送电子邮件需要很长时间。

我正在通过 NuGet 使用 mailkit

这是我正在使用的代码

<!-- language: c# -->

var before = DateTime.Now;
Console.Write("\tForwarding email... ");

smtpClient.Send(forwardMessage, fromMailboxAddress, new[] { toMailboxAddress });

Console.WriteLine(" done! ({0})", DateTime.Now - before);

而且耗时一般在30s以上。让我怀疑有问题的是电子邮件实际上几乎是立即转发的:比代码到达 smtpClient.Send 方法几秒钟(甚至更少),我可以看到消息出现在目标电子邮件帐户中(我同时打开了 Thunderbird),但有些东西使代码仍在 Send 代码行中执行某些操作。

有没有办法知道代码在做什么以及为什么要花这么长时间?

您可以在此处查看 SmtpClient.Send() 代码的作用:SmtpClient.cs:1543

如果您在调用 client.Send() 后几秒内看到消息显示在目的地,我想不出任何发送时间会超过 30 秒的原因。

我唯一的猜测是服务器需要很长时间才能发送对 DATA(或 BDAT)命令(实际发送原始消息数据的命令)的响应。

换句话说,我的猜测是它必须是这一行:SmtpClient.cs:1517 or this line: SmtpClient.cs:1488

这是 ReadResponse() 方法:SmtpClient.cs:320。等待很可能发生在 Poll() 调用中,或者,如果流不支持轮询 (SslStream),则它将卡在 stream.Read() 调用中等待服务器的响应。