Asp.Netアプリケーションを開発しています。ユーザーがパスワードを忘れた場合、ユーザーのメールアドレスにメールを送信します。
メールが正常に送信されたかどうかを確認したい。確かにそれを知る方法はありますか?.
[〜#〜]編集[〜#〜]
メールIDが存在しない場合、失敗を検出しますか。
SmtpMail.Send(message)
メソッドがエラーを返さない場合、それは電子メールがSMTPサーバーに送信されたことを意味し、管轄外、つまり知ることができます。
System.Net.Mailを使用している場合は試してください
message.DeliveryNotificationOptions = System.Net.Mail.DeliveryNotificationOptions.OnSuccess;
.Send(msg)メソッドをtry catchブロックに入れ、SmtpFailedRecipientExceptionをキャッチします。
try
{
mail.Send(msg);
}
catch (SmtpFailedRecipientException ex)
{
// ex.FailedRecipient and ex.GetBaseException() should give you enough info.
}
spec によると:
S: 220 smtp.example.com ESMTP Postfix
C: HELO relay.example.org
S: 250 Hello relay.example.org, I am glad to meet you
C: MAIL FROM:<[email protected]>
S: 250 Ok
C: RCPT TO:<[email protected]>
S: 250 Ok
C: RCPT TO:<[email protected]>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: "Bob Example" <[email protected]>
C: To: Alice Example <[email protected]>
C: Cc: [email protected]
C: Date: Tue, 15 Jan 2008 16:02:43 -0500
C: Subject: Test message
C:
C: Hello Alice.
C: This is a test message with 5 header fields and 4 lines in the message body.
C: Your friend,
C: Bob
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye
{The server closes the connection}
サーバーが250 Ok: queued as 12345
、本当にメールを送信したかどうか、または配信されたかどうかは確実にはわかりません。
DeliveryNotificationOptionsを使用して、領収書を受け取ることができます。
Mailという名前のMailMessage
オブジェクトがある場合は、次のようにします。
mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
いいえ。電子メール(SMPTベース)は信頼性の低いトランスポートプロトコルであり、電子メールが受信および読み取られたことを検出するためのハッキングもありますが、電子メールに個別の画像URLを埋め込み、その画像が受信者のクライアントによって要求されたことを追跡することにより、要求を確実に満たす方法はありません。
SmtpClient.Send メソッドは、送信に問題がある場合に例外を発生させます。しかし、そのメッセージをSMTPサーバーに送信する以外に、そこから宛先に到達したかどうかを知る方法はありません。
プログラムでメールを送信するためにGmail SMTPを使用しています。送信された偽のメールがSmtpFailedRecipientExceptionトラップを使用してもOkを返します。
しかし、OutlookでGmailの受信者を確認したところ、メールが説明付きで送信されていないことがわかりました。サブジェクト配信ステータス通知(失敗)
私の質問は、プログラム内でこの通知を取得することは可能です。
私はこれを見つけましたが、POP用ではありません