C# 是否在SendComplete中处理SmtpClient?

C# 是否在SendComplete中处理SmtpClient?,c#,dispose,smtpclient,sendasync,C#,Dispose,Smtpclient,Sendasync,使用SmtpClient的SendAsync发送电子邮件时,如何正确处理SmtpClient实例 比如说: MailMessage mail = new System.Net.Mail.MailMessage() { Body = MailBody.ToString(), IsBodyHtml = true, From = new MailAddress(FromEmail, FromEmailTitle), Subject = MailSubject }; mail.

使用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);
sendancycallback
方法中,我应该调用
sc.Dispose()
,还是调用
mail.Dispose()


我检查了MSDN文档,其中一个示例调用MailMessage.Dispose(),但此Dispose方法是否也会处理
SmtpClient
实例?

您应该在
sendanccallback
中处理
MailMessage
SmtpClient


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

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


好的,我刚刚试着发出message.Dispose(),但即使这样也会抛出一个错误,说它无法发送电子邮件,因为邮件已被处理。可能是因为我的是一个asp.net mvc应用程序,示例是一个控制台应用程序。在任何情况下,垃圾收集器都应该在所有内容都超出范围后选择这些选项…

您如何从
sendancycallback
中访问
MailMessage
,以便
处理它?如果我们将其设为全局变量(字段),我们肯定会遇到冲突(本例中是MVC应用程序)。我可以通过发送
MailMessage
作为
SendAsync()
的第二个参数的令牌来实现这一点。
message.Dispose();