セットアップは次のとおりです。
- タスクスケジューラから1日1回呼び出される通知コントローラーがあります
- アクション メソッドは 300 以上のアドレスを取得し、それらをループして、SmtpClient クラスを使用して各受信者に個別の電子メールを送信します。
私が知る限り、プロセスは例外なく正常に実行されます...ただし、すべての電子メールが配信されているわけではありません。何が起こっているのか、どのように解決するのか、誰にもアイデアがありますか?
コードは次のとおりです。
foreach (var emp in division.Users)
{
var fromAddress = "myfromaddress";
var mailServer = "mymailserver";
var toEmail = emp.EmailAddress;
var message = new MailMessage(fromAddress, toEmail)
{
Subject = subject,
Body = "<body style='font:normal 13px tahoma,arial,helvetica;'>" + body + "</body>",
IsBodyHtml = true
};
var client = new SmtpClient(mailServer);
client.Send(message);
}
アップデート:
電子メールの送信の間に一時停止を追加すると、問題が解決します。しかし、なぜこれが機能するのでしょうか。そして、より良い方法で問題を同等に解決するより良い方法 (たとえば、Async() を使用) はありますか?
更新されたコード...
foreach (var emp in division.Users)
{
var fromAddress = "myfromaddress";
var mailServer = "mymailserver";
var toEmail = emp.EmailAddress;
var message = new MailMessage(fromAddress, toEmail)
{
Subject = subject,
Body = "<body style='font:normal 13px tahoma,arial,helvetica;'>" + body + "</body>",
IsBodyHtml = true
};
var client = new SmtpClient(mailServer);
client.Send(message);
Thread.Sleep(3000); // Wait 3s until sending next message
}