C# 实现邮件发送源码(支持附件)

C#邮件发送,支持发送带附件的邮件

源码

csharp 复制代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Text;

namespace EmailSenderApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("===== C# 邮件发送程序 =====");
            Console.WriteLine("支持文本/HTML内容和附件发送\n");

            try
            {
                // 1. 获取用户输入
                var emailConfig = GetEmailConfiguration();
                var recipients = GetRecipients();
                var subject = GetInput("邮件主题: ");
                var body = GetInput("邮件内容 (HTML格式请注明): ");
                bool isHtml = body.Contains("<html>") || body.Contains("<body>") || 
                             body.Contains("<div>") || body.ToLower().Contains("html");
                
                var attachments = GetAttachments();

                // 2. 发送邮件
                SendEmail(emailConfig, recipients, subject, body, isHtml, attachments);
                
                Console.WriteLine("\n邮件发送成功!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"\n错误: {ex.Message}");
                Console.WriteLine($"详细信息: {ex.InnerException?.Message}");
            }
            finally
            {
                Console.WriteLine("\n按任意键退出...");
                Console.ReadKey();
            }
        }

        /// <summary>
        /// 获取邮件配置信息
        /// </summary>
        static EmailConfig GetEmailConfiguration()
        {
            Console.WriteLine("===== 发件人配置 =====");
            return new EmailConfig
            {
                SenderEmail = GetInput("发件人邮箱: "),
                SenderName = GetInput("发件人名称: ", "发件人"),
                Password = GetPassword("发件人密码: "),
                SmtpServer = GetInput("SMTP服务器 (如: smtp.qq.com): "),
                Port = int.Parse(GetInput("SMTP端口 (如: 587): ", "587")),
                EnableSsl = bool.Parse(GetInput("启用SSL (true/false): ", "true"))
            };
        }

        /// <summary>
        /// 获取收件人列表
        /// </summary>
        static List<string> GetRecipients()
        {
            Console.WriteLine("\n===== 收件人配置 =====");
            var recipients = new List<string>();
            string input;
            do
            {
                input = GetInput("收件人邮箱 (输入空行结束): ");
                if (!string.IsNullOrWhiteSpace(input))
                {
                    try
                    {
                        var addr = new System.Net.Mail.MailAddress(input);
                        recipients.Add(addr.Address);
                    }
                    catch
                    {
                        Console.WriteLine("无效的邮箱格式,请重新输入");
                    }
                }
            } while (!string.IsNullOrWhiteSpace(input));

            if (recipients.Count == 0)
            {
                throw new ArgumentException("至少需要一个收件人");
            }

            return recipients;
        }

        /// <summary>
        /// 获取附件列表
        /// </summary>
        static List<string> GetAttachments()
        {
            Console.WriteLine("\n===== 附件配置 (可选) =====");
            var attachments = new List<string>();
            string input;
            do
            {
                input = GetInput("附件路径 (输入空行结束): ");
                if (!string.IsNullOrWhiteSpace(input))
                {
                    if (File.Exists(input))
                    {
                        attachments.Add(input);
                    }
                    else
                    {
                        Console.WriteLine("文件不存在,请重新输入");
                    }
                }
            } while (!string.IsNullOrWhiteSpace(input));

            return attachments;
        }

        /// <summary>
        /// 发送邮件
        /// </summary>
        static void SendEmail(EmailConfig config, List<string> recipients, 
                            string subject, string body, bool isHtml, 
                            List<string> attachments)
        {
            using (var message = new MailMessage())
            {
                // 设置发件人
                message.From = new MailAddress(config.SenderEmail, config.SenderName);
                
                // 添加收件人
                foreach (var recipient in recipients)
                {
                    message.To.Add(recipient);
                }
                
                // 设置邮件内容
                message.Subject = subject;
                message.Body = body;
                message.IsBodyHtml = isHtml;
                
                // 添加附件
                foreach (var file in attachments)
                {
                    var attachment = new Attachment(file);
                    message.Attachments.Add(attachment);
                }
                
                // 配置SMTP客户端
                using (var smtp = new SmtpClient(config.SmtpServer, config.Port))
                {
                    smtp.Credentials = new NetworkCredential(config.SenderEmail, config.Password);
                    smtp.EnableSsl = config.EnableSsl;
                    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                    smtp.Timeout = 10000; // 10秒超时
                    
                    // 发送邮件
                    Console.WriteLine("\n正在发送邮件...");
                    smtp.Send(message);
                }
            }
        }

        // 辅助方法:获取用户输入
        static string GetInput(string prompt, string defaultValue = "")
        {
            Console.Write(prompt);
            if (!string.IsNullOrEmpty(defaultValue))
            {
                Console.Write($" (默认: {defaultValue}): ");
            }
            else
            {
                Console.Write(": ");
            }
            
            var input = Console.ReadLine();
            return string.IsNullOrWhiteSpace(input) ? defaultValue : input;
        }

        // 辅助方法:安全获取密码
        static string GetPassword(string prompt)
        {
            Console.Write(prompt);
            var password = new StringBuilder();
            ConsoleKeyInfo key;
            
            do
            {
                key = Console.ReadKey(true);
                
                // 退格键处理
                if (key.Key == ConsoleKey.Backspace && password.Length > 0)
                {
                    password.Remove(password.Length - 1, 1);
                    Console.Write("\b \b");
                }
                // 回车键结束输入
                else if (key.Key == ConsoleKey.Enter)
                {
                    Console.WriteLine();
                    break;
                }
                // 只接受可打印字符
                else if (key.KeyChar >= 32 && key.KeyChar <= 126)
                {
                    password.Append(key.KeyChar);
                    Console.Write("*");
                }
            } while (true);
            
            return password.ToString();
        }
    }

    /// <summary>
    /// 邮件配置类
    /// </summary>
    class EmailConfig
    {
        public string SenderEmail { get; set; }
        public string SenderName { get; set; }
        public string Password { get; set; }
        public string SmtpServer { get; set; }
        public int Port { get; set; }
        public bool EnableSsl { get; set; }
    }
}

