MVC3 Web アプリケーションがあり、MvcMailer を使用して電子メールを送信しています (一度に数千の可能性があります)。これは、各受信者を同じメールに BCC するだけで問題なく動作しますが、個々のメールを送信してループしようとすると、非常に遅くなります。これは、毎回 smtp サーバーに再度接続しているためだと思いますか?
接続している独自のsmtpサーバーがあり、現在、次のようなメールを送信しようとしています:
foreach(Person x in names)
{
var mail = Mailer.Example_Mail()
mail.To.Add(x.Email_Address);
mail.Send();
}
smtp サーバーに接続してすぐに送信する代わりに、メールをファイルに保存できることをチュートリアルから知っています。残念ながら方法がわかりません。
誰かがこれを行う最善の方法を教えてくれたら、それは素晴らしいことです! よろしくお願いします!
アップデート
SendAsync()
@Mike が提案する方法を使用してみましたが、実際にはかなり高速化されますが、現在はメールの約 40% が失われています。エラーがスローされない場合、100 通の電子メールのうち約 65 通しか通過しません。ここの「非同期電子メールのイベントの処理」セクションで提案されているように、エラーをキャッチしようとしましたが、スローされたようには見えません。以下のコード:
List<object> errors = new List<object>();
var mail = Mailer.Example_Mail();
mail.To.Add("some@address.com");
for (int i = 0; i < 100; i++)
{
var client = new SmtpClientWrapper();
client.SendCompleted += (sender, e) =>
{
if (e.Error != null || e.Cancelled)
{
errors.Add(e);
}
};
mail.SendAsync("user state object", client);
}