发送邮件

邮件自动发送:

邮件发送分为同步发送和异步发送,写代码的人废话都不多,直接上代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Email.Email
{
    /// <summary>
    /// Email类型
    /// </summary>
    public enum EmailType
    {
        /// <summary>
        /// QQ 邮箱
        /// </summary>
        QQ = 1,

        /// <summary>
        /// 163 邮箱
        /// </summary>
        Mail163 = 2,

        /// <summary>
        /// Gmail 邮箱
        /// </summary>
        Gmail = 3,

        /// <summary>
        /// Hotmail 邮箱
        /// </summary>
        Hotmail = 4,

    }
}

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Email.Email
{
    /// <summary>
    /// Email账户
    /// </summary>
    public class EmailUser
    {
        private String userName;

        /// <summary>
        /// 邮箱号
        /// </summary>
        public String UserName
        {
            get { return this.userName; }
            set
            {
                if (HasEmail(value))
                    this.userName = value;
                else
                    throw new Exception("邮箱账号格式错误");
            }
        }

        /// <summary>
        /// 邮箱密码
        /// </summary>
        public String UserPwd { get; set; }

        /// <summary>
        /// 验证字符串是否是邮箱账号
        /// </summary>
        /// <param name="strEmail">需要验证的字符串</param>
        /// <returns>验证结果</returns>
        private Boolean HasEmail(String strEmail)
        {
            return Regex.IsMatch(strEmail, @"^[A-Za-z0-9](([_.-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([.-]?[a-zA-Z0-9]+)*).([A-Za-z]{2,})$", RegexOptions.IgnoreCase);
        }
    }
}

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;

