.net core 邮件发送封装并生成dll文件

      邮件发送功能已经做了好了次了,有带有附件的和不带附件的,如果不在一个工程里每次使用都要复制粘贴一遍,很麻烦,所以我就想着能不能自己封装一下,生成dll文件。用的时候引用dll文件就行了。这样应该方便多了。目前发送邮件的号是QQ号,接收方不限制。

     首先定义一个发送邮件的接口:

     

 public interface IEmail
    {
        /// <summary>
        /// 邮件发送,只发送内容
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人Email</param>
        /// <param name="sendContent">发送内容</param>
        /// <param name="reSend">是否启用重发机制</param>
        public void SendEmail(string sendEmail, string sendEmailCode, string receiveEmail, string sendContent, bool reSend);
        /// <summary>
        /// 邮件发送,只发送内容,群发
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人邮件数组</param>
        /// <param name="sendContent">发送内容</param>
        /// <param name="reSend">是否启用重发机制</param>
        public void SendStringEmail(string sendEmail, string sendEmailCode, string[] receiveEmail, string sendContent, bool reSend);
        /// <summary>
        /// 邮件发送,发送内容和标题
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人Email</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="sendContent">邮件内容</param>
        /// <param name="reSend"是否启用重发机制></param>
        public void SendEmail(string sendEmail, string sendEmailCode, string receiveEmail, string titleEmail, string sendContent, bool reSend);
        /// <summary>
        /// 邮件发送,发送内容和标题
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人Email群</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="sendContent">邮件内容</param>
        /// <param name="reSend"是否启用重发机制></param>
        public void SendStringTitleEmail(string sendEmail, string sendEmailCode, string[] receiveEmail, string titleEmail, string sendContent, bool reSend);
        /// <summary>
        /// 发送邮件,发送内容,标题,附件
        /// </summary>
        /// <param name="sendEmail">Email发送人</param>
        /// <param name="sendEmailCode">Email授权码</param>
        /// <param name="receiveEmail">邮件接收人</param>
        /// <param name="annexUrl">附件路径</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="annexEmail">附件标题</param>
        /// <param name="reSend">是否启用重发机制</param>
        public void SendEmail(string sendEmail, string sendEmailCode, string receiveEmail, string annexUrl, string titleEmail, string annexEmail, bool reSend);
        /// <summary>
        /// 邮件发送:发送内容,标题,多个附件
        /// </summary>
        /// <param name="sendEmail">邮件发送人</param>
        /// <param name="sendEmailCode">邮件授权码</param>
        /// <param name="receiveEmail">邮件接收人</param>
        /// <param name="annexUrl">多个附件数组</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="annexEmail">附件标题</param>
        /// <param name="reSend">是否启用重发机制</param>
        public void SendUrlEmail(string sendEmail, string sendEmailCode, string receiveEmail, List<string> annexUrl, string titleEmail, string annexEmail, bool reSend);
        /// <summary>
        /// 邮件发送:群发,发送内容,标题,多个附件
        /// </summary>
        /// <param name="sendEmail">邮件发送人</param>
        /// <param name="sendEmailCode">邮件授权码</param>
        /// <param name="receiveEmail">邮件接收人数组</param>
        /// <param name="annexUrl">附件路径数组</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="annexEmail">附件标题</param>
        /// <param name="reSend">是否启用重发机制</param>
        public void SendListUrlEmail(string sendEmail, string sendEmailCode, string[] receiveEmail, List<string> annexUrl, string titleEmail, string annexEmail, bool reSend);

    }

 邮件发送的实现类:

 public class ConnectEMail : IEmail
    {
        /// <summary>
        /// 邮件发送,只发送内容
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人Email</param>
        /// <param name="sendContent">发送内容</param>
        /// <param name="reSend">是否启用重发机制</param>
        public void SendEmail(string sendEmail, string sendEmailCode, string receiveEmail, string sendContent, bool reSend)
        {
            SmtpClient smtpclient = EmailHelper.GetSmtpClient(sendEmail, sendEmailCode);
            MailMessage mailMessage = EmailHelper.GetMailMessage(sendEmail, receiveEmail, "", sendContent);
            try
            {
                smtpclient.Send(mailMessage);
            }
            catch (Exception e)
            {

                //启用重发机制
                if (reSend == true)
                {
                    Task.Run(() =>
                    {
                        Thread.Sleep(5000);
                        Console.WriteLine("启用了重发机制。。。。");
                        SendEmail(sendEmail, sendEmailCode, receiveEmail, sendContent, reSend);
                    });
                }

            }

        }
        /// <summary>
        /// 邮件发送,发送内容和标题
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人Email</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="sendContent">邮件内容</param>
        /// <param name="reSend"是否启用重发机制></param>
        public void SendEmail(string sendEmail, string sendEmailCode, string receiveEmail, string titleEmail, string sendContent, bool reSend)
        {
            SmtpClient smtpclient = EmailHelper.GetSmtpClient(sendEmail, sendEmailCode);
            MailMessage mailMessage = EmailHelper.GetMailMessage(sendEmail, receiveEmail, titleEmail, sendContent);
            try
            {
                smtpclient.Send(mailMessage);
            }
            catch (Exception)
            {
                //启用重发机制
                if (reSend == true)
                {
                    Task.Run(() =>
                    {
                        Thread.Sleep(5000);
                        SendEmail(sendEmail, sendEmailCode, receiveEmail, titleEmail, sendContent, reSend);
                    });
                }
            }
        }
        /// <summary>
        /// 发送邮件,发送内容,标题,附件
        /// </summary>
        /// <param name="sendEmail">Email发送人</param>
        /// <param name="sendEmailCode">Email授权码</param>
        /// <param name="receiveEmail">邮件接收人</param>
        /// <param name="annexUrl">附件路径</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="annexEmail">附件标题</param>
        /// <param name="reSend">是否启用重发机制</param>
        public void SendEmail(string sendEmail, string sendEmailCode, string receiveEmail, string annexUrl, string titleEmail, string annexEmail, bool reSend)
        {
            SmtpClient smtpclient = EmailHelper.GetSmtpClient(sendEmail, sendEmailCode);
            MailMessage mailMessage = EmailHelper.GetMailMessage(sendEmail, receiveEmail, titleEmail, "");
            Attachment myAttachment = EmailHelper.GetAttachment(annexUrl);
            mailMessage.Attachments.Add(myAttachment);
            try
            {
                smtpclient.Send(mailMessage);
            }
            catch (Exception)
            {
                //启用重发机制
                if (reSend == true)
                {
                    Task.Run(() =>
                    {
                        Thread.Sleep(5000);
                        SendEmail(sendEmail, sendEmailCode, receiveEmail, annexUrl, titleEmail, annexEmail, reSend);
                    });
                }
            }
        }
        /// <summary>
        /// 邮件发送:群发,发送内容,标题,多个附件
        /// </summary>
        /// <param name="sendEmail">邮件发送人</param>
        /// <param name="sendEmailCode">邮件授权码</param>
        /// <param name="receiveEmail">邮件接收人数组</param>
        /// <param name="annexUrl">附件路径数组</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="annexEmail">附件标题</param>
        /// <param name="reSend">是否启用重发机制</param>
        public void SendListUrlEmail(string sendEmail, string sendEmailCode, string[] receiveEmail, List<string> annexUrl, string titleEmail, string annexEmail, bool reSend)
        {
            for (int i = 0; i < receiveEmail.Length; i++)
            {
                SmtpClient smtpclient = EmailHelper.GetSmtpClient(sendEmail, sendEmailCode);
                MailMessage mailMessage = EmailHelper.GetMailMessage(sendEmail, receiveEmail[i], titleEmail, "");

                for (int j = 0; j < annexUrl.Count; j++)
                {
                    if (!string.IsNullOrEmpty(annexUrl[j]) && EmailHelper.SelectFile(annexUrl[j]))
                    {

                        Attachment myAttachment = EmailHelper.GetAttachment(annexUrl[j]);
                        mailMessage.Attachments.Add(myAttachment);
                    }

                }
                try
                {
                    smtpclient.Send(mailMessage);
                }
                catch (Exception)
                {
                    //启用重发机制
                    if (reSend == true)
                    {
                        Task.Run(() =>
                        {
                            Thread.Sleep(5000);
                            SendUrlEmail(sendEmail, sendEmailCode, receiveEmail[i], annexUrl, titleEmail, annexEmail, reSend);
                        });
                    }
                }
            }


        }
        /// <summary>
        /// 邮件发送,只发送内容,群发
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人邮件数组</param>
        /// <param name="sendContent">发送内容</param>
        /// <param name="reSend">是否启用重发机制</param>
        public void SendStringEmail(string sendEmail, string sendEmailCode, string[] receiveEmail, string sendContent, bool reSend)
        {
            for (int i = 0; i < receiveEmail.Length; i++)
            {
                SmtpClient smtpclient = EmailHelper.GetSmtpClient(sendEmail, sendEmailCode);
                MailMessage mailMessage = EmailHelper.GetMailMessage(sendEmail, receiveEmail[i], "", sendContent);
                try
                {
                    smtpclient.Send(mailMessage);
                }
                catch (Exception)
                {
                    //启用重发机制
                    if (reSend == true)
                    {
                        Task.Run(() =>
                        {
                            Thread.Sleep(5000);
                            SendEmail(sendEmail, sendEmailCode, receiveEmail[i], sendContent, reSend);
                        });
                    }
                }
            }

        }
        /// <summary>
        /// 邮件发送,发送内容和标题
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人Email群</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="sendContent">邮件内容</param>
        /// <param name="reSend"是否启用重发机制></param>
        public void SendStringTitleEmail(string sendEmail, string sendEmailCode, string[] receiveEmail, string titleEmail, string sendContent, bool reSend)
        {
            for (int i = 0; i < receiveEmail.Length; i++)
            {
                SmtpClient smtpclient = EmailHelper.GetSmtpClient(sendEmail, sendEmailCode);
                MailMessage mailMessage = EmailHelper.GetMailMessage(sendEmail, receiveEmail[i], titleEmail, sendContent);
                try
                {
                    smtpclient.Send(mailMessage);
                }
                catch (Exception)
                {
                    //启用重发机制
                    if (reSend == true)
                    {
                        Task.Run(() =>
                        {
                            Thread.Sleep(5000);
                            SendEmail(sendEmail, sendEmailCode, receiveEmail[i], titleEmail, sendContent, reSend);
                        });
                    }
                }
            }

        }
        /// <summary>
        /// 邮件发送:发送内容,标题,多个附件
        /// </summary>
        /// <param name="sendEmail">邮件发送人</param>
        /// <param name="sendEmailCode">邮件授权码</param>
        /// <param name="receiveEmail">邮件接收人</param>
        /// <param name="annexUrl">多个附件数组</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="annexEmail">附件标题</param>
        /// <param name="reSend">是否启用重发机制</param>
        public void SendUrlEmail(string sendEmail, string sendEmailCode, string receiveEmail, List<string> annexUrl, string titleEmail, string annexEmail, bool reSend)
        {

            SmtpClient smtpclient = EmailHelper.GetSmtpClient(sendEmail, sendEmailCode);
            MailMessage mailMessage = EmailHelper.GetMailMessage(sendEmail, receiveEmail, titleEmail, annexEmail);
            for (int j = 0; j < annexUrl.Count; j++)
            {
                if (!string.IsNullOrEmpty(annexUrl[j]) && EmailHelper.SelectFile(annexUrl[j]))
                {

                    Attachment myAttachment = EmailHelper.GetAttachment(annexUrl[j]);
                    mailMessage.Attachments.Add(myAttachment);
                }


                try
                {
                    smtpclient.Send(mailMessage);
                }
                catch (Exception)
                {
                    //启用重发机制
                    if (reSend == true)
                    {
                        Task.Run(() =>
                        {
                            Thread.Sleep(5000);
                            SendUrlEmail(sendEmail, sendEmailCode, receiveEmail, annexUrl, titleEmail, annexEmail, reSend);
                        });
                    }
                }
            }
        }
    }

