在使用SendAsync时,处理SmtpClient和MailMessage的正确方法是什么
我已经复制了下面的代码。
{
...
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();
}在client.SendAsync(...)抛出异常之后释放MailMessage。我需要在回调处理程序中处理它。
发布于 2010-04-19 20:30:16
这看起来是正确的。
请注意,MailMessage不覆盖ToString,因此您的日志将简单地显示为[MailMessage] Send cancelled。
您可能希望改用Subject属性(或其他一些属性)。
发布于 2013-04-12 21:43:47
我想这可能会有帮助
client.SendCompleted += (s, e) => { client.Dispose(); message.Dispose(); };https://stackoverflow.com/questions/2667336
复制相似问题