0

我正在尝试在我的 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);
        }

但我收到此错误“发送邮件失败”。

内部异常 System.InvalidOperationException:此时无法启动异步操作。异步操作只能在异步处理程序或模块内或在 Page 生命周期中的某些事件期间启动。如果在执行 Page 时发生此异常,请确保 Page标记为 <%@ Page Async="true" %>。在 System.Web.AspNetSynchronizationContext.OperationStarted() 在 System.ComponentModel.AsyncOperation.CreateOperation(Object userSuppliedState,SynchronizationContext syncContext) 在 System.Net.Mail.SmtpClient.SendAsync(MailMessage message,Object userToken)

如果我用 Send() 替换 SendAsync() 它工作正常。

为了完整起见,这就是我的邮件设置在我的 Web.Config 中的样子

  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network">
        <network host="smtp.myisp.com" port="25" defaultCredentials="true" />
      </smtp>
    </mailSettings>
  </system.net>

异步发送电子邮件似乎有问题。有没有其他人提出这个问题并有解决方案?

或者我应该使用像MvcMailer这样的另一个邮件程序吗?

请不要建议我不应该异步发送电子邮件。我希望我的网站能够快速响应,并且我发现在注册过程中连接到电子邮件服务器以发送电子邮件有点无响应。

4

2 回答 2

2

Postal MVC 似乎与 MVC4 的新异步机制不兼容。在 Postal MVC 的开发人员使其兼容之前,您有 2 个选择,降级到 MVC3,或者在您的应用程序中强制使用旧的 MVC3 功能。

要恢复到 MVC4 中的旧功能,您可以在 web.config 中应用以下设置:

<add key="aspnet:UseTaskFriendlySynchronizationContext" value="false" /> 

不过要小心不要这样做,这样做可能会对您的网站产生影响。我建议你研究一下其中的含义。

于 2012-12-21T17:02:08.983 回答
0

确保您拥有最新版本的 Postal。它们包括发送异步的单元测试,它应该可以帮助您了解问题所在。这表明它不是邮政的问题。

该测试还表明您​​可能必须使用SpecifiedPickupDirectory

于 2012-12-21T12:08:27.687 回答