使用G Suite Gmail账号无法发邮件,遇System.IO.IO连接异常求助
嘿,我看到你在用G Suite(现在叫Google Workspace)账号发送邮件时碰到了连接超时的问题,结合你的错误信息和代码,我整理了几个实用的排查和修复方向:
你的错误信息:
System.IO.IOException: connection: 连接尝试失败,因为连接方在一段时间后未正确响应,或者已建立的连接失败,因为连接的主机未能响应。无法从传输中读取数据。
你的代码:
MailMessage mail = new MailMessage(); mail.From = new MailAddress(_configuration["SenderMail"]); mail.To.Add(ToEmailId); mail.IsBodyHtml = true; mail.Subject = subject; mail.Body = "" + mailBody; SmtpClient smtpServer = new SmtpClient(_configuration["SMTPServer"], int.Parse(_configuration["SmtpPortNumber"])); //smtpServer.EnableSsl = true; smtpServer.UseDefaultCredentials = false; smtpServer.DeliveryMethod = SmtpDeliveryMethod.Network; smtpServer.Credentials = new System.Net.NetworkCredential(_configuration["SenderMail"], _configuration["SenderPassword"]); smtpServer.EnableSsl = true; smtpServer.Send(mail);
排查与修复方案
1. 先确认G Suite的SMTP基础配置是否正确
Google Workspace的SMTP参数是固定的,你得确保配置文件里的这两个值没写错:
SMTPServer必须是smtp.gmail.comSmtpPortNumber推荐用587(搭配STARTTLS加密,和你代码里的EnableSsl = true匹配),或者465(SSL加密)
如果端口用的是25,大概率会被网络服务商或Google拦截,别用这个端口。
2. 启用两步验证的话,必须用应用专用密码
如果你的G Suite账号开了两步验证(2FA),直接用账号密码当SenderPassword肯定会失败。得去生成一个应用专用密码:
- 登录你的Google Workspace账号,进入安全设置页面
- 在「登录Google」板块找到「应用专用密码」
- 生成一个专门给邮件发送用的密码,替换掉配置里的原密码
3. 检查网络和防火墙限制
这个错误90%是网络层面的问题:
- 先测试你的机器能不能连通Google的SMTP服务器,用PowerShell跑
Test-NetConnection smtp.gmail.com -Port 587,或者用telnet smtp.gmail.com 587(如果装了telnet),看能不能成功连接 - 如果是公司内网,可能需要找IT团队放行587或465端口的出站流量
- 要是用云服务器(比如AWS、阿里云),得检查安全组、防火墙规则,确保没把SMTP端口给封了
4. 延长SmtpClient的超时时间
默认的超时时间可能太短,导致还没建立好连接就超时了,你可以在代码里加一行延长超时:
smtpServer.Timeout = 15000; // 设置为15秒,根据你的网络情况调整
5. 长期方案:改用Gmail API发送邮件
如果SMTP方式一直踩坑,可以试试用Google的Gmail API来发邮件。这种方式不需要依赖SMTP端口,更稳定,还能避免各种网络限制。不过需要配置OAuth2认证,步骤稍微复杂一点,但长期用下来更省心。
内容的提问来源于stack exchange,提问作者arul pushpam
相关产品推荐
相关产品推荐

