2011-09-01 23 views

答えて

16

...を参照していたクラスは、はい、あなたがすることができるすべては、それが成功だと仮定している - それは、サーバーとそれを受け入れたサーバーにメッセージを得た意味、あなたが例外を出さない限り。

は、あなたはおそらくすでにこのの残りの部分を知っているが、念のために...

そこから、電子メールが迷子といくつかの方法をお届けできませんでした。あなたのサーバはそれを受け入れて、それを送信しないか、または受け入れてクラッシュする前に電力を失います。途中でスパムフィルタによってブロックされる可能性があります。

電子メールは、送信者と受信者の間で複数の手を通過するという点で、通常のメールと似ていると考えることができます。あなたのコードから、送信するSMTPサーバに接続していることを確認できます。これは郵便局の出納係に似ています。メッセージがそこからどのようにルーティングされているかはわかりません(または知る必要があります)。それは空気、地面、またはキャリアハトである可能性があります。あなたは式から外れています。あなたはそれがどのように送信されるのかを知る必要はなく、送信する方法を知っていると信じています。 (メールでも同じことが言えます)

受信者が開いたことを確認する必要がある場合は、サーバー上のHTMLメッセージにイメージを埋め込み、そのイメージにアクセスするとログを追跡する方法がありますなど(Googleメールの追跡および電子メールのオープン追跡)

一方...

サーバはそれを拒否した場合、その後、あなたが話すの方法で、サーバの応答を得るのですか - があるはずですエラーが発生した理由をトラブルシューティングしたり、エラー処理を使用して別のルートなどを試すことができます。

+2

+1: "あなたはそれが送信される方法を知る必要はありません"と一緒に電子メール*通常*さまざまなスパム制御とサーバー設定により、1つの電子メールが数分から数日の間で遅延する可能性があります。 – NotMe

+0

@Chris Lively - 良い点! – David

+0

時々、サーバは250のokでメッセージIDを返します。成功したレスポンスを見ないと悪いです... –

1

あなたのsmtpclientが、このような正常に動作することを確認するためにSendCompletedイベントを利用することができます:

http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.sendcompleted.aspx

しかし、あなたはそれがメッセージ・チェーン内の任意のサーバ/フィルタで立ち往生可能性があるので、あなたのメッセージが受信者に到達した確認を得ることができません。

+0

その例は機能しません。新しいsmptClient(args [0])のOutOfBounds配列例外をスローします。 – Autonomic

1

したい場合は...それがスローされない限り、この場合の成功は唯一の何かがサーバーまで続いている、それはメールサーバーに受け入れられたことを意味するが、それは...成功したこと

を想定コントロールの少しSendAsyncを使用してSendCompletedイベントをフックすることができます...

関連する問題