これが私のコードです
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);
if (s != null)
{
s.Send(oMail);
}
oMail.Dispose();
s = null;
}
このループは60,000を超える電子メールを送信します。しかし、私の問題は、一部の電子メールで「メールの送信に失敗しました」が5000倍になり、残りの時間よりも短い時間で配信されます。そして、私はそれらすべてのエラー出力メールに有効なメールアドレスがあることを確認しました。何が問題かわからない。本当に助けが必要です。
編集:これは私の例外トレースです
エラー-メールの送信に失敗しました。;内部Ex-System.IO.IOException:トランスポート接続からデータを読み取れません:net_io_connectionclosed。 System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte []バッファ、Int32オフセット、Int32読み取り、ブール値readLine)at System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller、Boolean oneLine)at System.Net.Mail.SmtpReplyReaderFactory .ReadLine(SmtpReplyReader caller)at System.Net.Mail.CheckCommand.Send(SmtpConnection conn、String&response)at System.Net.Mail.MailCommand.Send(SmtpConnection conn、Byte [] command、String from)System.Net。 Mail.SmtpTransport.SendMail(MailAddress sender、MailAddressCollection recipients、String deliveryNotify、SmtpFailedRecipientException&exception)
どうやらこの問題は、私のサードパーティのSMTPサーバーでキューサイズを増やすだけで解決されました。でもニップの答えはかなり便利なようです
さて、「電子メールの送信に失敗しました」には、もう少し詳しく説明する必要があります。しかし、これを引き起こす可能性のあることがいくつかあります。
これらのエラーか別のエラーかに関係なく、例外と内部例外を調べて、もう少し詳細を確認する必要があります。
大量のメールを送信するときに同じ問題が発生しました。 deliveryMethod
プロパティをPickupDirectoryFromIis
に設定すると、修正されました。また、毎回新しいSmtpClientを作成しないでください。
smtpFailedrecipientExceptionはどのようなエラーが発生しますか?その場合は、innerexceptionsリストを確認し、StatusCodeを表示して詳細情報を取得できます。以下のリンクには、いくつかの良い情報があります
新しい情報を編集する
これは私が見ることができるものからあなたのSMTPサーバーを見つけることに関する問題です、しかしあなたはそれがいくつかの電子メールでのみ起こると言います。複数のsmtpサーバーを使用していますか?使用している場合は、特に1つに問題を解決できます。そうでない場合は、送信している電子メールの速度/量がsmtpサーバーに問題を引き起こしている可能性があります。
私たちにとって、すべてが順調でした、電子メールは非常に小さく、それらの多くは送信されず、疑いなくこのエラーが発生しました。技術者が電子メールの送信を妨げていたASTAROをインストールしたようです。私たちはこのエラーを受け取っていたので、はい、エラーは少し不可解ですが、これが他の人に役立つことを願っています。
電子メールを送信するためのループと、そこに提供したエラーを確認することは、唯一の解決策です。
ループの外でメールオブジェクトを宣言し、メールの送信に使用しているループの外でfromaddress
を割り当てます。 fromaddress
フィールドが問題のループで何度も割り当てられています。
5年後(この開発者がまだこれの修正を待っていないことを願っています。)
同じエラーが原因で同じ問題が発生しました。ループ内でSmtpClient
を宣言していました。
修正は簡単です-ループの外で一度宣言してください...
MailAddress mail = null;
SmtpClient client = new SmtpClient();
client.Port = 25;
client.EnableSsl = false;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = true;
client.Host = smtpAddress; // Enter your company's email server here!
for(int i = 0; i < number ; i++)
{
mail = new MailMessage(iMail.from, iMail.to);
mail.Subject = iMail.sub;
mail.Body = iMail.body;
mail.IsBodyHtml = true;
mail.Priority = MailPriority.Normal;
mail.Sender = from;
client.Send(mail);
}
mail.Dispose();
client.Dispose();
このエラーは、Webサーバーがメールサーバーにアクセスできない場合に表示されることがあります。 Webサーバーがメールサーバーに到達できることを確認します(たとえば、pingを実行します)。