You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MailKit连接Google SMTP服务器失败的问题求助

解决MailKit连接smtp.gmail.com超时的问题

问题重现

使用MailKit发送邮件时,调用client.ConnectAsync()连接smtp.gmail.com抛出超时异常,代码如下:

using MimeKit;
using MailKit.Net.Smtp;

public class EmailSender
{ 
    public async Task SendEmailAsync(string email, string subject, string message)
    {
        var emailMessage = new MimeMessage();
        var addressFrom = new MailboxAddress("username", "email");
        var addressTo = new MailboxAddress(string.Empty, email);

        emailMessage.From.Add(addressFrom);
        emailMessage.To.Add(addressTo);
        emailMessage.Subject = subject;
        emailMessage.Body = new TextPart(MimeKit.Text.TextFormat.Html)
        {
            Text = message,
        };

        using var client = new SmtpClient();

        await client.ConnectAsync("smtp.gmail.com", 465, useSsl: true);

        client.Authenticate(addressFrom.Address, "password");
        await client.SendAsync(emailMessage);
        await client.DisconnectAsync(true);
    }
}

抛出异常:

System.Net.Sockets.SocketException: 'A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.'

已尝试ping通服务器、切换587端口使用TLS连接,问题仍存在。


解决方案

1. 检查Gmail账户安全配置

  • 启用应用专用密码:如果你的Gmail账户开启了两步验证,必须使用应用专用密码替代普通登录密码。登录Google账户 -> 安全 -> 应用专用密码,生成对应密码替换代码中的"password"。
  • 解除账户锁定:如果Google检测到异常登录行为,会临时锁定账户。登录Gmail网页版,检查是否有安全提醒并完成验证解锁。
  • (旧版兼容)允许不太安全的应用访问:若未开启两步验证,可在Google账户安全设置中开启"不太安全的应用访问"(注:此选项已逐步被Google淘汰,优先推荐应用专用密码)。

2. 排查网络限制

  • 本地防火墙/杀毒软件可能拦截SMTP端口(465/587),暂时关闭防火墙或添加MailKit程序的出站规则。
  • 公司网络、VPN可能限制了SMTP流量,尝试切换到手机热点等其他网络测试。
  • 若使用代理,需在SmtpClient中配置代理信息:
    client.Proxy = new WebProxy("代理地址", 代理端口);
    

3. 优化MailKit代码

  • 将同步的Authenticate改为异步调用AuthenticateAsync,保持代码异步一致性。
  • 添加连接超时时间,避免无限等待:

修改后的完整代码:

using MimeKit;
using MailKit.Net.Smtp;

public class EmailSender
{ 
    public async Task SendEmailAsync(string email, string subject, string message)
    {
        var emailMessage = new MimeMessage();
        var addressFrom = new MailboxAddress("username", "你的Gmail邮箱");
        var addressTo = new MailboxAddress(string.Empty, email);

        emailMessage.From.Add(addressFrom);
        emailMessage.To.Add(addressTo);
        emailMessage.Subject = subject;
        emailMessage.Body = new TextPart(MimeKit.Text.TextFormat.Html)
        {
            Text = message,
        };

        using var client = new SmtpClient();
        // 设置30秒超时
        client.Timeout = 30000;

        await client.ConnectAsync("smtp.gmail.com", 465, useSsl: true);
        // 使用异步验证
        await client.AuthenticateAsync(addressFrom.Address, "你的应用专用密码");
        
        await client.SendAsync(emailMessage);
        await client.DisconnectAsync(true);
    }
}

内容的提问来源于stack exchange,提问作者Oleksandr Pravosud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:35:26