2

2010 年 (当時はまだ Net 2.0 を使用していました)、SmtpClient で SmtpDeliveryMethod.SpecifiedPickupDirectory を使用すると、メールが Bcc 受信者に送信されないという問題が発生しました。

Web(リンクリンク)を検索した後、次の回避策を作成しました:

if (message.Bcc.Count > 0)
{
    System.Text.StringBuilder bcc = new System.Text.StringBuilder();
    for (int i = 0; i < message.Bcc.Count; i++)
    {
        bcc.Append(message.Bcc[i].Address);
        bcc.Append(";");
    }
    message.Headers.Add("Bcc", bcc.ToString());
    message.Bcc.Clear();
}

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory;
smtp.PickupDirectoryLocation = PickupDir;
smtp.Send(message);

この回避策には、Bcc 受信者が送信メールのヘッダーに表示されるという副作用がありましたが、この場合、Bcc はログの目的で使用されていたため、これは問題ではありませんでした。

数日前、(ついに) Net 4.0 に切り替えたところ、問題が再発しました。回避策を削除しようとしましたが、それも役に立ちませんでした。

SmtpDeliveryMethod.Network への切り替えは解決策ではありません。メールが送信されている間、送信メソッドがブロックされ、(メール サーバーの負荷に応じて) ユーザーを待機させ続けるためです。送信が失敗したりプロセスがクラッシュしたりするとメールが失われるため、メールの非同期送信もオプションではありません。

この問題の解決策がウェブ上で見つからないようです。誰かアイデアはありますか?

4

1 に答える 1

1

これは .Net 4.0 では機能しません。しかし、それはバグではなく、そのように設計されています。このリンクを見てください

.Net 3.5 には、探している動作を実装できるバグがあるようです。

于 2013-06-21T08:14:16.603 に答える