Mailkitを使用してSMTP経由で電子メールを送信する方法については、ネット上でいくつかの素晴らしい例があります。Mailkit非同期SMTPを送信して確認する方法
client.Authenticate(theSMTPUsername,theSMTPPassword);
client.SendAsync(emailMessage);
client.Disconnect(true);
しかし、私が知りたいのですがどのような非同期送信が完了したとき、または場合:通常で終わる
:非同期が必要な場合は
client.Authenticate(theSMTPUsername,theSMTPPassword);
client.Send(emailMessage);
client.Disconnect(true);
しかし、これは無意味ですそれは成功しません。 .Netネイティブライブラリでは、これはコールバック(イベントハンドラ)によって実現されます。
MailKit SendAsyncに対して 'Completed'コールバックハンドラを定義することは可能ですか?それが成功したかどうかを検出するためのベストプラクティスではありません。あなたはこのようなコードを持っている必要はありません
おかげ
ありがとう:あなたがに接続することができMessageSentイベントがあります。コールバックがよかったです。 – Hughgo
これをもう少し見ると、私は解決策がうまくいくとは思っていません。非同期呼び出しを待つのは、非同期部分が戻るのを待つだけです。これは、メッセージが送信されるのを待つことはありません。上記のコードは競合する可能性があり、作業が完了する前に切断されます。それを実行するより良い方法は、* synchronous * APIを待つことです。これは、各段階が進行する前に完了することを保証する。 – Hughgo
'client.Send()'が返るとき、メッセージは送られています。同様に、 'await client.SendAsync()'の後にコントロールが再開すると、メッセージが送信されます。レースはありません。同期APIを '待つ'ことはできません。 – jstedfast