この問題に関連するさまざまなスレッドがあることは知っていますが、それらのスレッドで応答を取得してサーバーで動作させることができませんでした。
誰かが私をここで助けてくれるかどうか試してみましょう。メールの 99% は適切に送信され、実際にそのエラーが返されることはほとんどありません。
私のコードは次のようになります
MailMessage mm = new MailMessage(Settings.EmailCustomerService, to, subject, body);
mm.SubjectEncoding = Encoding.UTF8;
mm.BodyEncoding = Encoding.UTF8;
mm.IsBodyHtml = true;
MailAddress add = new MailAddress(Settings.EmailCustomerService, "Customer Service");
mm.From = add;
try
{
SmtpClient client = new SmtpClient(Settings.EmailSMTP);
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(Settings.EmailUser, Settings.EmailPwd);
System.Threading.ParameterizedThreadStart threadStart = new System.Threading.ParameterizedThreadStart(SendInThread);
threadStart.Invoke(new SendInThreadParams
{
client = client,
Message = mm
});
}
finally
{
mm = null;
}
実際には Credentials コードは後で追加されましたが、私のコードはそれがなくても問題なく実行されました。たまたま、電子メールの 1% が受信者に届かず、資格情報にこれらの 2 行を追加しても違いはありませんでした。
Settings.EmailUser は、SMTP が実行されているサーバー上の単なるユーザーですが、どこにも接続していません。
それが問題だと思います。
SMTP サーバー リレーは 127.0.0.1 を使用するように設定されており、FQDN は単なるマシンの名前です (「Machine1」のようなもの ... domain.com 名を含むものはありません)。
私が得ているエラーはこれです
Reporting-MTA: dns;Machine1
Received-From-MTA: dns;Machine1
Arrival-Date: Wed, 30 May 2012 23:08:36 -0700
Final-Recipient: rfc822;test@email.net
Action: failed
Status: 5.5. 0
診断コード: smtp;550 アクセスが拒否されました - 無効な HELO 名 (RFC2821 4.1.1.1 を参照)
メールで返信された返信メッセージは次のとおりです。
> This is an automatically generated Delivery Status Notification.
Delivery to the following recipients failed.
test@email.com
高度なありがとう...