MVC发送邮件报错求助:SMTP 5.7.1认证失败
解决SMTP认证失败的问题
这个错误的核心是凭证设置顺序错误,再加上Yahoo邮箱当前的安全机制限制,咱们一步步来修复:
1. 最关键的代码错误:凭证被覆盖
你代码里先设置了SmtpServer.Credentials,随后又写了SmtpServer.UseDefaultCredentials = true;——这会直接覆盖你自定义的邮箱凭证,系统会尝试用当前Windows账户的默认凭证登录SMTP服务器,自然会触发认证失败。
正确的操作顺序是:先把UseDefaultCredentials设为false,再设置自定义的Credentials。
2. 适配Yahoo邮箱的安全要求
现在Yahoo邮箱如果默认开启了两步验证,普通登录密码无法用于第三方SMTP客户端,你需要生成一个应用专用密码:
- 登录Yahoo账户,进入「账户安全」设置页
- 找到「应用密码」选项(需先开启两步验证)
- 生成一个用于SMTP服务的应用密码,替换代码里的
"password"
修正后的完整代码
// Plug in your email service here to send an email. MailMessage mail = new MailMessage(); SmtpClient SmtpServer = new SmtpClient("smtp.mail.yahoo.com"); mail.From = new MailAddress("elahi2mahdi@yahoo.com", "Hello"); mail.To.Add(message.Destination); mail.Subject = message.Subject; mail.Body = message.Body; mail.IsBodyHtml = true; // 调整凭证设置顺序,先禁用默认凭证 SmtpServer.UseDefaultCredentials = false; SmtpServer.Credentials = new System.Net.NetworkCredential("elahi2mahdi@yahoo.com", "你的应用专用密码"); SmtpServer.Port = 587; SmtpServer.EnableSsl = true; return SmtpServer.SendMailAsync(mail);
额外检查项
- 确认你的Yahoo邮箱账户已开启SMTP服务(大部分默认开启,可在账户设置中确认)
- 如果未开启两步验证,可暂时关闭邮箱的「安全登录」限制测试发送(不推荐长期关闭,建议优先使用应用密码)
内容的提问来源于stack exchange,提问作者mahdi_elahitest
相关产品推荐
相关产品推荐

