使用SmtpClient
时处置MailMessage
和SendAsync
的正确方法是什么?
我已经在下面复制了我的代码。
{
...
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();
}
在
MailMessage
之后处置client.SendAsync(...)
会引发异常。我需要将其放置在回调处理程序中。 最佳答案
这看起来是正确的。
请注意,MailMessage
不会覆盖ToString
,因此您的日志将仅显示[MailMessage] Send cancelled
。
您可能想使用Subject
属性(或其他属性)。
关于c# - SmtpClient.SendAsync代码审查,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2667336/