SmtpClient sendメソッドはvoidを返します。サーバーの応答を得る方法はありますか?例外をスローしない限り、成功したと見なしていますか?SmtpClientはサーバー送信時に結果を取得します
私はあなたの第二の点に答えるためにhttp://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx
SmtpClient sendメソッドはvoidを返します。サーバーの応答を得る方法はありますか?例外をスローしない限り、成功したと見なしていますか?SmtpClientはサーバー送信時に結果を取得します
私はあなたの第二の点に答えるためにhttp://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx
...を参照していたクラスは、はい、あなたがすることができるすべては、それが成功だと仮定している - それは、サーバーとそれを受け入れたサーバーにメッセージを得た意味、あなたが例外を出さない限り。
は、あなたはおそらくすでにこのの残りの部分を知っているが、念のために...
そこから、電子メールが迷子といくつかの方法をお届けできませんでした。あなたのサーバはそれを受け入れて、それを送信しないか、または受け入れてクラッシュする前に電力を失います。途中でスパムフィルタによってブロックされる可能性があります。
電子メールは、送信者と受信者の間で複数の手を通過するという点で、通常のメールと似ていると考えることができます。あなたのコードから、送信するSMTPサーバに接続していることを確認できます。これは郵便局の出納係に似ています。メッセージがそこからどのようにルーティングされているかはわかりません(または知る必要があります)。それは空気、地面、またはキャリアハトである可能性があります。あなたは式から外れています。あなたはそれがどのように送信されるのかを知る必要はなく、送信する方法を知っていると信じています。 (メールでも同じことが言えます)
受信者が開いたことを確認する必要がある場合は、サーバー上のHTMLメッセージにイメージを埋め込み、そのイメージにアクセスするとログを追跡する方法がありますなど(Googleメールの追跡および電子メールのオープン追跡)
一方...
サーバはそれを拒否した場合、その後、あなたが話すの方法で、サーバの応答を得るのですか - があるはずですエラーが発生した理由をトラブルシューティングしたり、エラー処理を使用して別のルートなどを試すことができます。
あなたのsmtpclientが、このような正常に動作することを確認するためにSendCompletedイベントを利用することができます:
http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.sendcompleted.aspx
しかし、あなたはそれがメッセージ・チェーン内の任意のサーバ/フィルタで立ち往生可能性があるので、あなたのメッセージが受信者に到達した確認を得ることができません。
その例は機能しません。新しいsmptClient(args [0])のOutOfBounds配列例外をスローします。 – Autonomic
したい場合は...それがスローされない限り、この場合の成功は唯一の何かがサーバーまで続いている、それはメールサーバーに受け入れられたことを意味するが、それは...成功したこと
を想定コントロールの少しSendAsync
を使用してSendCompleted
イベントをフックすることができます...
+1: "あなたはそれが送信される方法を知る必要はありません"と一緒に電子メール*通常*さまざまなスパム制御とサーバー設定により、1つの電子メールが数分から数日の間で遅延する可能性があります。 – NotMe
@Chris Lively - 良い点! – David
時々、サーバは250のokでメッセージIDを返します。成功したレスポンスを見ないと悪いです... –