在SendComplete中配置SmtpClient?

当我使用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实例吗?

非常感谢。

您应该在SendAsyncCallback配置MailMessageSmtpClient

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

这个例子:从MSDN Library文档中只关闭Message,所以我将在我的实现中使用它: SmtpClient.SendAsync方法

 message.Dispose(); 

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

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