C#使用SmtpClient发送邮件遇SMTP认证/安全连接错误求助
解决SMTP认证失败问题
你的代码中存在核心配置错误,导致SMTP服务器拒绝认证:
关键错误修正
smtpClient.UseDefaultCredentials = true会强制使用系统默认凭证,直接覆盖你后续设置的邮箱账号和密码。必须先将其设为false,再配置自定义凭证。
同时,mail.com的587端口要求SSL加密连接,所以EnableSsl必须设为true。
修改后的核心配置代码:
// Configure SMTP client SmtpClient smtpClient = new SmtpClient("smtp.mail.com", 587); smtpClient.UseDefaultCredentials = false; // 先禁用默认凭证 smtpClient.Credentials = new NetworkCredential(email, password); smtpClient.EnableSsl = true; // 开启SSL加密
完整修正后的SendEmailAsync方法
static async Task SendEmailAsync(string recipientEmail, string subject, string body) { // configure sending email address and password string email = "********@mail.com"; string password = "********"; // 确保是mail.com的应用专用密码 // Create email message MailMessage message = new MailMessage(); message.From = new MailAddress(email); // 保持和登录邮箱一致 message.To.Add(recipientEmail); message.Subject = subject; message.Body = body; // Configure SMTP client SmtpClient smtpClient = new SmtpClient("smtp.mail.com", 587); smtpClient.UseDefaultCredentials = false; smtpClient.Credentials = new NetworkCredential(email,password); smtpClient.EnableSsl = true; await smtpClient.SendMailAsync(message); }
额外排查点
- 确认应用专用密码完全正确,复制时没有遗漏或多余字符
- 确保发件人邮箱(
message.From)和登录邮箱(email变量)完全一致 - 检查mail.com账户是否已开启SMTP服务(部分邮箱需在账户设置中手动启用)
- 验证本地防火墙或杀毒软件未拦截SMTP(587端口)的出站连接
内容的提问来源于stack exchange,提问作者UnknownDonut
相关产品推荐
相关产品推荐

