【问题标题】:MailKit SMTP slow when sending messagesMailKit SMTP 发送邮件时速度慢
【发布时间】:2015-06-12 09:51:59
【问题描述】:

我一直在使用 MailKit 通过 IMAP 检索一些电子邮件并使用 SMTP (more info here) 转发它们,但是 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 代码行中执行某些操作。

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

【问题讨论】:

    标签: c# smtp mailkit


    【解决方案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() 调用中等待来自服务器的响应。

    【讨论】:

    • 我已经对此进行了深入研究,并使用了 WireShark(网络嗅探器)来捕获数据包,你是对的。服务器发送 SMTP 响应的时间超过 30 秒,即使它已完成该操作。我将尝试采用另一种方法(可能是 SendAsync)来尝试加速该部分。谢谢!
    • @XaviIvars 我遇到了同样的问题,虽然使用异步.....有什么建议吗?
    • 您可以尝试使用wire Shark来查看问题是否与其他人发现的服务器一样。
    • 即使在使用异步时我也面临同样的问题。你找到为什么会发生这种情况
    • 众所周知,如果您发送大量邮件,SMTP 服务器会限制客户端,并且“很多”是服务器定义的,因此在任意时间内它可能只有几条消息.
    猜你喜欢
    • 2017-06-08
    • 2013-12-02
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    相关资源
    最近更新 更多