3

複数の受信者に電子メールを送信しようとしていますが、すべての受信者が有効な電子メール アドレスを持っている場合は正常に機能します。

しかし、受信者の1人が無効な電子メールアドレスを持っている場合、電子メールアドレスが有効な他の受信者にも電子メールが送信されず、例外が発生します:

サーバーが 1 つ以上の受信者アドレスを拒否しました。サーバーの応答: 550 #5.1.0 アドレスが拒否されました。

電子メール アドレスの 1 つが無効であっても、他の有効な受信者に電子メールを送信する方法はありますか?

public static void sendMails(string ptxtSubject, string ptxtBody)
{
    string txtTo = "valid1@aaa.com,valid2@aaa.com,invalid1@aaa.com";
    string txtFrom = "valid@aaa.com";
    string txtSubject = ptxtSubject;
    string txtBody = ptxtBody;

    MailMessage mail = new MailMessage();
    mail.To = txtTo;
    mail.From = txtFrom;
    mail.Subject = txtSubject;
    mail.Body = txtBody;

    try
    {
        SmtpMail.SmtpServer ="smtp.aaa.com";
        SmtpMail.Send(mail);
    }
    catch (Exception ex)
    {
       //log the exception
       throw;  
    }
}

それぞれに個別のメールを送信できますが、ユーザー (受信者) はメール配信リストに他に誰がいるかわかりません。私の要件は、誰がメールを受信して​​いるかを誰もが知ることができるようにすることです。

Outlook はすべての有効なユーザーに電子メールを送信し、無効なユーザーについては通知します。C# を使用して同じことができる方法はありますか?

4

2 に答える 2

3

すべての受信者が確実にお互いを知っていない限り (そして、他の人があなたから電子メールを受信して​​いることを知っていることを気にしない場合)、とにかく別々の電子メールを送信する必要があります。

これにより、問題も解決されます。つまり、1 つの送信操作が失敗しても、他の操作が中断されることはありません。あなたの場合、アドレスがSMTPサーバーと同じホストからのものであるため、最初のリレーが失敗しているように見えることに注意してください。

電子メールが複数のホストにルーティングされると、成功/失敗は相互に依存しなくなります。たとえば、gmail.com サーバーはおそらく、yahoo.com サーバーが受信者を拒否したことを認識していません。

パフォーマンスが問題になる場合は、メッセージを非同期に送信してスループットを向上させることができます。非同期で送信する場合でも、例外を処理できることに注意してください。

いつものように、大量の電子メールを送信する場合は、おそらくサード パーティのサービスを使用することをお勧めします。

于 2012-12-03T16:31:59.720 に答える
1

これを達成する方法は本当にありません。を使用した電子メールの送信SmtpMail.Send()は、ほぼアトミックな機能であり、例外なく動作するには正しいデータが必要です。

ここに表示される唯一のオプションは、各受信者に個別のメールを送信することです。

于 2012-12-03T16:32:35.217 に答える