stmpclient sendasync() 发送邮件失败 现在无法进行异步操作,求助大神,如何修改?

q314045513 2016-11-26 11:32:41
先说下我的思路,在注册页面注册时,用户点击注册按钮后,将用户填写的字段(如用户名,密码,邮箱等)写入数据库, 并【异步发送邮件】.
异步发送邮件时 报错,邮件发送失败,现在无法开始异步操作!!
下面是代码和错误

http://asp.net mvc Razer 视图引擎下
注册时的控制器RegCtronller:

[HttpPost]
public ActionResult Index()
{
.............
//获取用户填写的字段


Utils.SendEmail(Email, UserName + ",恭喜您注册成为xx人才网的企业用户!", sendcontent); //email 为用户输入的邮箱 username 是用户输入的用户名
.......
//返回json
}

----------------------------------
utils类中 的 异步发送邮件方法

public static bool SendEmail(string recipient, string subject, string body)
{
.....字数限制 所以省略
smtp.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
...

smtp.SendAsync(myMail,userState); //【异步发送 ,此处报错】
return true;
}


捕捉到 System.Net.Mail.SmtpException
HResult=-2146233088
Message=发送邮件失败。
Source=System
StackTrace:
在 System.Net.Mail.SmtpClient.SendAsync(MailMessage message, Object userToken)
InnerException: System.InvalidOperationException
HResult=-2146233079
Message=现在无法开始异步操作。异步操作只能在异步处理程序或模块中开始,或在页生存期中的特定事件过程中开始。如果此异常在执行 Page 时发生,请确保 Page 标记为 <%@ Page Async="true" %>。
Source=System.Web
StackTrace:
在 System.Web.AspNetSynchronizationContext.OperationStarted()
在 System.ComponentModel.AsyncOperation.CreateOperation(Object userSuppliedState, SynchronizationContext syncContext)
在 System.Net.Mail.SmtpClient.SendAsync(MailMessage message, Object userToken)
InnerException:
...全文
648 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
q314045513 2016-11-29
  • 打赏
  • 举报
回复
正确方法: public async Task<ActionResult> Index() //首页视图 { await send(); .......... return View(); } public async Task<bool> send() //发送邮件 { .................... await Task.Run(() => { smtp.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback); // smtp.Send(myMail);//同步发送 smtp.SendAsync(myMail, userState); //异步发送 }); .................................... } private void SendCompletedCallback(object sender, System.ComponentModel.AsyncCompletedEventArgs e) //回调函数 { if (e.Error==null) //邮件发送成功 { //添加操作日志 } }
q314045513 2016-11-26
  • 打赏
  • 举报
回复
MVC Razer视图引擎 怎么加???新手
编程有钱人了 2016-11-26
  • 打赏
  • 举报
回复
在页面 头部加上 <%@ Page Async="true" %>。 就可以了

62,067

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