C# 实现发送邮件功能(SMTP)

简介: 通过SMTP协议实现邮件发送,支持文本与附件,需配置邮箱SMTP信息(如QQ邮箱授权码)。示例代码展示C#中如何使用SmtpClient发送邮件,适用于QQ、163、Gmail等主流邮箱服务。

通过 SMTP 协议发送邮件,支持文本内容、附件,需配置邮箱 SMTP 服务器信息。

案例:邮件发送工具

using System.Net;
using System.Net.Mail;
public class EmailSender
{
    // 发送邮件(支持附件)
    public static bool SendEmail(string smtpServer, int smtpPort, string username, string password, 
                                 string toEmail, string subject, string body, string[] attachments = null)
    {
        try
        {
            // 创建邮件消息
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress(username); // 发件人邮箱
            mail.To.Add(toEmail); // 收件人邮箱
            mail.Subject = subject; // 邮件主题
            mail.Body = body; // 邮件内容
            mail.IsBodyHtml = false; // 是否为HTML格式
            // 添加附件
            if (attachments != null && attachments.Length > 0)
            {
                foreach (string filePath in attachments)
                {
                    if (File.Exists(filePath))
                    {
                        mail.Attachments.Add(new Attachment(filePath));
                    }
                    else
                    {
                        Console.WriteLine($"附件不存在:{filePath}");
                    }
                }
            }
            // 配置SMTP客户端
            SmtpClient smtpClient = new SmtpClient(smtpServer, smtpPort);
            smtpClient.Credentials = new NetworkCredential(username, password); // 邮箱账号密码(或授权码)
            smtpClient.EnableSsl = true; // 启用SSL加密(多数SMTP服务器要求)
            smtpClient.Timeout = 5000; // 超时时间
            // 发送邮件
            smtpClient.Send(mail);
            Console.WriteLine("邮件发送成功!");
            return true;
        }
        catch (Exception ex)
        {
            Console.WriteLine($"邮件发送失败:{ex.Message}");
            return false;
        }
    }
    public static void Main(string[] args)
    {
        // 配置SMTP信息(以QQ邮箱为例)
        string smtpServer = "smtp.qq.com";
        int smtpPort = 587;
        string username = "your-qq-email@qq.com"; // 你的QQ邮箱
        string password = "your-authorization-code"; // QQ邮箱授权码(不是登录密码)
        string toEmail = "recipient@example.com"; // 收件人邮箱
        string subject = "C# 邮件发送测试";
        string body = "这是使用C# SMTP发送的测试邮件!";
        string[] attachments = new string[] { @"C:\Temp\test.txt" }; // 附件路径(可选)
        // 发送邮件
        SendEmail(smtpServer, smtpPort, username, password, toEmail, subject, body, attachments);
    }
}

注意:

  • QQ 邮箱需开启 SMTP 服务并获取授权码(设置→账户→开启 POP3/SMTP 服务);
  • 其他邮箱(如 163、Gmail)需对应配置 SMTP 服务器和端口。
相关文章
|
2天前
|
安全 C#
C# 泛型:实现类型安全的通用代码
泛型通过类型参数(如T)实现类型通用性,可定义不指定具体类型的类或方法,使用时再确定类型。示例中,Swap<T>方法可交换任意同类型变量,List<T>集合避免装箱拆箱,提升性能与安全。
|
2天前
|
C#
C# 字符串操作:常用方法汇总(含案例)
C# 提供丰富的字符串操作方法,如拼接、截取、替换和判断等。本文通过工具类案例演示如何高效处理字符串,提升开发效率与代码可读性。
|
2天前
|
C#
C# 日期时间操作:格式化与计算
DateTime类用于处理日期时间操作,支持格式化输出、加减计算及获取特定日期(如本月第一天)。示例代码展示了常用功能:格式化、计算日期差、增减天数等,便于高效处理时间数据。
|
2天前
|
C#
C# 继承:复用父类功能的核心技巧
C# 中通过“:”实现继承,子类可复用并重写父类的虚方法。Student 继承 Person,重写 Introduce 方法,既调用父类逻辑,又扩展个性行为,体现多态特性。
|
2天前
|
C#
C# 文件操作:读取与写入文本文件
`File`类提供文件操作静态方法,适合快速读写;大文件推荐使用`StreamReader/StreamWriter`以降低内存占用。示例展示了文本文件的写入、追加与读取操作,支持自动创建目录,建议处理路径时注意权限并优先使用相对路径。
|
2天前
|
C#
C# 异常处理:try-catch-finally 避免程序崩溃
异常处理用于捕获运行时错误(如空引用、文件不存在),确保程序稳定。通过 `try` 包裹可能出错的代码,`catch` 捕获并处理异常,`finally` 确保资源释放等操作始终执行,提升代码健壮性。
|
2天前
|
C# 数据安全/隐私保护
C# 正则表达式:快速匹配与验证
正则表达式用于字符串模式匹配,如手机号、邮箱、密码验证等。C# 通过 `System.Text.RegularExpressions` 命名空间中的 `Regex` 类实现。本文示例展示了使用 `RegexHelper` 工具类进行常见验证:`IsPhoneNumber` 验证中国大陆手机号(1开头,共11位);`IsEmail` 校验邮箱格式;`IsValidPassword` 判断密码是否包含字母和数字且长度为8-20位;`ExtractNumbers` 提取字符串中所有数字。代码简洁高效,适用于数据校验与文本处理场景。
|
2天前
|
JSON C# 数据格式
C# JSON 序列化与反序列化:Newtonsoft.Json 用法
JSON是前后端交互常用格式,Newtonsoft.Json(Json.NET)是C#中最流行的JSON处理库。本文介绍如何使用它实现对象与JSON字符串的序列化和反序列化,并提供封装工具类及调用示例,便于在项目中快速集成与使用。
|
2天前
|
存储 缓存 安全
C# 字典(Dictionary):键值对存储的高效用法
`Dictionary<TKey, TValue>` 是键唯一且支持快速查找(O(1))的键值对集合,适用于存储映射关系。可通过 `Add` 添加、`TryGetValue` 安全获取、`Remove` 删除元素,遍历使用 `foreach`,建议优先使用 `TryGetValue` 提升性能。
|
2天前
|
C#
C# 枚举(Enum):规范常量定义
枚举用于定义命名常量,提升代码可读性与维护性。示例中定义订单状态枚举,演示赋值、转换、解析及遍历操作,避免使用魔法数字,使逻辑更清晰易懂。

热门文章

最新文章