11

当我使用 SmtpClient 的 SendAsync 发送电子邮件时,如何smtpclient正确处置实例?

比方说:


MailMessage mail = new System.Net.Mail.MailMessage()
{
   Body = MailBody.ToString(),
   IsBodyHtml = true,
   From = new MailAddress(FromEmail, FromEmailTitle),
   Subject = MailSubject
};
mail.To.Add(new MailAddress(i.Email, ""));
SmtpClient sc = new SmtpClient(SmtpServerAddress);
//Add SendAsyncCallback to SendCompleted
sc.SendCompleted += new SendCompletedEventHandler(SendAsyncCallback);
//using SmtpClient to make async send (Should I pass sc or mail into SendAsyncCallback?)
sc.SendAsync(mail, sc);

SendAsyncCallback方法中,我应该调用sc.Dispose(),还是mail.Dispose()

我查看了 MSDN 文档,其中一个示例调用 MailMessage.Dispose(),但是这个 dispose 方法也会释放SmtpClient实例吗?

4

2 回答 2

6

您应该同时处理 theMailMessageSmtpClientin SendAsyncCallback

处理 MailMessage 不会自动处理 SmtpClient(因为您可能希望使用相同的 SmtpClient 发送两条消息,并且您不希望在处理第一条消息后立即处理客户端)。

于 2011-05-19T14:39:46.500 回答
1

此示例:来自 MSDN 库文档仅关闭消息,因此我将在我的实现中使用它: SmtpClient.SendAsync 方法

message.Dispose();

我遇到了这个问题中提到的这个问题,发送总是被取消,所以我删除了我的 using {} 语句: SmtpClient.SendAsync 调用被自动取消

好的,我刚刚尝试发出 message.Dispose() ,即使这样也抛出了错误,说由于消息被处理而无法发送电子邮件。可能是因为我的是一个 asp.net mvc 应用程序,而示例是一个控制台应用程序。无论如何,一旦一切超出范围,垃圾收集器应该选择这些选项......

于 2013-01-28T17:55:44.813 回答