构建发送邮件客户端类:

 public class EmailHelper
    {
        public static SmtpClient GetSmtpClient(string sendEmail, string sendEmailCode)
        {
            SmtpClient smtpclient = new SmtpClient("smtp.qq.com");
            //邮件发送方式  通过网络发送到smtp服务器
            smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network;
            //如果服务器支持安全连接,则将安全连接设为true
            smtpclient.EnableSsl = true;
            //是否使用默认凭据,若为false,则使用自定义的证书,就是下面的networkCredential实例对象
            smtpclient.UseDefaultCredentials = false;
            //指定邮箱账号和密码,需要注意的是,这个密码是你在QQ邮箱设置里开启服务的时候给你的那个授权码
            NetworkCredential networkCredential = new NetworkCredential(sendEmail, sendEmailCode);
            smtpclient.Credentials = networkCredential;
            return smtpclient;
        }
        public static MailMessage GetMailMessage(string sendEmail, string receiveEmail, string titleEmail, string sendContent)
        {

            //确定发件地址与收件地址
            MailAddress sendAddress = new MailAddress(sendEmail);
            MailAddress receiveAddress = new MailAddress(receiveEmail);
            //构造一个Email的Message对象 内容信息
            MailMessage mailMessage = new MailMessage(sendAddress, receiveAddress);
            mailMessage.Subject = titleEmail + DateTime.Now;
            mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;
            mailMessage.Body = sendContent;
            mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
            return mailMessage;
        }
        /// <summary>
        /// 附件路径
        /// </summary>
        /// <param name="annexUrl">路径</param>
        /// <returns></returns>
        public static Attachment GetAttachment(string annexUrl)
        {
            //附件
            Attachment myAttachment = new System.Net.Mail.Attachment(annexUrl, MediaTypeNames.Application.Octet);
            //MIME协议下的一个对象,用以设置附件的创建时间,修改时间以及读取时间  
            ContentDisposition disposition = myAttachment.ContentDisposition;
            disposition.CreationDate = File.GetCreationTime(annexUrl);
            disposition.ModificationDate = File.GetLastWriteTime(annexUrl);
            disposition.ReadDate = File.GetLastAccessTime(annexUrl);
            return myAttachment;
        }
        /// <summary>
        /// 判断文件是否存在
        /// </summary>
        /// <param name="strFileName">路径</param>
        /// <returns></returns>
        public static bool SelectFile(string strFileName)
        {
            strFileName = strFileName.Replace("/", "\");
            //存在文件
            if (File.Exists(strFileName))
            {
                return true;
            }
            else //不存在文件
            {
                return false;
            }

        }
    }

外部调用邮件发送类:

/// <summary>
    /// 发送邮件通用类
    /// </summary>
    public class EMail
    {
        /// <summary>
        /// 邮件发送,只发送内容
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人Email</param>
        /// <param name="sendContent">发送内容</param>
        /// <param name="reSend">是否启用重发机制</param>
        public static void SendEmail(string sendEmail, string sendEmailCode, string receiveEmail, string sendContent, bool reSend)
        {
            new ConnectEMail().SendEmail(sendEmail, sendEmailCode, receiveEmail, sendContent, reSend);
        }
        /// <summary>
        /// 邮件发送,发送内容和标题
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人Email</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="sendContent">邮件内容</param>
        /// <param name="reSend"是否启用重发机制></param>
        public static void SendEmail(string sendEmail, string sendEmailCode, string receiveEmail, string titleEmail, string sendContent, bool reSend)
        {
            new ConnectEMail().SendEmail(sendEmail, sendEmailCode, receiveEmail, titleEmail, sendContent, reSend);
        }
        /// <summary>
        /// 发送邮件,发送内容,标题,附件
        /// </summary>
        /// <param name="sendEmail">Email发送人</param>
        /// <param name="sendEmailCode">Email授权码</param>
        /// <param name="receiveEmail">邮件接收人</param>
        /// <param name="annexUrl">附件路径</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="annexEmail">附件标题</param>
        /// <param name="reSend">是否启用重发机制</param>
        public static void SendEmail(string sendEmail, string sendEmailCode, string receiveEmail, string annexUrl, string titleEmail, string annexEmail, bool reSend)
        {
            new ConnectEMail().SendEmail(sendEmail, sendEmailCode, receiveEmail, annexUrl, titleEmail, annexEmail, reSend);
        }
        /// <summary>
        /// 邮件发送:群发,发送内容,标题,多个附件
        /// </summary>
        /// <param name="sendEmail">邮件发送人</param>
        /// <param name="sendEmailCode">邮件授权码</param>
        /// <param name="receiveEmail">邮件接收人数组</param>
        /// <param name="annexUrl">附件路径数组</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="annexEmail">附件标题</param>
        /// <param name="reSend">是否启用重发机制</param>
        public static void SendListUrlEmail(string sendEmail, string sendEmailCode, string[] receiveEmail, List<string> annexUrl, string titleEmail, string annexEmail, bool reSend)
        {
            new ConnectEMail().SendListUrlEmail(sendEmail, sendEmailCode, receiveEmail, annexUrl, titleEmail, annexEmail, reSend);
        }
        /// <summary>
        /// 邮件发送,只发送内容,群发
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人邮件数组</param>
        /// <param name="sendContent">发送内容</param>
        /// <param name="reSend">是否启用重发机制</param>
        public static void SendStringEmail(string sendEmail, string sendEmailCode, string[] receiveEmail, string sendContent, bool reSend)
        {
            new ConnectEMail().SendStringEmail(sendEmail, sendEmailCode, receiveEmail, sendContent, reSend);
        }
        /// <summary>
        /// 邮件发送,发送内容和标题
        /// </summary>
        /// <param name="sendEmail">发送人Email</param>
        /// <param name="sendEmailCode">发送人Email授权码</param>
        /// <param name="receiveEmail">接收人Email群</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="sendContent">邮件内容</param>
        /// <param name="reSend"是否启用重发机制></param>
        public static void SendStringTitleEmail(string sendEmail, string sendEmailCode, string[] receiveEmail, string titleEmail, string sendContent, bool reSend)
        {
            new ConnectEMail().SendStringTitleEmail(sendEmail, sendEmailCode, receiveEmail, titleEmail, sendContent, reSend);
        }
        /// <summary>
        /// 邮件发送:发送内容,标题,多个附件
        /// </summary>
        /// <param name="sendEmail">邮件发送人</param>
        /// <param name="sendEmailCode">邮件授权码</param>
        /// <param name="receiveEmail">邮件接收人</param>
        /// <param name="annexUrl">多个附件数组</param>
        /// <param name="titleEmail">邮件标题</param>
        /// <param name="annexEmail">附件标题</param>
        /// <param name="reSend">是否启用重发机制</param>
        public static void SendUrlEmail(string sendEmail, string sendEmailCode, string receiveEmail, List<string> annexUrl, string titleEmail, string annexEmail, bool reSend)
        {
            new ConnectEMail().SendUrlEmail(sendEmail, sendEmailCode, receiveEmail, annexUrl, titleEmail, annexEmail, reSend);
        }
    }

然后发布一下,就可以看到一个dll文件,用的时候直接把dll文件拷贝进去,添加一下引用就行了。

.Net Core
原文地址:https://www.cnblogs.com/zpy1993-09/p/14576822.html