C#使用System.Net.Mail发送邮件:三种配置方式详解

顾星河
顾星河
发布时间:2026-10-14| 5人浏览过
原创

在C#开发中,System.Net.Mail 命名空间提供了发送电子邮件的标准接口。本文将详细介绍三种常见的邮件发送场景:利用本地localhost服务测试、连接普通SMTP服务器进行常规收发,以及配置EnableSsl和特定端口以支持Gmail等安全SMTP服务。

一、准备环境与方法概述

C#发送邮件主要依赖 System.Net.Mail.SmtpClient 类。根据发送场景不同,配置策略有所区别:

  • Localhost模式:适用于内部局域网或本地测试,无需外部身份验证。
  • 普通SMTP模式:需指定外部SMTP主机地址(如企业邮箱),并提供用户名和密码认证。
  • SSL SMTP模式:针对要求安全连接的现代邮箱服务(如Gmail),需启用SSL协议并设置特定端口(通常为587)。

二、通过Localhost发送

此方法适合在开发环境中模拟邮件发送,不涉及外部网络认证,直接通过本地Mail Transfer Agent (MTA)处理。

第1步:构建邮件消息对象

初始化 MailMessage,设置收件人、抄送人、发件人信息及正文内容。注意标题和内容的编码格式应保持一致,推荐UTF-8以防止乱码。

public void SendMailLocalhost()
{
    System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
    
    // 添加收件人(支持多人的Add操作)
    msg.To.Add("a@a.com");
    msg.To.Add("b@b.com");
    
    // 添加抄送人
    if (!string.IsNullOrEmpty("c@c.com"))
        msg.CC.Add("c@c.com");
    
    // 设置发件人信息:地址、显示名称、编码
    msg.From = new MailAddress("sender@example.com", "SenderName", System.Text.Encoding.UTF8);
    
    // 设置主题与正文
    msg.Subject = "这是测试邮件";
    msg.SubjectEncoding = System.Text.Encoding.UTF8;
    msg.Body = "邮件内容";
    msg.BodyEncoding = System.Text.Encoding.UTF8;
    
    // 设置为纯文本(若为HTML内容需设为true)
    msg.IsBodyHtml = false;
    
    // 设置优先级
    msg.Priority = MailPriority.High;

    SmtpClient client = new SmtpClient();
    client.Host = "localhost"; // 关键点:指向本地主机
    
    object userState = msg;
    try
    {
        // 使用异步发送,也可用同步 client.Send(msg)
        client.SendAsync(msg, userState);
        MessageBox.Show("发送成功");
    }
    catch (System.Net.Mail.SmtpException ex)
    {
        MessageBox.Show(ex.Message, "发送邮件出错");
    }
}

三、通过普通SMTP发送

大多数企业邮箱或非Gmail服务商(如Outlook、QQ邮箱未开启SSL时等)采用标准SMTP协议。需要配置 Host 和 Credentials。

第2步:配置认证与非SSL连接

创建 NetworkCredential 对象填入账号密码,赋值给 SmtpClient.Credentials。此时无需开启SSL(默认false),使用默认端口25。

public void SendMailUseNormalSmtp()
{
    System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
    
    msg.To.Add("recipient@example.com");
    msg.From = new MailAddress("account@provider.com", "User", System.Text.Encoding.UTF8);
    msg.Subject = "通过普通SMTP发送";
    msg.Body = "这是一封常规测试邮件";
    msg.IsBodyHtml = false;

    SmtpClient client = new SmtpClient();
    
    // 设置认证凭证
    client.Credentials = new System.Net.NetworkCredential(
        "account@provider.com", 
        "your_password"
    );
    
    // 设置SMTP主机地址
    client.Host = "smtp.provider.com";
    
    try
    {
        client.Send(msg);
        Console.WriteLine("发送成功");
    }
    catch (System.Net.Mail.SmtpException ex)
    {
        Console.WriteLine($"错误: {ex.Message}");
    }
}

四、通过SSL加密SMTP发送

Gmail等主流云服务强制要求加密传输。必须设置 EnableSsl = true 并使用正确端口(Gmail通常使用587用于STARTTLS或465用于implicit SSL,代码示例中以587为例)。

第3步:配置SSL与安全端口

除了基本的账号密码外,关键步骤是启用SSL并确保Host和Port匹配服务商规范。

public void SendMailUseGmailSsl()
{
    System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
    
    msg.To.Add("target@example.com");
    // 注意:发件人地址必须与Credentials中的邮箱一致
    msg.From = new MailAddress("myid@gmail.com", "My Name", System.Text.Encoding.UTF8);
    msg.Subject = "Gmail SSL测试";
    msg.Body = "通过SSL加密的安全邮件";
    msg.IsBodyHtml = false;

    SmtpClient client = new SmtpClient();
    
    // Gmail凭据
    client.Credentials = new System.Net.NetworkCredential(
        "myid@gmail.com",
        "app_password_or_account_password"
    );
    
    // 配置Gmail专属参数
    client.Port = 587;               // Gmail常用端口
    client.Host = "smtp.gmail.com";  // Gmail SMTP服务器
    client.EnableSsl = true;         // 开启SSL加密
    
    try
    {
        client.Send(msg);
        Console.WriteLine("Gmail发送成功");
    }
    catch (System.Net.Mail.SmtpException ex)
    {
        Console.WriteLine($"SSL发送失败: {ex.Message}");
    }
}

五、排错与注意事项

在实际部署中,邮件发送失败常见原因如下:

  1. 端口限制:部分云服务器(如AWS、阿里云轻量级应用服务器)默认封锁了25端口。若使用普通SMTP报错“无法连接服务器”,请检查云防火墙规则或改用465/587端口。
  2. 认证失败:确保 NetworkCredential 的用户名与 msg.From 的发件人邮箱完全一致。部分服务商(如Gmail)要求开启“应用专用密码”或在安全性较低的应用访问权限中授权。
  3. 超时问题:若在慢速网络下使用 client.Send() 导致程序挂起,建议保持 SendAsync() 或使用 Timeout 属性优化。
以上就是C#实现发送邮件的详细技术说明,更多关于C#网络编程的资料请关注本站其它相关文章!
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。