.NET Core中Gmail的SMTP邮件配置无法发送邮件问题排查
解决Gmail SMTP配置无法发送邮件的问题
我帮你梳理下当前配置里的问题,以及对应的修正方案,这些都是Gmail SMTP常见的坑:
1. 最关键的问题:密码不能用普通账号密码
Gmail早在几年前就禁用了直接使用账号密码登录SMTP服务(除非你开启了已被淘汰的"不太安全的应用"选项,现在这个选项已经彻底移除了)。你现在填的UsernamePassword是普通密码,肯定会认证失败。
解决办法:
- 首先给你的Google账号开启两步验证(2FA)
- 登录Google账号的安全设置页面,生成一个应用专用密码(这个密码是专门给第三方邮件客户端/服务用的,和你的账号密码独立)
- 把配置里的
UsernamePassword替换成这个生成的应用专用密码
2. FromEmail格式错误
你的配置里FromEmail是"info",这不是一个有效的邮箱地址,Gmail会拒绝这种格式的发件人。你需要填完整的邮箱地址,比如和UsernameEmail一致的"example@gmail.com",如果想显示别名,可以用"Info <example@gmail.com>"这种格式。
3. 端口配置的细节(代码层面需配合)
虽然你填的端口587是正确的,但在.NET Core的邮件发送代码里,必须确保启用STARTTLS加密。如果用的是SmtpClient(注意这个类已经过时,更推荐用MailKit),要设置EnableSsl = true;如果用MailKit,要指定SecureSocketOptions.StartTls。
4. 冗余配置(非致命,但可优化)
配置里的SecondayDomain和SecondaryPort是Outlook的SMTP信息,如果你当前只用Gmail发送邮件,这些配置暂时没用,但不会影响发送,只是可以留着备用。
修正后的配置示例
"EmailSettings": { "PrimaryDomain": "smtp.gmail.com", "PrimaryPort": 587, // 建议改成数字类型,不用字符串 "SecondayDomain": "smtp.live.com", "SecondaryPort": 587, "UsernameEmail": "example@gmail.com", "UsernamePassword": "你的应用专用密码", "FromEmail": "example@gmail.com", // 或者 "Info <example@gmail.com>" "ToEmail": "", "CcEmail": "" }
推荐的邮件发送代码(用MailKit,替代过时的SmtpClient)
using MailKit.Net.Smtp; using MimeKit; var message = new MimeMessage(); // 发件人(和配置里的FromEmail对应) message.From.Add(new MailboxAddress("Info", "example@gmail.com")); // 收件人(替换成实际地址) message.To.Add(new MailboxAddress("收件人姓名", "recipient@example.com")); message.Subject = "测试邮件"; message.Body = new TextPart("plain") { Text = "这是从.NET Core通过Gmail SMTP发送的测试邮件" }; using (var client = new SmtpClient()) { // 连接SMTP服务器,指定STARTTLS加密 await client.ConnectAsync("smtp.gmail.com", 587, SecureSocketOptions.StartTls); // 用应用专用密码认证 await client.AuthenticateAsync("example@gmail.com", "你的应用专用密码"); // 发送邮件 await client.SendAsync(message); // 断开连接 await client.DisconnectAsync(true); }
如果还是无法发送,建议捕获代码里的异常,查看具体的错误信息(比如认证失败、连接超时等),这会帮你更快定位问题。另外,也可以检查Google账号的安全日志,看看有没有被阻止的登录尝试。
内容的提问来源于stack exchange,提问作者Cemal Erdem
相关产品推荐
相关产品推荐

