【发布时间】:2016-03-25 06:48:46
【问题描述】:
我为一个大约有 100 到 120 名成员的小型组织维护网站。
每个月,我们都会发送一封电子邮件,通知我们的成员我们将在即将举行的会议中讨论的主题。
我正在尝试使用我们的网站为我们提供一种发送这些电子邮件的方式,但我们的 ASP 托管网站有定义的限制为每小时 50 封电子邮件。
理论上,我想我可以在每次 SmtpClient.Send(MailMessage) 调用后使用 Thread.Sleep(60000) 让线程休眠 1 分钟,像这样:
public const int ONE_MINUTE = 60000;
public String SiteEmailAddress { get; set; }
public String SiteMailServer { get; set; }
public String SiteMailUserId { get; set; }
public String SiteMailPwd { get; set; }
public void BulkEmail(String emailMessage) {
using (var msg = new MailMessage()) {
msg.From = new MailAddress(SiteMailAddress);
msg.Body = emailMessage;
msg.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
using (var server = new SmtpClient(SiteMailServer, 25)) {
server.Credentials = new NetworkCredential(SiteMailUserId, SiteMailPwd);
foreach (var person in Personnel.GetActiveMembers()) {
var msgTo = person.PersonalEmail;
if (!String.IsNullOrEmpty(msgTo)) {
msg.To.Clear();
msg.To.Add(new MailAddress(msgTo, person.FullName));
server.Send(msg);
System.Threading.Thread.Sleep(ONE_MINUTE);
}
}
}
}
}
这会导致我们的网站在运行时显示死机一个多小时,或者它可能会失败。
这样做的简单解决方案是什么?
【问题讨论】:
-
主要电子邮件提供商采取的垃圾邮件预防措施很可能会将来自未知域的邮件标记为垃圾邮件。使用 3rd 方提供商进行群发邮件会更好
-
如果在您的循环中清除
msg.To,则添加您的所有收件人并发送一封电子邮件....