如何在C# Web API中配置info@*****.com账户发邮件?代码排查
你的C# SMTP配置代码里的问题及修正方案
让我帮你梳理下这段代码里存在的几个关键问题,以及对应的修正方法:
存在的错误点
- 端口与SSL配置不匹配:你开启了
EnableSsl = true但使用了25端口——绝大多数邮件服务商的SSL加密端口是465(SSL直连)或587(STARTTLS加密),25端口通常用于非加密传输或需要手动切换STARTTLS,直接搭配EnableSsl=true会导致连接失败。 - 凭据设置错误:
UseDefaultCredentials = true会让程序使用当前运行进程的系统账户凭据,而不是你想要的info@*****.com账户。要指定目标邮箱,必须显式设置专属凭据。 - SmtpClient过时警告:.NET Framework中的
SmtpClient已被标记为过时,.NET Core/.NET 5+版本官方更推荐使用功能更完善的第三方库(比如MailKit)。
修正后的原生SmtpClient代码
如果坚持使用原生类库,可以这样调整:
using System.Net; using System.Net.Mail; // 初始化SMTP客户端 var smtpClient = new SmtpClient { Host = "173.***.**.**", // 替换为对应服务商的SSL端口,比如587或465 Port = 587, DeliveryMethod = SmtpDeliveryMethod.Network, // 必须先设为false,再设置自定义凭据 UseDefaultCredentials = false, // 填入你的邮箱账户和密码(如果是第三方邮箱,可能需要用应用专用密码) Credentials = new NetworkCredential("info@*****.com", "你的邮箱密码"), EnableSsl = true }; // 构建邮件内容 var mail = new MailMessage { From = new MailAddress("info@*****.com"), Subject = "测试邮件", Body = "这是通过配置好的账户发送的测试邮件" }; mail.To.Add("目标收件人邮箱"); // 发送邮件 try { smtpClient.Send(mail); Console.WriteLine("邮件发送成功!"); } catch (Exception ex) { Console.WriteLine($"发送失败:{ex.Message}"); }
更推荐的.NET 6+方案:使用MailKit
因为原生SmtpClient已过时,MailKit是官方推荐的替代方案,稳定性和兼容性更好。先通过NuGet安装MailKit包,然后使用以下代码:
using MailKit.Net.Smtp; using MimeKit; // 构建MIME邮件 var message = new MimeMessage(); message.From.Add(new MailboxAddress("发件人名称", "info@*****.com")); message.To.Add(new MailboxAddress("收件人名称", "目标收件人邮箱")); message.Subject = "测试邮件"; message.Body = new TextPart("plain") { Text = "这是用MailKit发送的测试邮件" }; // 发送邮件 using (var client = new SmtpClient()) { // 连接到SMTP服务器,最后一个参数表示启用SSL client.Connect("173.***.**.**", 587, true); // 验证邮箱账户 client.Authenticate("info@*****.com", "你的邮箱密码"); // 发送邮件 client.Send(message); // 断开连接 client.Disconnect(true); }
内容的提问来源于stack exchange,提问作者bhavsar japan
相关产品推荐
相关产品推荐

