MVCMailer SendAsync() 因 Amazon SES 失败

2023-12-02

如果我将 Send() 与 MVCMailer 一起使用,我的 SES 工作正常,但 SendAsync() 显示下面的错误消息,有人知道解决此问题的方法吗?谢谢!

System.Net.Mail.SmtpException: Failure sending mail. ---> System.InvalidOperationException: An asynchronous operation cannot be started at this time. Asynchronous operations may only be started within an asynchronous handler or module or during certain events in the Page lifecycle. If this exception occurred while executing a Page, ensure that the Page is marked <%@ Page Async="true" %>.
   at System.Web.AspNetSynchronizationContext.OperationStarted()
   at System.ComponentModel.AsyncOperation.CreateOperation(Object userSuppliedState, SynchronizationContext syncContext)
   at System.Net.Mail.SmtpClient.SendAsync(MailMessage message, Object userToken)
   --- End of inner exception stack trace ---
   at System.Net.Mail.SmtpClient.SendAsync(MailMessage message, Object userToken)
   at Mvc.Mailer.SmtpClientWrapper.SendAsync(MailMessage mailMessage, Object userState)
   at Mvc.Mailer.MailMessageExtensions.SendAsync(MailMessage message, Object userState, ISmtpClient smtpClient)
   at MVCWebsite.Helpers.AccountHelper.RegisterNewUser(BaseDBContext db, AccountViewModelForReg VM, Boolean isCaptchaValid, Boolean modelValidity) in c:\Users\William-Business\Desktop\TWB\TWB Central\Projects\AwesomeSauce\AwesomeSauce\Helpers\AccountHelper.cs:line 316
   at MVCWebsite.Controllers.AccountController.Register(AccountViewModelForReg VM, Boolean captchaValid) in c:\Users\William-Business\Desktop\TWB\TWB Central\Projects\AwesomeSauce\AwesomeSauce\Controllers\AccountController.cs:line 308
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)

此错误是设计使然。您可以全局关闭此功能:

<appSettings>
  <add key="aspnet:AllowAsyncDuringSyncStages" value="false" />
</appSettings>

参考http://msdn.microsoft.com/en-us/library/hh975440.aspx

其他需要考虑的事情是使用任务在后台执行异步,将其与 ASP.Net 使用的调度程序解耦。使用此方法,您不需要更改 appSetting。

using Mvc.Mailer;
...
public ActionResult SendWelcomeMessage()
{
    Task.Factory.StartNew(() => UserMailer.Welcome().SendAsync());
    return RedirectToAction("Index");
}

Edit

启用AllowAsyncDuringSyncStages 或使用任务并行库都有潜在的缺点。使用 AsyncController 没有任何缺点。感谢@StephenCleary 对我的答案提出质疑。

public class HomeController : AsyncController
{
  public void SendMessageAsync()
  {
    var client = new SmtpClientWrapper();
    client.SendCompleted += (sender, args) => 
      AsyncManager.OutstandingOperations.Decrement();
    AsyncManager.OutstandingOperations.Increment();
    new UserMailer().Welcome().SendAsync("", client);
  }

