0

这是我的代码

for(int i = 0; i < number ; i++)
{
  MailAddress to = new MailAddress(iMail.to);
  MailAddress from = new MailAddress(iMail.from, iMail.displayName);
  string body = iMail.body;
  string subject = iMail.sub;
  oMail = new MailMessage(from, to);
  oMail.Subject = subject;
  oMail.Body = body;
  oMail.IsBodyHtml = true;
  oMail.Priority = MailPriority.Normal;
  oMail.Sender = from;
  s = new SmtpClient(smtpServer);
  s.ServicePoint.ConnectionLeaseTimeout = 0;
  if (s != null)
  {
     s.Send(oMail);
  }
  oMail.Dispose();
  s = null;
}

我正在使用此代码发送超过 60,000 封电子邮件,现在我的问题是一些收件人会立即收到电子邮件,但其中一些会在几分钟后收到,有些甚至会在几个小时后收到,而且可能很多人在到达目的地之前就迷路了。我的这个问题仍然没有答案。我真的需要帮助。我被困住了。谢谢

4

3 回答 3

3

请尝试以下操作:您的 MailMessage 需要位于一个using块中。此外,您不需要SmtpClient为每条消息添加一个新消息。您当然不需要将其设置为 null!这不是 VB6。

SmtpClient smtpClient = new SmtpClient(smtpServer);
smtpClient.ServicePoint.ConnectionLeaseTimeout = 0;
for (int i = 0; i < number; i++)
{
    MailAddress to = new MailAddress(iMail.to);
    MailAddress from = new MailAddress(iMail.from, iMail.displayName);
    string body = iMail.body;
    string subject = iMail.sub;
    using (MailMessage mailMessage = new MailMessage(from, to))
    {
        mailMessage.Subject = subject;
        mailMessage.Body = body;
        mailMessage.IsBodyHtml = true;
        mailMessage.Priority = MailPriority.Normal;
        mailMessage.Sender = from;
        smtpClient.Send(mailMessage);
    }
}

建议:不要将变量命名为oMail. 我们知道它是一个对象。大多数事情都是。对象不再有什么特别之处。

于 2010-02-09T03:14:36.337 回答
0

问题不大可能与您的代码有关,而与您的 SMTP 服务器有关。

这可能是许多问题,例如无法在您的 DNS 服务器中找到 MX 记录(特别是如果您的 DNS 服务器很弱,并且无法快速处理查找)。

我会检查您的邮件服务器日志,以了解正在发生的事情。

于 2010-02-09T13:49:52.440 回答
0

其实这是有道理的。您不认为在很短的时间内发送 6 万封电子邮件很可能会被视为垃圾邮件发送者吗?像 StrongMail 那样延迟电子邮件是防止您被 ISP 禁止的好方法。

于 2010-02-09T02:58:54.673 回答