web-dev-qa-db-ja.com

メールが配信されたかどうかを確認するにはどうすればよいですか?

以下は私のコーディングです、ただそれを見てください

System.Net.Mail.MailMessage oMail = new System.Net.Mail.MailMessage();
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
oMail.From = new System.Net.Mail.MailAddress("[email protected]");
oMail.To.Add(TextBox1.Text.Trim());
oMail.Subject = "Subject*";
oMail.Body = "Body*";
oMail.IsBodyHtml = true;
smtp.Host = "smtp.sendgrid.net";
System.Net.NetworkCredential cred = new System.Net.NetworkCredential("myusername", "mypassword");
smtp.UseDefaultCredentials = false;
smtp.Credentials = cred;
smtp.Send(oMail);

ここで、そのメールが配信されたかどうかを確認する必要があります。

15
Sankar M

できません。 SMTPを使用しているため、通常、配信が成功したかどうかを判断することはできません。 SMTP仕様を読んでください。メールは配信中にルーティングされるため、次のようになります。

  1. smtp.Send()を呼び出すとすぐにメッセージが送信される保証はありません。
  2. SMTPはroutedであるため、ルート上の一部のノードがアップリンクへの配信で失敗しないことを確信できません。
20
Andrey Agibalov

DeliveryNotificationOptionsMailMessageプロパティをOnSuccessに設定できます。

これに関する詳細はここにあります: http://msdn.Microsoft.com/en-us/library/system.net.mail.deliverynotificationoptions.aspx

そしてここ: http://msdn.Microsoft.com/en-us/library/system.net.mail.mailmessage.deliverynotificationoptions.aspx

コメントで指摘されているように、この方法は100%信頼できるものではありません。これは1つのオプションにすぎません。

9
Jamie Dixon

メール配信を確実にするためのベストプラクティスを以下に示します。

  • 返信なしの単一のアドレスを実際の受信トレイとして設定し、pop3を使用してメールアカウントにアクセスして、返送メッセージを探します。
  • 次の電子メール検証ライブラリのようなものを使用して送信する前に、電子メールアドレスが有効であることを確認してください。

http://www.kellermansoftware.com/p-37-net-email-validation.aspx

1
Greg Finzer

誰かが偶然見つけた場合。これは、Exchangeがインストールされた古いWin 2003サーバーでの私の経験です。私の.Netアプリは、SMTPを使用してメールを送信し、グループアドレスを「差出人」として使用したため、返信はグループ全体に送信されます。これはディスパッチング操作であり、グループ内の誰もが返信を手伝ってくれることを望んでいました。不達通知がグループに送信されることを期待していました。それは起こりません。私はメッセージトラッキングに行って、Exchangeがグループに通知を送信したと言っているのを見ましたが、彼らはそれを受け取っていませんでした。次に、SMTP仮想サーバーのプロパティに移動し、[配信不能レポートのコピーを送信する宛先]にグループのメールアドレスを入力しました。同じ結果、メッセージ追跡はグループに送信したが、配信されなかったと言っています。どうやら、不達通知はグループではなく個人のメールアドレスにのみ配信されます。個人アドレスに変更して動作しました。

1
Rob Keller

SMTPログを含むサーバーにアクセスできる場合、使用するサーバーのタイプと使用する詳細のレベルによっては、実際の配信の成功に関してはるかに優れたアイデアを得ることができる場合があります。

たとえば、SmarterMailを使用している場合、smtpログを読み取り、アプリケーションに報告する簡単なパーサーを作成できます。メールがグレーリストに登録されている場合、メールが配信されるまでに数分かかる場合があるため、これはブロック操作であってはなりません。

もう1つのオプションは、catch all "noreply"メールアドレスを作成し、送信者に含まれているメールIDを使用してメールを送信することです。つまり、noreply-bounces-32432 @ bounces.mydomain.comで、pop3リーダーを使用して受信トレイが返されるかどうかを確認します。メール。 「送信者」のメールIDを使用すると、送信に失敗したメールを特定できます。また、フィルタリングを実行して、「配信できない」タイプの応答か、単に「不在」タイプの応答かを判別することもできます。

利用可能なオプションがたくさんあり、それにどれだけの汗を流したいかによります。

0
James Harris

コードまたはSMTPサーバーで例外を受信しなければ、配信されたと見なすことができます。これはメールの問題であり、配信を保証する方法はありません。

0
Daniel A. White