惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
量子位
Recent Announcements
Recent Announcements
T
The Blog of Author Tim Ferriss
美团技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
大猫的无限游戏
大猫的无限游戏
V
Visual Studio Blog
博客园 - 聂微东
aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
U
Unit 42
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
L
LangChain Blog

博客园 - Hey,Coder!

微信小程序 web方案实现调音器功能 systemctl slice配置docker最大占用cpu 内存 pipenv环境变量配置 .net8验证码 数据库差异对比工具 docker部署prometheus grafana pgexporter Alertmanager ubuntu24 换源 ssh配置 ubuntu24 Harbor部署 ubuntu24 kvm部署 cockpit web管理界面 .net api代理 Ubuntu 24.04 DMAR IOMMU 报错修复 uniapp iOS App 上架 vs文件软链接 Docker 网络别名 .net8通用中间件处理公共返回值结构 .net环境下OpenTelemetry Body 读取注意事项 jaeger界面显示异常 .net opentelemetry collector jaeger c# opentelemetry 自定义export c# opentelemetry 自定义export c# 生成对象的初始化代码 Elasticsearch ILM 与 Data Stream 概念及实例说明文档 portainer httphelper封装 Ocelot + Consul + SignalR 粘性会话 正交软件架构 docker postgresql17 主从复制 rabbitmq总结与c#示例 docker rabbitmq quartz dashboard
c# MailKit3.4.3 发送邮件、附件
Hey,Coder! · 2026-05-22 · via 博客园 - Hey,Coder!
    public class MailConfig 
    {
        /// <summary>
        /// 超时时长 - 毫秒
        /// </summary>
        public int Timeout { get; set; } = 50000;
        /// <summary>
        /// 发件邮箱
        /// </summary>
        public string MailFrom { get; set; }
        /// <summary>
        /// 邮箱密码
        /// </summary>
        public string MailPwd { get; set; }
        /// <summary>
        /// 发件服务器
        /// </summary>
        public string MailHost { get; set; }

        /// <summary>
        /// 端口
        /// </summary>
        public int MailPort { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public SecureSocketOptions SecurityType { get; set; } = SecureSocketOptions.Auto;
    }

public static class MailHelper
{
    /// <summary>
    /// 
    /// </summary>
    /// <param name="config">服务器配置</param>
    /// <param name="subject">主题</param>
    /// <param name="content">正文</param>
    /// <param name="mailTo">接收邮箱</param>
    /// <returns></returns>
    public static void SendMail(MailConfig config, string subject, string content, List<string> mailTo, int timeout = 10000, List<string> fileList = null)
    {
        MimeMessage message = new MimeMessage();
        message.From.Add(new MailboxAddress(config.MailFrom, config.MailFrom));

        if (mailTo.IsNullOrEmpty())
        {
            throw new Exception("maill to null user");
        }

        foreach (string item in mailTo)
        {
            message.To.Add(new MailboxAddress(item, item));
        }

        message.Subject = string.Format(subject);
        using (MailKit.Net.Smtp.SmtpClient client = new MailKit.Net.Smtp.SmtpClient())
        {
            client.Timeout = timeout;
            client.Connect(config.MailHost, config.MailPort, config.SecurityType);
            Multipart multipart = new Multipart("mixed");

            if (!fileList.IsNullOrEmpty())
            {
                foreach (string filePath in fileList)
                {
                    var fileInfo = new FileInfo(filePath);
                    MimePart attachment = new MimePart()
                    {
                        Content = new MimeContent(File.OpenRead(fileInfo.FullName), ContentEncoding.Default),
                        ContentDisposition = new MimeKit.ContentDisposition(MimeKit.ContentDisposition.Attachment),
                        ContentTransferEncoding = ContentEncoding.Base64,
                        FileName = fileInfo.Name
                    };
                    multipart.Add(attachment);
                }
            }

            //var textBody = new TextPart("plain")
            var textBody = new TextPart("html")
            {
                Text = content
            };

            multipart.Add(textBody);
            message.Body = multipart;

            client.Authenticate(config.MailFrom, config.MailPwd);
            client.Send(message);
            client.Disconnect(true);
        }
    }
}