在ASP.Net中使用Yahoo发送邮件遇到问题求助
问题描述
家中运行搭载IIS 10和.NET 4.8的Web服务器,通过C# .NET调用Yahoo SMTP服务发送邮件时始终失败。执行代码后网页加载约30秒,返回“SMTP Server returned an invalid response”错误,已耗时4小时未解决。
问题代码
using (MailMessage mm = new MailMessage("uneviesystems@yahoo.com", "MaxOvrdrv007@yahoo.ca")) { mm.Subject = "test"; mm.Body = "testing maudine..."; mm.IsBodyHtml = false; SmtpClient smtp = new SmtpClient(); smtp.Host = "smtp.mail.yahoo.com"; smtp.EnableSsl = true; NetworkCredential NetworkCred = new NetworkCredential("uneviesystems@yahoo.com", "*******"); smtp.UseDefaultCredentials = true; smtp.Credentials = NetworkCred; smtp.Port = 465; try { smtp.Send(mm); } catch(SmtpException ex) { string p = ""; } }
解决方案
- 修正凭证配置顺序:
UseDefaultCredentials必须先设为false,再设置自定义Credentials。若先设为true,后续的专属凭证会被系统默认凭证覆盖,导致认证失败。修改代码:smtp.UseDefaultCredentials = false; smtp.Credentials = NetworkCred; - 替换为Yahoo应用密码:Yahoo目前要求开启两步验证的账户使用应用密码替代原账户密码登录SMTP服务。若你的账户开启了两步验证,需在Yahoo账户设置中生成专属应用密码,替换代码中的
*******。 - 切换SMTP端口测试:端口465为SMTPS协议,部分环境下.NET的
SmtpClient对其支持存在兼容性问题,可尝试改用端口587(STARTTLS协议),保持EnableSsl = true不变。 - 完善异常排查逻辑:当前catch块未记录任何错误信息,建议修改为输出详细异常内容,方便定位问题:
catch(SmtpException ex) { // 可将错误写入日志或返回至页面 string errorMsg = $"SMTP错误:{ex.Message},状态码:{ex.StatusCode}"; // 示例:Response.Write(errorMsg); } catch(Exception ex) { string errorMsg = $"通用错误:{ex.Message}"; // 输出错误信息 }
内容的提问来源于stack exchange,提问作者MaxOvrdrv
相关产品推荐
相关产品推荐