  public ActionResult SendMessageCompleted()
  {
    return View();
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVCMailer SendAsync() 因 Amazon SES 失败 的相关文章

随机推荐

  • 如何在 type="text/ng-template" 的页面中使用 javascript?

    我有这样的代码
  • 模板的显式实例化

    这个线程确实很有帮助 但我仍然对这个过程有疑问 但似乎没有得到解答 我必须在多大程度上显式实例化模板 例如 如果在我的定义文件中 我在每个函数 友元类 运算符重载等上使用模板 我是否必须在模板实例化文件中实例化每个模板 我正在使用的当前方法
  • 如何读取函数调用后的代码块?

    我是 swift 新手 我需要帮助阅读以下代码 函数调用 self table update completedItem 之后的代码块的含义是什么 代码块第一行的 result error 的含义是什么 self table update
  • Objective-C中如何动态加载类?

    如何在 Objective C 中动态加载类 根据我的需要 类名将位于一个文本文件中 我需要读取它 然后动态加载该类 这段代码正在 Java 中加载一个类 我希望在 Objective C 中完成相同的功能 public class Mai
  • C 中数组的 & 运算符定义

    最近的一个问题引发了一场围绕数组和指针的讨论 这个问题是指scanf s name vs scanf s name 对于下面的代码 微软实际上在VS2010 也许更早的版本 中为你解决了这个问题 include
  • 从数据库中获取中值

    中位数定义为将数据集的上半部分与下半部分分开的数字 从 STATION 查询北纬度 LAT N 的中位数 并将结果四舍五入到小数位 输入格式 STATION表描述如下 Field Type ID NUMBER CITY VARCHAR2 2
  • Quickblox 网页版 - 创建 1 对 1 聊天

    我正在尝试从网络客户端创建一对一聊天 我下载了SDK和群聊示例 除了网络之外 所有平台似乎都有很好的例子 例如 http quickblox com developers Android XMPP Chat Sample 任何人都可以提供代
  • jQuery 验证适用于输入 type="submit",但不适用于 html 按钮元素。为什么?

    使用 ASP NET 为什么 bassistance de jQuery 验证插件在使用 input type submit 元素而不是 html 按钮元素时阻止表单提交 使用 html 按钮 type submit 标记时会触发验证 但表
  • Ansible 正则表达式转义美元字符

    我正在尝试使用 Ansible 修改配置文件中的 URL 值 CONSOLE URI http 172 18 18 103 controller 我正在使用 lineinfile 模块 但它不起作用 我尝试用双反斜杠转义 但它也不起作用 l
  • 在 Google App Engine 上选择 Java 与 Python

    目前 Google App Engine 支持 Python 和 Java Java 支持不太成熟 然而 Java 似乎有更长的库列表 尤其是对 Java 字节码的支持 无论用于编写该代码的语言如何 哪种语言能提供更好的性能和更强大的功能
  • 新旧风格类中的Python析构函数[重复]

    这个问题在这里已经有答案了 我试图理解为什么对象销毁在新样式类中与旧样式类中的工作方式不同 class Wrapper class Inner object def del self print Inner destructor inner
  • Angular cli 2错误无法通过AOT构建解析XXXXX的所有参数

    import Injectable Inject from angular core import Subject from rxjs Subject import CompleterData CompleterItem from ng2
  • 解析Java中类似乳胶的语言

    我正在尝试用 Java 为类似于 Latex 的简单语言编写一个解析器 即它包含大量非结构化文本 中间有几个 commands with some parameters 像 这样的转义序列也必须考虑在内 我尝试用 JavaCC 生成一个解析
  • 从片段中的 sqlite 动态设置复选框

    我无法找出在列表视图中存储和显示复选框的最佳方法 现在我在 getView 方法中有代码 Override public View getView final int position View convertView ViewGroup
  • 在 Node.js 中克隆对象

    在 Node js 中克隆对象的最佳方法是什么 例如我想避免出现以下情况 var obj1 x 5 y 5 var obj2 obj1 obj2 x 6 console log obj1 x logs 6 该对象很可能包含复杂类型作为属性
  • 从文本文件中删除最后一行

    我需要从文本文件中删除最后一行 我知道如何在 C 中打开和保存文本文件 但如何删除文本文件的最后一行 文本文件的大小始终不同 有些有 80 行 有些有 20 行 有人可以告诉我该怎么做吗 Thanks 通过少量的行 你可以轻松地使用这样的东
  • 使用C连续读取已打开的文件

    我正在实现一个低重量的应用程序 我必须经常打开并读取 proc pid 或 tid task stat 详细信息 如果应用程序是多线程的 我必须阅读更多统计文件 因此打开 读取和关闭使我的监控应用程序非常慢 有没有办法避免重复打开文件并且仍
  • 多色单一图标

    我为 Fontawesome 图标定义了一些样式 将浏览器图标着色为相应的品牌颜色 所以 Opera 图标是红色的 IE 图标是蓝色的 Firefox 图标是橙色的 但由于 Chrome 有 4 种不同的颜色 而且分离得非常严格 我想知道是
  • Java:编译时解析和“最具体的方法”,因为它适用于变量数量

    有人可以帮助我理解吗JLS re 最具体方法的第 15 12 2 5 节 以下是来自 JLS 的猛击剪切和粘贴 此外 如果满足以下任一条件 则一个名为 m 的变量 arity 成员方法比另一个同名的变量 arity 成员方法更具体 一个成员
  • MVCMailer SendAsync() 因 Amazon SES 失败

    如果我将 Send 与 MVCMailer 一起使用 我的 SES 工作正常 但 SendAsync 显示下面的错误消息 有人知道解决此问题的方法吗 谢谢 System Net Mail SmtpException Failure send