使用MimeKit发邮件异常:Home控制器失败,BlogData控制器正常
问题分析与解决方案
核心问题:收件邮箱地址拼写错误
你收到的511 sorry, no mailbox here by that name错误,本质是目标收件邮箱不存在。查看Home控制器的代码:
Message m = new Message(new List<string> { "ans1234@gamil.com" }, ...);
这里把gmail.com误写成了gamil.com(少了字母r),这个域名下没有对应的合法邮箱账号,因此邮件服务器返回地址不存在的错误。
而BlogData控制器能正常发送,必然是它使用了正确的收件地址(比如ans1234@gmail.com),所以未触发该错误。
修复步骤
- 修正收件地址拼写:
Message m = new Message(new List<string> { "ans1234@gmail.com" }, "Someone messaged from KGS", string.Format("Name: {0}, Email: {1}, Message: {2}", emailMessage.Name, emailMessage.Email, emailMessage.Message), files);
- 完善异步方法调用:当前代码直接调用异步方法却未等待,可能导致异常无法被正确捕获,需补充
await并修改方法签名:
[HttpPost] public async Task<IActionResult> SendEmail([Bind("Name,Email,Message")] SingleEmailMessage emailMessage) { try { var files = Request.Form.Files.Any() ? Request.Form.Files : new FormFileCollection(); Message m = new Message(new List<string> { "ans1234@gmail.com" }, "Someone messaged from KGS", string.Format("Name: {0}, Email: {1}, Message: {2}", emailMessage.Name, emailMessage.Email, emailMessage.Message), files); await _emailSender.SendEmailWithAttchmentsAsync(m); } catch(Exception ex) { return Json(new { data = "Error" }); } return Json(new { data = "DONE" }); }
额外验证点
- 调试时确认
_emailConfig的各项参数(用户名、密码、SMTP服务器)已正确读取配置 - 检查Gmail应用密码是否有效,未被账号安全策略撤销
内容的提问来源于stack exchange,提问作者nikhil
相关产品推荐
相关产品推荐

