zoukankan      html  css  js  c++  java
  • .Net Email操作类

    using System;
    using System.Text;
    using System.Net.Mail;
    using System.Net;
    using System.Linq;
    using System.Text.RegularExpressions;
    
    namespace Dos.ORM.Common.Helpers
    {
        /// <summary>
        /// 发送邮件帮助类
        /// </summary>
        public class EmailHelper
        {
    
            private readonly SmtpClient _smtp = new SmtpClient();
            private Encoding Encoding { get; set; }
            private bool IsHtml { get; set; }
            private string[] Cc { get; set; }
            private string[] Bcc { get; set; }
    
            /// <summary>
            /// 是否为腾讯企业邮箱
            /// </summary>
            private readonly bool _isExmailQq;
    
            /// <summary>
            /// 发件邮箱密码或授权码
            /// </summary>
            private string Password { get; set; }
    
            /// <summary>
            /// 获取发送结果,成功则为空
            /// </summary>
            public string Result { get; private set; }
    
            /// <summary>
            /// 设置邮件编码类型
            /// </summary>
            /// <param name="contentEncoding"></param>
            public void SetEncoding(Encoding contentEncoding)
            {
                Encoding = contentEncoding;
    
            }
            /// <summary>
            ///设置邮件正文是否为 Html 格式 
            /// </summary>
            /// <param name="isHtml"></param>
            public void SetIsHtml(bool isHtml)
            {
                IsHtml = isHtml;
            }
            /// <summary>
            /// 抄送
            /// </summary>
            /// <param name="cc"></param>
            public void SetCc(params string[] cc)
            {
                Cc = cc;
            }
    
            /// <summary>
            /// 暗送
            /// </summary>
            /// <param name="bc"></param>
            public void SetBc(params string[] bc)
            {
                Bcc = bc;
            }
            /// <summary>
            /// 是否ssl加密
            /// </summary>
            /// <param name="isSsl"></param>
            public void SetIsSsl(bool isSsl)
            {
                _smtp.EnableSsl = isSsl;
            }
    
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="host">SMTP事务的主机的名称或IP地址</param>
            /// <param name="sendUserAccName">发件人邮件账号名称(不包含@及后缀)</param>
            /// <param name="sendUserPwd">发件人邮箱密码</param>
            /// <param name="isExmailQq">是否为腾讯企业邮箱</param>
            /// <param name="port">端口号,默认为25</param>
            public EmailHelper(string host, string sendUserAccName, string sendUserPwd, bool isExmailQq = false, int port = 25)
            {
                _smtp.Host = host;
                Password = sendUserPwd;
                _isExmailQq = isExmailQq;
                _smtp.Port = port != 25 ? port : 0x19;
                _smtp.EnableSsl = false;
    
                IsHtml = true;
                Encoding = Encoding.UTF8;
    
                if (string.IsNullOrEmpty(sendUserAccName) || string.IsNullOrEmpty(sendUserPwd))
                {
                    _smtp.UseDefaultCredentials = false;
                }
                else
                {
                    _smtp.Credentials = new NetworkCredential(sendUserAccName, sendUserPwd);
                }
            }
    
            /// <summary>
            /// 发送邮件
            /// </summary>
            /// <param name="fromAcc">发件人邮件地址</param>
            /// <param name="fromUserNickname">发件人显示名称</param>
            /// <param name="toUserAcc">收件人地址</param>
            /// <param name="title">邮件标题</param>
            /// <param name="body">邮件正文</param>
            /// <param name="file">附件地址数组</param>
            /// <returns>bool 是否成功 </returns>
            public bool Send(string fromAcc, string fromUserNickname, string toUserAcc, string title, string body, params string[] file)
            {
                return Send(fromAcc, fromUserNickname, new string[] { toUserAcc }, title, body, file);
            }
    
            /// <summary>
            /// 发送邮件
            /// </summary>
            /// <param name="fromAcc">发件人邮件地址</param>
            /// <param name="fromUserNickname">发件人显示名称</param>
            /// <param name="toUserAcc">收件人地址</param>
            /// <param name="title">邮件标题</param>
            /// <param name="body">邮件正文</param>
            /// <param name="file">附件地址数组</param>
            /// <returns>bool 是否成功 </returns>
            public bool Send(string fromAcc, string fromUserNickname, string[] toUserAcc, string title, string body, params string[] file)
            {
                string mailReg = @"^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$";
                if (toUserAcc == null)
                {
                    throw new ArgumentNullException("EmailHelper.Send.to");
                }
    
                if (toUserAcc.Any(oit => !Regex.IsMatch(oit + "", mailReg)))
                {
                    Result = "收件人地址不合法";
                    return false;
                }
                if (Bcc != null && Bcc.Length > 0)
                {
                    if (Bcc.Any(oit => !Regex.IsMatch(oit + "", mailReg)))
                    {
                        Result = "暗送人地址不合法";
                        return false;
                    }
                }
                if (Cc != null && Cc.Length > 0)
                {
                    if (Cc.Any(oit => !Regex.IsMatch(oit + "", mailReg)))
                    {
                        Result = "抄送人地址不合法";
                        return false;
                    }
                }
    
                if (_isExmailQq)
                {
                    #region 检查是否为腾讯企业邮箱(注意这里有一个坑,腾旭企业邮箱需要单独进行以下设置)
                    //此坑可参见:https://www.cnblogs.com/gxivwshjj/p/7562311.html
    
                    var mail = new System.Web.Mail.MailMessage();
                    try
                    {
                        mail.To = string.Join(";", toUserAcc);
                        mail.From = fromAcc;
                        mail.Subject = title;
                        mail.BodyFormat = System.Web.Mail.MailFormat.Html;
                        mail.Body = body;
    
                        //设置基础身份验证为1
                        mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
                        //设置发件邮箱地址
                        mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", fromAcc);
                        //设置发件邮箱密码
                        mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", Password);
                        //设置端口号为465
                        mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465);
                        //设置SSL为true
                        mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");
    
                        //发送邮件的附件
                        foreach (var r in file)
                        {
                            var objMailAttachment = new Attachment(r);
                            mail.Attachments.Add(objMailAttachment);
                        }
    
                        System.Web.Mail.SmtpMail.SmtpServer = _smtp.Host;
                        System.Web.Mail.SmtpMail.Send(mail);
    
                        return true;
                    }
                    catch (Exception ex)
                    {
                        Result = ex.Message;
                    }
    
                    #endregion
                }
                else
                {
                    MailMessage message = new MailMessage();
    
                    //创建一个附件对象
                    foreach (var r in file)
                    {
                        //发送邮件的附件
                        var objMailAttachment = new Attachment(r);
                        message.Attachments.Add(objMailAttachment);
                    }
                    message.From = new MailAddress(fromAcc, fromUserNickname);
                    message.Subject = title;
                    message.SubjectEncoding = Encoding;
                    message.Body = body;
                    message.BodyEncoding = Encoding;
                    message.IsBodyHtml = IsHtml;
                    message.Priority = MailPriority.Normal;
                    foreach (string str in toUserAcc)
                    {
                        message.To.Add(str);
                    }
                    if (Bcc != null && Bcc.Length > 0)
                    {
                        foreach (string b in Bcc)
                        {
                            message.Bcc.Add(b);
                        }
                    }
                    if (Cc != null && Cc.Length > 0)
                    {
                        foreach (string c in Cc)
                        {
                            message.CC.Add(c);
                        }
                    }
    
                    try
                    {
                        _smtp.Send(message);
                        return true;
                    }
                    catch (Exception ex)
                    {
                        Result = ex.Message;
                    }
                }
    
                return false;
            }
        }
    }
  • 相关阅读:
    【题解】Luogu CF817F MEX Queries
    【题解】Luogu P4396 [AHOI2013]作业
    【题解】Luogu P4198 楼房重建
    【题解】Luogu P1471 方差
    【题解】Luogu P4069 [SDOI2016]游戏
    【题解】Luogu P4097 [HEOI2013]Segment
    李超线段树略解
    【题解】JSOIWC2019 Round 5
    【题解】Luogu P2763 试题库问题
    【题解】JSOIWC2019 Round4
  • 原文地址:https://www.cnblogs.com/dongh/p/8116354.html
Copyright © 2011-2022 走看看