【发布时间】:2012-12-21 11:23:22
【问题描述】:
我正在尝试在我的 MVC 控制器中使用 Postal MVC 发送电子邮件。我想异步发送电子邮件,不想在返回视图之前等待电子邮件发送。
这是我尝试使用的代码。
try
{
dynamic email = new Email("TestEmail"); //I have an Email View by this name
email.To = "myemailaddress@domain.com";
email.From = "recipientsaddress@domain.com";
email.SendAsync(); //email.Send() works fine
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
但我收到此错误“发送邮件失败”。
Inner Exception System.InvalidOperationException:此时无法启动异步操作。异步操作只能在异步处理程序或模块内或在页面生命周期中的某些事件期间启动。如果在执行页面时发生此异常,请确保该页面被标记为 。在 System.Web.AspNetSynchronizationContext.OperationStarted() 在 System.ComponentModel.AsyncOperation.CreateOperation(Object userSuppliedState,SynchronizationContext syncContext) 在 System.Net.Mail.SmtpClient.SendAsync(MailMessage message,Object userToken)
如果我将 SendAsync() 替换为 Send() 就可以了。
为了完整起见,这就是我的邮件设置在我的 Web.Config 中的样子
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network host="smtp.myisp.com" port="25" defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
异步发送电子邮件似乎有问题。有没有其他人提出过这个问题并有解决方案?
或者我应该使用像MvcMailer 这样的其他邮件程序吗?
请不要建议我不应该异步发送电子邮件。我希望我的网站能够快速响应,但我发现在注册过程中连接到电子邮件服务器以发送电子邮件有点无响应。
【问题讨论】:
-
您能否更具体地了解异常类型而不仅仅是消息文本?
-
请发布内部异常消息。也许堆栈跟踪...有用的东西。
-
查看邮政编码,这实际上可能不起作用,除非电子邮件发送得非常快,看起来 mailMessage 可能在异步消息发送之前就被处理了......我可能不会工作。我的建议是使用 Postal 的解析器并直接调用 SmtpClient ..
-
您可以通过在方法末尾添加
System.Threading.Thread.Sleep(10000)来测试是否存在dispose问题。 -
InnerException=System.InvalidOperationException:此时无法启动异步操作。异步操作只能在异步处理程序或模块内或在页面生命周期中的某些事件期间启动。如果此异常发生在执行一个页面,确保该页面在 System.ComponentModel.AsyncOperation.CreateOperation(Object userSuppliedState,SynchronizationContext syncContext) 处的 System.Web.AspNetSynchronizationContext.OperationStarted() 标记为 .at System。 Net.Mail.SmtpClient.SendAsync(MailMessage message,Object userToken)
标签: c# email asynchronous asp.net-mvc-4 postal