【代码片段】发送邮件

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Mail;
using System.Net;
using QuickEAS.CoreLib.Utils;

namespace QuickEAS.Network
{
    /// <summary>
    /// 邮件发送方式
    /// </summary>
    public enum LibMailSendWay
    {
        /// <summary>
        /// 以SMTP方式
        /// </summary>
        BySMTP,
        /// <summary>
        /// 以WEB方式
        /// </summary>
        ByWeb
    }
    /// <summary>
    /// 邮件发送参数
    /// </summary>
    public class LibMailSendArgs
    {
        public LibMailSendWay SendWay { get; set; }
        /// <summary>
        /// SMTP主机
        /// </summary>
        public string SMTPHost { get; set; }
        /// <summary>
        /// SMTP端口
        /// </summary>
        public int SMTPPort { get; set; }
        /// <summary>
        /// 使用SSL
        /// </summary>
        public bool EnableSSL { get; set; }
        /// <summary>
        /// 发件人地址
        /// </summary>
        public string MailFrom { get; set; }
        /// <summary>
        /// 收件人地址
        /// </summary>
        public string MailTo { get; set; }
        /// <summary>
        /// 登入帐号
        /// </summary>
        public string UserID { get; set; }
        /// <summary>
        /// 登入密码
        /// </summary>
        public string UserPassword { get; set; }
        /// <summary>
        /// 邮件标题
        /// </summary>
        public string Subject { get; set; }
        /// <summary>
        /// 邮件内容
        /// </summary>
        public string Body { get; set; }
        /// <summary>
        /// HTML方式发送
        /// </summary>
        public bool IsHTML { get; set; }
    }
    /// <summary>
    /// 邮件发送类
    /// </summary>
    public class LibSendMail
    {
        public static bool PostEmailBySMTP(LibMailSendArgs args, int tryCountIfSendFail = 3)
        {
            bool result = false;
            MailMessage mailmsg = new MailMessage();
            mailmsg.From = new MailAddress(args.MailFrom);  //定义发件人
            string[] mailToArray = LibSysUtils.SplitString(args.MailTo, ";");
            if (mailToArray.Length > 0)
            {
                foreach (string mailTo in mailToArray)
                {
                    MailAddress mailAddress = null;
                    if (mailTo.Contains("<") && mailTo.Contains(">"))
                    {
                        //易贸网络<[email protected]>
                        string[] strs = LibSysUtils.SplitString(mailTo, "<");
                        string displayName = strs[0];
                        strs = LibSysUtils.SplitString(strs[1], ">");
                        string email = strs[0];
                        mailAddress = new MailAddress(email, displayName);
                    }
                    else mailAddress = new MailAddress(mailTo);
                    mailmsg.To.Add(mailAddress); //添加收件人
                }
                mailmsg.Subject = args.Subject;  //邮件标题
                mailmsg.Body = args.Body;  //邮件内容
                mailmsg.BodyEncoding = Encoding.UTF8;
                mailmsg.IsBodyHtml = args.IsHTML;
                SmtpClient smtpClient = new SmtpClient();
                smtpClient.Host = args.SMTPHost;//发送邮件服务器
                smtpClient.Port = args.SMTPPort;
                smtpClient.Credentials = new NetworkCredential(args.UserID, args.UserPassword);
                smtpClient.EnableSsl = args.EnableSSL;
                smtpClient.Timeout = 1000 * 60; //60秒超时
                int failIndex = 0;
                do
                {
                    try
                    {
                        smtpClient.Send(mailmsg);
                        break;
                    }
                    catch (Exception ex)
                    {
                        failIndex++;
                        if (failIndex < tryCountIfSendFail)
                        {
                            LibSysUtils.AppendLog(LibSysUtils.GetInnerException(ex));
                            LibSysUtils.Sleep(5000);
                        }
                        else
                            throw LibSysUtils.GetInnerException(ex);
                    }
                }
                while (failIndex < tryCountIfSendFail);
                result = true;
            }
            return result;
        }

        public static bool PostEmailByWeb(LibMailSendArgs args)
        {
            return false;
        }

        public static bool PostEmail(LibMailSendArgs args)
        {
            bool result = false;
            switch (args.SendWay)
            {
                case LibMailSendWay.BySMTP:
                    result = PostEmailBySMTP(args);
                    break;
                case LibMailSendWay.ByWeb:
                    result = PostEmailByWeb(args);
                    break;
            }
            return result;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/michelsn/article/details/80297936