namespace Email.Email
{
    /// <summary>
    /// SmtpClient扩展类
    /// </summary>
    public class SmtpClientExp : SmtpClient
    {
        /// <summary>
        /// 邮件历史对象
        /// </summary>
        public Object MailRecord { get; set; }
    }
}

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace Email.Email
{
    /// <summary>
    /// 邮件操作公共类
    /// </summary>
    public class SOCNetSendMail
    {
        /// <summary>
        /// 同步发送邮件
        /// </summary>
        /// <param name="emailType">邮箱类型</param>
        /// <param name="outboxUser">发件人</param>
        /// <param name="recipientUsres">收件人集合</param>
        /// <param name="contxt">发送内容</param>
        /// <param name="title">标题</param>
        /// <param name="isBodyHtml">是否为Html</param>
        /// <param name="emailFiles">附件</param>
        /// <returns>是否发送成功</returns>
        public static Boolean Sender(EmailType emailType, EmailUser outboxUser, List<EmailUser> recipientUsres, String contxt, String title = "", Boolean isBodyHtml = true, params String[] emailFiles)
        {
            Boolean isMessage = false;

            //得到SmtpClient对象
            SmtpClient smtpClient = GetSender(emailType, outboxUser);            

            //得到MailMessage对象
            MailMessage mailMessage = GetMailMessage(outboxUser, recipientUsres, contxt, title, isBodyHtml, emailFiles);
            
            try
            {
                smtpClient.Send(mailMessage);
                return isMessage = true;
            }
            catch (Exception e)
            {
                isMessage = false;
                throw e;
            }

        }

        /// <summary>
        /// 异部发送邮件 异部发送完成以后需要调用SendCompleted事件返回发送已经完成
        /// 
        /// 注:使用异步发送邮件,需在.aspx页面头部命令行中设置Async="true",否则报错
        /// smtpClient.SendCompleted += new SendCompletedEventHandler(sc_SendCompleted);//邮件异步发送完成后响应事件
        /// 
        /// void smtpClient_SendCompleted(Object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        /// {   //异步发送完成时响应的事件
        ///     Page.Response.Write("<script>alert('邮件已发送完成')</script>"); 
        /// }
        /// </summary>
        /// <param name="emailType">邮箱类型</param>
        /// <param name="outboxUser">发件人</param>
        /// <param name="recipientUsres">收件人集合</param>
        /// <param name="contxt">发送内容</param>
        /// <param name="title">标题</param>
        /// <param name="isBodyHtml">是否为Html</param>
        /// <param name="emailFiles">附件</param>
        /// <returns>SmtpClient 对象</returns>
        public static SmtpClientExp AsyncSender(EmailType emailType, EmailUser outboxUser, List<EmailUser> recipientUsres, String contxt, String title = "", Boolean isBodyHtml = true, params String[] emailFiles)
        {
            //得到SmtpClient对象
            SmtpClientExp smtpClient = GetSender(emailType, outboxUser);

            //得到MailMessage对象
            MailMessage mailMessage = GetMailMessage(outboxUser, recipientUsres, contxt, title, isBodyHtml, emailFiles);

            try
            {
                smtpClient.SendAsync(mailMessage, "");
                return smtpClient;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        /// <summary>
        /// 实例化MailMessage对象
        /// </summary>
        /// <param name="outboxUser">发件人</param>
        /// <param name="recipientUsres">收件人集合</param>
        /// <param name="contxt">发送内容</param>
        /// <param name="title">标题</param>
        /// <param name="isBodyHtml">是否为Html</param>
        /// <param name="emailFiles">附件</param>
        /// <returns>实例化后MailMessage对象</returns>
        private static MailMessage GetMailMessage(EmailUser outboxUser, List<EmailUser> recipientUsres, String contxt, String title = "", Boolean isBodyHtml = true, params String[] emailFiles)
        {
            if (recipientUsres.Count <= 0)
                return null;

            MailMessage mailMessage = new MailMessage();

            //发件人地址
            mailMessage.From = new MailAddress(outboxUser.UserName,"测试邮件");

            //标题
            mailMessage.Subject = title;

            //内容
            mailMessage.Body = contxt;

            //是否是Html
            mailMessage.IsBodyHtml = isBodyHtml;

            //收件人
            for (Int32 i = 0; i < recipientUsres.Count; i++)
                mailMessage.To.Add(new MailAddress(recipientUsres[i].UserName));

            //邮件附件
            foreach (String str in emailFiles)
                mailMessage.Attachments.Add(new Attachment(str));//Attachment参数:包含用于创建此附件的文件路径

            mailMessage.Priority = MailPriority.High;//设置此电子邮件的优先级

            return mailMessage;
        }

        /// <summary>
        /// 实例化一个SmtpClient对象
        /// </summary>
        /// <param name="emailType">邮箱类型</param>
        /// <param name="emailUser">邮箱帐户</param>
        /// <returns>实例化后SmtpClient对象</returns>
        private static SmtpClientExp GetSender(EmailType emailType, EmailUser outboxUser)
        {
            SmtpClientExp sender = null;

            switch (emailType)
            {
                //QQ邮箱
                case EmailType.QQ:
                    {
                        sender = CreateSender("smtp.qq.com", 25, false, outboxUser);
                    }
                    break;
                //163邮箱
                case EmailType.Mail163:
                    {
                        sender = CreateSender("smtp.163.com", 25, true, outboxUser);
                    }
                    break;
                //Gmail邮箱
                case EmailType.Gmail:
                    {
                        sender = CreateSender("smtp.gmail.com", 25, true, outboxUser);
                    }
                    break;
                //Hotmail邮箱
                case EmailType.Hotmail:
                    {
                        sender = CreateSender("smtp.live.com", 25, true, outboxUser);
                    }
                    break;
            }

            return sender;
        }

        /// <summary>
        /// 实例化一个SmtpClient对象
        /// </summary>
        /// <param name="host">主机名称或IP地址</param>
        /// <param name="port">SMTP端口</param>
        /// <param name="enableSsl">是否套用加密连接(必写)</param>
        /// <param name="emailUser">邮箱帐户</param>
        /// <returns>实例化后SmtpClient对象</returns>
        private static SmtpClientExp CreateSender(String host, Int32 port, Boolean enableSsl, EmailUser outboxUser)
        {
            return new SmtpClientExp()
            {
                Host = host,
                Port = port,
                EnableSsl = enableSsl,
                Credentials = new NetworkCredential(outboxUser.UserName, outboxUser.UserPwd)
            };
        }
    }    
}

  测试代码:

using Email.Email;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Email
{
    class Program
    {
        static void Main(string[] args)
        {
            //发送邮件  同步发送

            //发件人信息
            EmailUser user = new EmailUser(){
                UserName = "发件人账号",
                UserPwd = "发件人密码"
            };
            //收件人信息
            List<EmailUser> recipientUsres = new List<EmailUser>(){
                 new EmailUser(){ UserName="收件人1"},
                 new EmailUser(){ UserName="收件人2"} 
            };

            String contxt = "测试内容";

            String title = "这是一封测试邮件";
            //发送邮件
            Boolean result = SOCNetSendMail.Sender(EmailType.QQ, user, recipientUsres, contxt, title);

            Console.WriteLine("邮件发送成功");
        }
    }
}

  

原文地址:https://www.cnblogs.com/fanxp/p/5103623.html