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

发送用户确认邮件时触发SocketException数据库查找错误如何解决?

问题原因
  • 核心触发原因是SMTP服务器地址配置错误:你代码中填写的smtp@gmail.com是非法域名,Gmail官方SMTP服务器地址为smtp.gmail.com,你误将.写为@导致DNS解析失败,直接触发SocketException错误,上层调用随之抛出SmtpException发送失败异常。
  • 代码同时存在其他潜在问题:
    • 异步方法实现不规范:方法声明为SendEmailAsync,但内部调用的是同步SmtpClient.Send方法,未使用异步发送逻辑,会导致线程不必要阻塞。
    • 所用类已过时:.NET官方已将SmtpClient标记为弃用类,存在兼容风险,推荐使用更现代的MailKit库替代。
    • Gmail授权逻辑不符合现有规则:目前Gmail已不支持直接使用账号登录密码进行SMTP发信,需要配置两步验证后生成应用专用密码才能完成鉴权。
修复方案
  1. 首先修正SMTP服务器地址:将client.Host = "smtp@gmail.com"修改为client.Host = "smtp.gmail.com"。
  2. 修正异步方法实现,调整后可直接运行的参考代码如下:
public async Task SendEmailAsync(string toEmail, string subject, string message, bool isMessageHtml = false)
{
    using (var client = new SmtpClient())
    {
        var credentials = new NetworkCredential()
        {
            UserName = "你的Gmail前缀", // 不需要带@gmail.com
            Password = "你的Gmail应用专用密码"
        };

        client.Credentials = credentials;
        client.Host = "smtp.gmail.com";
        client.Port = 587;
        client.EnableSsl = true;

        using var emailMessage = new MailMessage()
        {
            To = { new MailAddress(toEmail) },
            From = new MailAddress("你的完整Gmail地址"), // 需要带@gmail.com
            Subject = subject,
            Body = message,
            IsBodyHtml = isMessageHtml
        };

        await client.SendMailAsync(emailMessage);
    }
}
  1. 完成Gmail授权配置:
    • 登录对应Gmail账号,在安全设置中开启两步验证
    • 找到「应用密码」入口,生成一个邮件场景的16位应用专用密码,替换代码中的密码字段即可
  2. 长期优化建议:将SmtpClient替换为MailKit库实现邮件发送,避免后续版本迭代带来的兼容问题。

内容的提问来源于stack exchange,提问作者Mahdi Salahinia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:39:02