使用大型BCC列表的SmtpClient.Send(MailMessage)超时 - C#

时间:2012-05-03 09:27:36

标签: c# email timeout smtp bcc

长期读者,第一次问问。

我向110个BCC收件人发送电子邮件时超时。

我试图从网站向我的俱乐部成员发送一封电子邮件。 我将自己添加为发送者和接收者,以及成员'电子邮件地址进入BCC列表。大约有110名成员。我使用发件人的用户名和密码对服务器进行身份验证。

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

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

我的托管公司很难过,他们发誓说一切都好。

您是否知道StmpClient或MailMessage上的某个成员我可以设置告诉邮件服务器不要这样做?或者(甚至更好)设置Parallels HSPhere电子邮件服务器以停止此操作?

非常感谢提前。

示例代码

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;
}

1 个答案:

答案 0 :(得分:0)

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

我的提供商已禁用此选项。

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

希望能帮助下一个人。