web-dev-qa-db-ja.com

smtpclient「メールの送信に失敗しました」

これが私のコードです

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)

14
Nnp

どうやらこの問題は、私のサードパーティのSMTPサーバーでキューサイズを増やすだけで解決されました。でもニップの答えはかなり便利なようです

3
Nnp

さて、「電子メールの送信に失敗しました」には、もう少し詳しく説明する必要があります。しかし、これを引き起こす可能性のあることがいくつかあります。

  1. 「差出人」アドレスの制限。異なるアドレスを使用している場合、SMTPサービスによって送信できないようにブロックされている可能性があります。
  2. SMTPサービスの洪水防止により、電子メールの送信が停止される可能性があります。

これらのエラーか別のエラーかに関係なく、例外と内部例外を調べて、もう少し詳細を確認する必要があります。

9
Mitchel Sellers

大量のメールを送信するときに同じ問題が発生しました。 deliveryMethodプロパティをPickupDirectoryFromIisに設定すると、修正されました。また、毎回新しいSmtpClientを作成しないでください。

3
Romhein

smtpFailedrecipientExceptionはどのようなエラーが発生しますか?その場合は、innerexceptionsリストを確認し、StatusCodeを表示して詳細情報を取得できます。以下のリンクには、いくつかの良い情報があります

[〜#〜] msdn [〜#〜]

新しい情報を編集する

これは私が見ることができるものからあなたのSMTPサーバーを見つけることに関する問題です、しかしあなたはそれがいくつかの電子メールでのみ起こると言います。複数のsmtpサーバーを使用していますか?使用している場合は、特に1つに問題を解決できます。そうでない場合は、送信している電子メールの速度/量がsmtpサーバーに問題を引き起こしている可能性があります。

1
Pharabus

私たちにとって、すべてが順調でした、電子メールは非常に小さく、それらの多くは送信されず、疑いなくこのエラーが発生しました。技術者が電子メールの送信を妨げていたASTAROをインストールしたようです。私たちはこのエラーを受け取っていたので、はい、エラーは少し不可解ですが、これが他の人に役立つことを願っています。

1
Marc Roussel

電子メールを送信するためのループと、そこに提供したエラーを確認することは、唯一の解決策です。
ループの外でメールオブジェクトを宣言し、メールの送信に使用しているループの外でfromaddressを割り当てます。 fromaddressフィールドが問題のループで何度も割り当てられています。

1
OM Krishna

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();
1
Mike Gledhill

このエラーは、Webサーバーがメールサーバーにアクセスできない場合に表示されることがあります。 Webサーバーがメールサーバーに到達できることを確認します(たとえば、pingを実行します)。

0