1

我一直在使用 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方法几秒钟(甚至更少),我可以看到邮件出现在目标电子邮件帐户中(我在同时),但是某些东西使代码仍在Send代码行中执行某些操作。

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

4

1 回答 1

1

你可以在这里看到 SmtpClient.Send() 代码在做什么:SmtpClient.cs:1543

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

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

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

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

于 2015-04-08T12:54:38.357 回答