zoukankan      html  css  js  c++  java
  • .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
  • 相关阅读:
    实验二
    实验一简单的加减乘除
    自我简介
    软件工程——第五次博客作业
    《软件测试》--第四次博客作业
    软件测试 第三次作业
    软件测试 第二次作业
    个人简介
    软件测试 第一次测评
    AE CC 装不上,安装程序检测到计算机重新启动的过程可能暂停。建议退出安装程序,重新启动计算机,然后再重试。
  • 原文地址:https://www.cnblogs.com/zpy1993-09/p/14576822.html
Copyright © 2011-2022 走看看