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 への切り替えは解決策ではありません。メールが送信されている間、送信メソッドがブロックされ、(メール サーバーの負荷に応じて) ユーザーを待機させ続けるためです。送信が失敗したりプロセスがクラッシュしたりするとメールが失われるため、メールの非同期送信もオプションではありません。
この問題の解決策がウェブ上で見つからないようです。誰かアイデアはありますか?