技术思绪摘录旅行
MailKit 是一个建立在MimeKit之上的跨平台邮件客户端库。MimeKit 是一个 C# 库,可用于创建和解析使用多用途 Internet 邮件扩展 (MIME) 的消息,如众多 IETF 规范所定义。这是一个个人开源项目,使用非常的简单。

源码地址:

https://github.com/jstedfast/MailKit

https://github.com/jstedfast/MimeKit


我要实现邮件发送功能,只需要以下步骤就可以

1、在.NET5项目中,引入MimeKit

2、封装一个发送类MailKitHelper,这里我用网易云的做测试

using System.Collections.Generic;
using C.Customization.Framework.Views;
using MimeKit;

namespace C.Customization.Framework.Comm
{
    /// <summary>
    /// 邮件发送辅助类
    /// </summary>
    public class MailKitHelper
    {
        const string mailFrom = "你的网易云邮箱@163.com";
        const string mailFromAccount = "你的网易云邮箱@163.com";
        const string mailPassword = "你的邮箱授权码";

        /// <summary>
        ///发送邮件
        /// </summary>
        /// <param name="model">The model.</param>
        /// <returns></returns>
        public MessageInfo Send(SendEmailDto model)
        {
            if (string.IsNullOrWhiteSpace(model.SysName))
            {
                return new MessageInfo(false, "发件人称呼不能为空");
            }
            if (string.IsNullOrWhiteSpace(model.Subject))
            {
                return new MessageInfo(false, "主题不能为空");
            }
            if (model.ToMails == null || model.ToMails.Count < 1)
            {
                return new MessageInfo(false, "至少需要一个收件人");
            }
            if (string.IsNullOrWhiteSpace(model.HtmlBody))
            {
                return new MessageInfo(false, "信件内容不能为空");
            }
            MimeMessage message = new MimeMessage();
            message.From.Add(new MailboxAddress(model.SysName, mailFrom));
            model.ToMails.ForEach(x =>
            {
                message.To.Add(new MailboxAddress(x, x));
            });

            message.Subject = model.Subject;
            BodyBuilder builder = new BodyBuilder();
            if (model.Attas != null && model.Attas.Count > 0)
            {
                model.Attas.ForEach(x =>
                {
                    builder.Attachments.Add(x);
                });
            }

            builder.HtmlBody = model.HtmlBody;
            message.Body = builder.ToMessageBody();

            string retmsg = "";
            using (var client = new MailKit.Net.Smtp.SmtpClient())
            {
                client.MessageSent += (s, a) =>
                {
                    retmsg = a.Response;
                };
                client.Connect("smtp.163.com", 465, true);
                client.Authenticate(mailFromAccount, mailPassword);
                client.Send(message);
                client.Disconnect(true);
            }
            return new MessageInfo(true, retmsg);
        }
    }

    /// <summary>
    /// 发送邮件入参
    /// </summary>
    public class SendEmailDto
    {
        /// <summary>
        ///系统名称 谁发邮件
        /// </summary>
        public string SysName { get; set; }

        /// <summary>
        ///主题
        /// </summary>
        public string Subject { get; set; }

        /// <summary>
        /// 收件人邮箱集合
        /// </summary>
        public List<string> ToMails { get; set; }

        /// <summary>
        ///附件文件地址 可为空
        /// </summary>
        public List<string> Attas { get; set; }

        /// <summary>
        ///邮件内容
        /// </summary>
        public string HtmlBody { get; set; }
    }
}

3、按照入参对象传值即可。支持html和纯文本两种body,为了兼容性,我封装只保留了htmlbody。

CarsonIT 微信扫码关注公众号 策略、创意、技术

留下您的脚步

 

最近评论

查看更多>>

精选推荐

阅读排行

友情打赏

请打开您的微信,扫一扫