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

我的C# EmailSender类无法发送邮件,代码是否正确?

邮件发送失败问题排查与代码检查

我尝试编写了一个可用的C# EmailSender类,但测试发送邮件时,程序等待约一分钟后提示无连接,邮件未发送。问题可能出在代码或SMTP服务器配置上,烦请帮我检查代码是否正确?

class EmailSender
{
    static public string SendEmail(string subj, string text, string emailTo)
    {
        try
        {
            MailAddress to = new MailAddress(emailTo, "m");
            MailAddress from = new MailAddress("email address from which I send email");

            MailMessage message = new MailMessage(from, to);
            message.Subject = subj;
            message.Body = text;
            message.IsBodyHtml = true;
            SmtpClient mySmtpClient = new SmtpClient("some smtp server", 587);
            mySmtpClient.UseDefaultCredentials = false;
            mySmtpClient.EnableSsl = true;
            mySmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            mySmtpClient.Credentials = new NetworkCredential("email address from which I send email", password: "bxzvxfobjudqdmyh");

            mySmtpClient.Send(message);
            return null;
        }
        catch (Exception ex)
        {
            return "Error occured. " + ex.ToString();
        }
    }
}

我几乎看完了所有关于C#发送邮件的视频,但问题仍未解决。


代码与配置排查要点:

  • 替换占位符SMTP地址:代码中的"some smtp server"是占位符,必须替换为对应发件邮箱服务商的实际SMTP地址,比如QQ邮箱用smtp.qq.com,163邮箱用smtp.163.com,且要保证发件邮箱与SMTP服务器归属一致。
  • 端口与SSL适配:端口587通常对应STARTTLS协议,部分服务商可能要求使用465端口(SSL直连),可以尝试切换端口并确认EnableSsl的设置是否符合服务商要求。
  • 授权码有效性:确认你使用的密码(bxzvxfobjudqdmyh)是发件邮箱的第三方授权码(目前主流邮箱均禁用直接使用登录密码发送邮件),且授权码未过期或被撤销。
  • 网络连通性检查:测试本地网络是否能访问SMTP服务器的对应端口,比如用命令telnet smtp.xxx.com 587(替换为你的SMTP地址和端口),如果无法连通,可能是防火墙、代理或网络运营商封禁了端口。
  • 超时设置优化:可以添加mySmtpClient.Timeout = 10000;(设置10秒超时),避免长时间等待,更快获取错误信息。
  • 代码顺序确认:你代码中先设置UseDefaultCredentials = false再赋值Credentials的顺序是正确的,若顺序颠倒会导致凭证不生效,这点无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:57:27