C#:发送一封带有附件的邮件

发布于:2025-06-08 ⋅ 阅读:(22) ⋅ 点赞:(0)

参阅:C#基于SMTP的邮件发送

以下是使用C#发送带附件邮件的示例代码。该程序使用System.Net.Mail命名空间,支持SMTP协议发送邮件:

// SendEmail.cs
using System;
using System.Net;
using System.Net.Mail;
using System.IO;

class EmailSender
{
    static void Main()
    {
        // 配置SMTP服务器信息(以QQ邮箱为例)
        string smtpServer = "smtp.qq.com";
        int smtpPort = 587;  // QQ邮箱使用587端口
        bool enableSsl = true;
        
        // 发件人邮箱和密码(使用授权码而非登录密码)
        string fromEmail = "your_email@qq.com";
        string password = "your_authorization_code"; // 在邮箱设置中生成的授权码
        
        // 收件人邮箱
        string toEmail = "recipient@example.com";
        
        try
        {
            // 创建邮件对象
            using (MailMessage mail = new MailMessage())
            {
                mail.From = new MailAddress(fromEmail);
                mail.To.Add(toEmail);
                mail.Subject = "测试带附件的邮件";
                mail.Body = "这是一封通过C#发送的测试邮件,包含附件。";
                mail.IsBodyHtml = false;  // 纯文本邮件

                // 添加附件(修改为实际文件绝对路径)
                string filePath = @"C:\test\example.pdf";
                if (File.Exists(filePath))
                {
                    Attachment attachment = new Attachment(filePath);
                    mail.Attachments.Add(attachment);
                }
                else
                {
                    Console.WriteLine("文件不存在: "+ filePath);
                    return;
                }

                // 配置SMTP客户端
                using (SmtpClient smtpClient = new SmtpClient(smtpServer, smtpPort))
                {
                    smtpClient.Credentials = new NetworkCredential(fromEmail, password);
                    smtpClient.EnableSsl = enableSsl;
                    
                    // 发送邮件
                    smtpClient.Send(mail);
                }
            }
            Console.WriteLine("邮件发送成功!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("发送失败: "+ ex.Message);
        }
    }
}

where csc
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
编译 csc SendEmail.cs
运行 SendEmail.exe

使用说明:

  1. 邮箱配置

    • your_email@qq.com替换为你的发件邮箱
    • your_authorization_code替换为邮箱的[SMTP授权码](非登录密码)
    • 常见邮箱SMTP设置:
      邮箱服务 SMTP服务器 端口 SSL
      QQ smtp.qq.com 587
      163 smtp.163.com 465/994
      Gmail smtp.gmail.com 587
  2. 附件设置

    • 修改filePath变量为本地文件的真实路径
    • 支持添加多个附件(重复Attachments.Add即可)
  3. 安全提示

    • 不要在代码中明文存储密码,建议使用环境变量或配置文件
    • 首次使用需在邮箱设置中开启SMTP服务:
      • QQ邮箱:设置 → 账户 → POP3/SMTP服务 → 开启
      • 163邮箱:设置 → POP3/SMTP/IMAP → 开启SMTP

常见问题解决:

  1. 认证失败

    • 确认使用授权码而非邮箱密码
    • 检查是否开启SMTP服务
  2. 超时错误

    • 关闭防火墙/杀毒软件
    • 尝试更换端口(587/465/25)
  3. 附件大小限制

    • 普通邮箱附件上限通常为20-50MB
    • 大文件建议使用云存储分享链接

注意:Gmail可能需要额外步骤(允许安全性较低的应用访问)或使用OAuth2认证,具体请参考各邮箱服务商的开发者文档。


网站公告

今日签到

点亮在社区的每一天
去签到