16

これが私のコードです

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回発生し、残りの電子メールが配信される時間よりも短い時間です。そして、私はそれらすべてのエラーアウトメールが有効なメールアドレスを持っていることを確認しました。何が問題なのかわからない。私は本当にこれで助けが必要です。

編集:これは私の例外トレースです

エラー-メールの送信に失敗しました。; 内部例-System.IO.IOException:トランスポート接続からデータを読み取ることができません:net_io_connectionclosed。System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte [] buffer、Int32 offset、Int32 read、Boolean 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)atSystem.Net。 Mail.SmtpTransport.SendMail(MailAddress送信者、MailAddressCollection受信者、文字列deliveryNotify、SmtpFailedRecipientException&例外)

4

8 に答える 8

13

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

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

これらのエラーまたは別のエラーのいずれかであるかどうかに関係なく、例外と内部例外を調べて、もう少し詳細を取得する必要があります。

于 2010-02-05T19:09:06.840 に答える
4

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

于 2010-03-09T23:12:29.687 に答える
3

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

于 2010-02-09T02:49:50.463 に答える
1

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

于 2012-06-08T15:15:52.170 に答える
1

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

MSDN

新しい情報を編集する

これは、私が見ることができるものからSMTPサーバーを見つける際の問題ですが、一部の電子メールでのみ発生するとおっしゃっています。複数のSMTPサーバーを使用していますか。使用している場合は、問題を特定の1つに絞ることができます。そうでない場合は、送信する電子メールの速度/量がSMTPサーバーに問題を引き起こしている可能性があります。

于 2010-02-05T19:07:52.763 に答える
1

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

于 2012-05-25T12:27:33.057 に答える
1

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();
于 2015-10-06T14:59:32.667 に答える
0

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

于 2014-02-18T13:49:36.213 に答える