0

长期读者,第一次提问。

向 110 个密件抄送收件人发送电子邮件时出现超时。

我正在尝试从一个网站向我运营其网站的俱乐部成员发送一封电子邮件。我将自己添加为发件人和收件人,成员的电子邮件地址进入密件抄送列表。大约有110名成员。我使用发件人的用户名和密码对服务器进行身份验证。

我可以很好地准备 MailMessage,但是当我调用 SmtpClient.Send() 时它会超时,即使阈值为 10 分钟也是如此。当收件人较少时,Send() 方法仍然需要很长时间(5-7 分钟),但会成功完成。无论邮件或附件的大小如何,即使没有附件,也会发生这种情况。

我认为我的邮件服务器(在我的托管 Web 服务器上)以某种方式检查每个收件人电子邮件地址与外部系统(如垃圾邮件/黑名单)或每个收件人邮件服务器。

我的托管公司被难住了,他们发誓一切都好。

你知道我可以设置 StmpClient 或 MailMessage 上的一个成员来告诉邮件服务器不要这样做吗?或者(甚至更好)在 Parallels HSPhare 电子邮件服务器中设置以停止此操作?

提前谢谢了。

示例代码

bool SendEmail(string[] emailAddresses)
{
    MailMessage message = new MailMessage();
    SmtpClient smtp = new SmtpClient("mail.myServer.org");
    message.From = new MailAddress("website@myServer.org", "Display name");
    message.To.Add("website@myServer.org");

    foreach (string recipient in emailAddresses)
    {
        // ABout 110 recipients
        message.Bcc.Add(recipient);
    }

    message.Subject = "Whatever";
    message.ReplyTo = new MailAddress("myOtherEmailAddress@external.com");
    smtp.Credentials = new NetworkCredential(message.From.Address, "whatever");

    try
    {
        message.Body = "A few hundred bytes";
        smtp.Timeout = 300000; // 10 mins
        smtp.Send(message);
    }
    catch (Exception ex)
    {
        // Report here
    }

    return true;
}
4

1 回答 1

0

这个问题的解决方案是 DNS 检查。我的出站电子邮件服务器获取收件人列表中的每个地址,并尝试在 DNS 中查找其域的 MX 记录。
对于 110 个地址,有几个得分不同的域,并且这种查找需要很长时间。它做到了 While-U-Wait,或者我的浏览器放弃了在网络服务器上的等待,或者网络服务器放弃了在邮件服务器上的等待(现在不记得是哪个了)。

我的提供商已经禁用了这个选项。

在等待他们承认问题的同时,我通过以下方式解决了它。我没有发送一封包含 110 个收件人的电子邮件,而是将我想要发送的内容的详细信息存储在两个表中 - 一行用于正文,另外 110 行用于收件人。然后另一个 ASP 页面轮询该表,一次选择 10 封排队的电子邮件,发送它们,并打印 HTML 以在几秒钟后自行刷新。在一个页面中创建了我的行后,我单击了发送页面并在批处理时等待了几分钟。总时间是相同的,可能更多,但较小的批次意味着没有超时。

希望对下一个人有所帮助。

于 2015-06-26T12:49:24.470 回答