使用说明

1. 基本功能

  • 支持发送纯文本或HTML格式邮件

  • 支持添加多个附件

  • 支持多个收件人

  • 安全密码输入(显示为星号)

  • 详细的错误提示

2. 使用步骤

  1. 运行程序

  2. 输入发件人邮箱、名称、密码

  3. 输入SMTP服务器地址和端口

  4. 选择是否启用SSL

  5. 输入收件人邮箱(多个收件人分行输入)

  6. 输入邮件主题和内容

  7. 添加附件(可选)

  8. 程序自动发送邮件

3. 常见邮箱配置

邮箱服务 SMTP服务器 端口 SSL
QQ邮箱 smtp.qq.com 587
163邮箱 smtp.163.com 25
Gmail smtp.gmail.com 587
Outlook smtp-mail.outlook.com 587
企业邮箱 咨询管理员 25/587 是/否

4. 常见问题解决

问题1:认证失败

  • 检查邮箱地址和密码是否正确

  • 对于QQ邮箱:使用授权码而非登录密码

  • 对于Gmail:启用"允许不够安全的应用"或使用应用专用密码

问题2:连接超时

  • 检查网络连接

  • 尝试更换端口(25/465/587)

  • 检查防火墙设置

问题3:附件过大

  • 压缩大文件

  • 分割多个邮件发送

  • 使用云存储分享链接

高级功能扩展

1. 添加密送(Bcc)功能

csharp 复制代码
// 在SendEmail方法中添加
foreach (var bcc in bccList)
{
    message.Bcc.Add(bcc);
}

2. 添加邮件模板

csharp 复制代码
// 使用HTML模板
string template = File.ReadAllText("template.html");
string body = template.Replace("{content}", userContent);

3. 异步发送

csharp 复制代码
// 使用async/await
public async Task SendEmailAsync(...)
{
    await smtp.SendMailAsync(message);
}

4. 添加邮件日志

csharp 复制代码
// 记录发送日志
File.AppendAllText("email_log.txt", 
    $"{DateTime.Now}: 发送邮件至 {string.Join(",", recipients)}\n");

参考代码 C# 邮件发送 源码下载(可带附件) www.youwenfan.com/contentcss/116200.html

安全注意事项

  1. 不要硬编码密码:实际应用中应从安全存储获取

  2. 使用加密连接:始终启用SSL/TLS

  3. 限制发送频率:避免被识别为垃圾邮件

  4. 验证收件人:防止邮件注入攻击

  5. 处理敏感数据:邮件内容加密

项目结构

csharp 复制代码
EmailSender/
├── Program.cs         # 主程序
├── EmailConfig.cs     # 配置类
├── App.config         # 配置文件(可选)
└── attachments/       # 附件目录(可选)

此代码可直接复制到Visual Studio中使用,需要添加System.Net.Mail引用(在.NET Framework中默认包含,.NET Core需安装NuGet包System.Net.Mail)。

相关推荐
JJJennie77732 分钟前
Gemini 3.7 Flash 上线,Google 想让 AI 多干活
开发语言·javascript·ecmascript
wuyk5551 小时前
Python 第三章:列表 List
服务器·开发语言·python
six_2 小时前
C# 上位机(持续更新中)
前端·面试·c#
Evand J2 小时前
【MATLAB例程,车联网7】CACC网联车辆协同控制:ACC对比、V2X时延丢包与队列稳定性,附例程下载链接
开发语言·matlab·车联网
MgArcher2 小时前
抖音a_bogus参数逆向实战:JSVMP环境模拟与Hook技术(2025最新)
javascript·爬虫·python
要努力点2 小时前
Python入门第六课
开发语言·python
萧瑟余晖3 小时前
Java深入解析篇三十三之消息队列
java·开发语言
吴可可1233 小时前
多段线扩展数据的应用场景
c#
IT爱学堂3 小时前
尚硅谷Java+AI大模型应用开发革新版本 2025年3月
java·开发语言·人工智能
C++ 老炮儿的技术栈3 小时前
Qt5.9.1 Windows 完整开发环境搭建流程
开发语言·c++·windows·qt·编辑器·代码化