2

使用中SmtpClientに廃棄する適切な方法は何ですか?MailMessageSendAsync

以下にコードをコピーしました。

{
...
var client = new SmtpClient {Host = _smtpServer};
client.SendCompleted += SendCompletedCallback;
var userState = mailMessage;
client.SendAsync(mailMessage, userState);
...
}

private static void SendCompletedCallback(object sender, 
    AsyncCompletedEventArgs e)
{
    // Get the unique identifier for this asynchronous operation.
    var mailMessage= (MailMessage)e.UserState;

    if (e.Cancelled)
    {
        Log.Info(String.Format("[{0}] Send canceled.", mailMessage));
    }
    if (e.Error != null)
    {
        Log.Error(String.Format("[{0}] {1}", mailMessage, e.Error));
    }
    else
    {
        Log.Info("Message sent.");
    }
    mailMessage.Dispose();
}

MailMessageafterを破棄するとclient.SendAsync(...)、例外がスローされます。コールバックハンドラーで破棄する必要があります。

4

2 に答える 2

2

これが役立つと思います

   client.SendCompleted += (s, e) => { client.Dispose(); message.Dispose(); };
于 2013-04-12T13:43:46.530 に答える
1

これは正しいようです。

MailMessageはオーバーライドされないToStringため、ログには単に。と表示されることに注意してください[MailMessage] Send cancelled。代わりに、プロパティ(またはその他のプロパティ)
を使用することをお勧めします。Subject

于 2010-04-19T12:30:16.130 に答える