2010-06-21 136 views
1

在下面的代码SendAsync失败的原因是什么?

public static void Send(SmtpClient smtpClient, MailMessage email) 
{ 
    try 
    { 
     smtpClient.SendCompleted += (sender, e) => 
     { 
      var x = e.Error; // can't access discarded object 
     }; 
     smtpClient.SendAsync(email, null); 
    } 
    catch // never reach 
    { 
     // this works 
     smtpClient.Send(email); 
    } 
} 
+1

你在处理SendCompleted事件吗?它是否曾被错误响应调用过? – 2010-06-21 19:09:15

+0

我刚刚意识到有这个事件,e.Error'说我不能访问被丢弃的对象......我该如何解决它? – BrunoLM 2010-06-21 19:27:09

回答

2

你smtpClient对象已被释放或发送呼叫已经完成之后,但定稿前可以运行异步发送方法。尝试移动传递给Send方法的变量的作用域,以使其持续通过异步执行。

另一个问题是一次只能执行一个SendAsync调用。您必须实现自己的等待队列,以便可靠地使用SendAsync,否则会引发InvalidOperationException。

0

您的邮件可以被识别为垃圾邮件。检查您的垃圾邮件文件夹

+0

已经做了上千次 – BrunoLM 2010-06-21 19:04:40

-1

不知道这一点 - 但要尽量传递null以外的东西在userToken

smtpClient.SendAsync(email, "test"); 
相关问题