C#邮件发送帮助类

来源:互联网 发布:去分化 细胞编程 编辑:程序博客网 时间:2024/06/16 16:44

1.新建一个抽象类FTMailBase.cs,代码如下:

/* ======================================================== * Module Name: JuCheap.Service.SendEmail * Class  Name: FTMailBase * Description: 所有邮件Sender的基类 * Company    : JuCheap * Author     : JuCheap * Create Date: 2014-11-03===========================================================*/using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Mail;using System.Configuration;using JuCheap.Common.Extention;namespace JuCheap.Service.SendEmail{    /// <summary>    /// 所有邮件Sender的基类    /// </summary>    public abstract class FTMailBase    {        /// <summary>        /// 发件人        /// </summary>        public string From { get; set; }        /// <summary>        /// 收件人        /// </summary>        public string To { get; set; }        /// <summary>        /// 主题        /// </summary>        public string Subject { get; set; }        //正文        public string Body { get; set; }        /// <summary>        /// 抄送        /// </summary>        public string CC { get; set; }        /// <summary>        /// 显示名称        /// </summary>        public string DisplayName { get; set; }        /// <summary>        /// 发送邮件        /// </summary>        /// <param name="smtpServer">邮件服务器地址</param>        /// <param name="port">端口</param>        /// <param name="userName">帐号</param>        /// <param name="password">密码</param>        /// <param name="enableSSL">是否启用SSL</param>        /// <returns></returns>        public abstract bool Send(string smtpServer = null                         , int? port = default(int?)                         , string userName = null                         , string password = null                         , bool? enableSSL = default(bool?));        /// <summary>        /// 工厂方法,获取邮件SENDER实例        /// </summary>        public static FTMailBase Instance        {            get            {                return new SMTPMailer();            }        }    }}

2.实现抽象类;新建邮件发送类:SMTPMailer.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Mail;using System.Configuration;using JuCheap.Common.Extention;namespace JuCheap.Service.SendEmail{    internal class SMTPMailer : FTMailBase    {        /// <summary>        /// SMTP邮件Sender的类的封装        /// </summary>        /// <param name="smtpServer">smtp服务地址</param>        /// <param name="port">端口号</param>        /// <param name="userName">用户名</param>        /// <param name="password">密码</param>        /// <param name="enableSSL">是否采用ssl的方式</param>        public override bool Send(string smtpServer = null, int? port = default(int?), string userName = null, string password = null,bool? enableSSL=default(bool?))        {            bool isSended = false;            try            {                smtpServer = smtpServer.IsBlank() ? ConfigurationManager.AppSettings["SMTPServer_Address"] : smtpServer;                port = !port.HasValue ? Convert.ToInt32(ConfigurationManager.AppSettings["SMTPServer_Port"]) : port.Value;                userName = userName.IsBlank() ? ConfigurationManager.AppSettings["SMTPServer_UserName"] : userName;                password = password.IsBlank() ? ConfigurationManager.AppSettings["SMTPServer_UserPwd"] : password;                if (!enableSSL.HasValue)                {                    bool temp = false;                    bool.TryParse(ConfigurationManager.AppSettings["SMTPServer_EnableSSL"], out temp);                    enableSSL = temp;                }                System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();                message.To.Add(this.To);                message.Sender = new MailAddress(userName, userName);                if (!this.CC.IsBlank())                    message.CC.Add(this.CC);                message.Subject = System.Text.UTF8Encoding.Default.GetString(System.Text.UTF8Encoding.Default.GetBytes(this.Subject));                                if (DisplayName.IsBlank())                    message.From = new System.Net.Mail.MailAddress(this.From);                else                    message.From = new System.Net.Mail.MailAddress(this.From, System.Text.UTF8Encoding.Default.GetString(System.Text.UTF8Encoding.Default.GetBytes(this.DisplayName)));                message.Body = System.Text.UTF8Encoding.Default.GetString(System.Text.UTF8Encoding.Default.GetBytes(this.Body));                message.BodyEncoding = Encoding.GetEncoding("GBK") ;                message.HeadersEncoding = Encoding.UTF8;                message.SubjectEncoding = Encoding.UTF8;                message.IsBodyHtml = true;                message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;                message.ReplyToList.Add(new MailAddress(this.From));                                System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(smtpServer, port.Value);                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;                smtp.UseDefaultCredentials = false;                smtp.Credentials = new NetworkCredential(userName, password);                smtp.Timeout = 30000;                smtp.EnableSsl = enableSSL.Value;                smtp.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted);                smtp.Send(message);                isSended = true;            }            catch (Exception ex)            {                Log.Write(ex);                throw ex;            }            return isSended;        }        /// <summary>        /// 编码成64位        /// </summary>        /// <param name="s">需要编码的内容</param>        /// <returns>返回被编码的内容</returns>        private string encodebase64(string s)        {            string encode = "";            byte[] bytes = Encoding.UTF8.GetBytes(s);            try            {                encode = Convert.ToBase64String(bytes);            }            catch            {                encode = s;            }            return encode;        }        /// <summary>        /// 发送完成后,如果有错误,记录日志        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        void smtp_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)        {            if (e.Error != null)            {                Log.Write(e.Error);            }        }    }}


0 0
原创粉丝点击