• 发送邮件


    邮件自动发送:

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

    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("邮件发送成功");
            }
        }
    }
    

      

  • 相关阅读:
    p1373【奶牛的卧室】
    p1248【交错匹配】(DP)
    QBXT模拟赛T3
    NOIP冲刺班的考试总结
    欧拉回路的一些东西
    一道dp题目
    Blocks
    玩具取名
    Y的积木
    游荡的奶牛
  • 原文地址:https://www.cnblogs.com/fanxp/p/5103623.html
Copyright © 2020-2023  润新知