C#定时发送邮件功能

C#定时发送邮件功能

背景

自动运维监控客户端在自动关闭时,需要给实施同学发送提醒邮件。支持163邮箱、qq邮箱、火狐邮箱等各种通用邮箱。

定时器+发送邮件

代码

邮件功能模块

using ITSLog.LogManage;
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Mail;

namespace SystemMonitor.Util
{
    public static class MailModel
    {
        private static KSLog log = LogService.GetKSlog(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="mailEntity"></param>
        public static void SendMonitorEmail(MailEntity mailEntity)
        {
            //MailMessage mail = new MailMessage(mailEntity.SendMailAdress, mailEntity.ReciveAdress);
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress(mailEntity.SendMailAdress);
            foreach (var toItem in mailEntity.ReciveAdress)
            {
                mail.To.Add(new MailAddress(toItem));
            }
            SmtpClient client = new SmtpClient();

            // 设置SMTP服务器和其他参数  
            //client.Port = 465; // SMTP端口(通常用于TLS)  
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            //使用自己的验证邮件设置为false
            client.UseDefaultCredentials = false;
            client.EnableSsl = true;
            // 你的SMTP服务器地址  
            string[] addressor = mailEntity.SendMailAdress.Split(new Char[] { '@', '.' });
            switch (addressor[1])
            {
                case "163":
                    client.Host = "smtp.163.com";
                    break;
                case "126":
                    client.Host = "smtp.126.com";
                    break;
                case "qq":
                    client.Host = "smtp.qq.com";
                    break;
                case "gmail":
                    client.Host = "smtp.gmail.com";
                    break;
                case "hotmail":
                    client.Host = "smtp.live.com";//outlook邮箱//client.Port = 587;
                    break;
                case "foxmail":
                    client.Host = "smtp.foxmail.com";
                    break;
                case "sina":
                    client.Host = "smtp.sina.com.cn";
                    break;
                default:
                    client.Host = "smtp.exmail.qq.com";//qq企业邮箱
                    break;
            }
            //client.Host = mailEntity.StmpHost;

            // 设置你的邮箱凭据(如果需要)  
            NetworkCredential credentials = new NetworkCredential(mailEntity.UseCode, mailEntity.PassWord);
            client.Credentials = credentials;

            // 设置邮件内容  
            mail.Subject = mailEntity.MailSubject;
            mail.Body = mailEntity.MailBody;
            mail.SubjectEncoding = System.Text.Encoding.UTF8;
            mail.BodyEncoding = System.Text.Encoding.UTF8;
            mail.Priority = System.Net.Mail.MailPriority.Normal;
            mail.IsBodyHtml = true;
            mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
            if (mailEntity.accessoryPath != null)
            {
                foreach (string path in mailEntity.accessoryPath)
                {
                    //将附件添加到邮件
                    mail.Attachments.Add(new Attachment(path));
                    //获取或设置此电子邮件的发送通知。
                    mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
                }
            }

            // 发送邮件  
            try
            {
                client.Send(mail);
                log.Debug(DateTime.Now.ToString() + "邮件发送成功");
            }
            catch (Exception ex)
            {
                log.Debug("初始化停止启动日期失败 :" + ex.ToString());
            }
            finally
            {
                client.Dispose();
            }
        }
    }

    /// <summary>
    /// 邮件实体类
    /// </summary>
    public class MailEntity
    {
        /// <summary>
        /// 发送地址
        /// </summary>
        public string SendMailAdress;
        /// <summary>
        /// 接收地址
        /// </summary>
        public List<string> ReciveAdress;
        /// <summary>
        /// 用户
        /// </summary>
        public string UseCode;
        /// <summary>
        /// 密码
        /// </summary>
        public string PassWord;
        /// <summary>
        /// 标题
        /// </summary>
        public string MailSubject;
        /// <summary>
        /// 邮件主体
        /// </summary>
        public string MailBody;
        /// <summary>
        /// 抄送地址
        /// </summary>
        public List<string> accessoryPath { get; set; }
    }
}

调用模块

        #region 邮件发送相关
        /// <summary>
        /// 邮件触发器
        /// </summary>
        private System.Windows.Forms.Timer dailyMailTimer;
        /// <summary>
        /// 
        /// </summary>
        private DateTime nextRunTime = DateTime.MinValue; // 初始化为一个无效时间  
        private void InitializeTimer()

        {
            dailyMailTimer = new System.Windows.Forms.Timer();
            dailyMailTimer.Interval = 1000; // 1秒,用于检查时间  
            dailyMailTimer.Tick += DailyTimer_Tick;
            dailyMailTimer.Start(); // 启动Timer  
        }
        private void SetNextRunTime()
        {
            // 设置下一次运行时间为今天的15:50,如果已经过了这个时间,则设置为明天的15:50  
            DateTime now = DateTime.Now;
            closeTime = Convert.ToDateTime(ConvertDate(InitDate)).Add(TimeSpan.Parse(Config.AutoCloseTime));
            DateTime sendMailTime = closeTime.AddMinutes(10);
            if (sendMailTime < now)
            {
                sendMailTime = sendMailTime.AddDays(1); // 设置为明天的同一时间  
            }
            nextRunTime = sendMailTime;
        }

        private void DailyTimer_Tick(object sender, EventArgs e)
        {
            if (DateTime.Now >= nextRunTime)
            {
                dailyMailTimer.Stop(); // 停止Timer,防止在SendEmail期间再次触发  
                SendEmail(); // 执行任务  
                SetNextRunTime(); // 重置下一次运行时间  
                dailyMailTimer.Start(); // 重新启动Timer  
            }
        }
        /// <summary>
        /// 校验条件满足送发邮件
        /// </summary>
        public void SendEmail()
        {
            if (Config.SendMailAddress == "" || Config.SendMailAddress == null) return;
            if (Config.ReciveMailAddress == "" || Config.ReciveMailAddress == null) return;
            if (Config.Mailsecret == "" || Config.Mailsecret == null) return;


            if (true)//校验条件
            {
                MailEntity mailEntity = new MailEntity
                {
                    SendMailAdress = Config.SendMailAddress,
                    UseCode = Config.SendMailAddress,
                    ReciveAdress = new System.Collections.Generic.List<string>() { Config.ReciveMailAddress },
                    PassWord = Config.Mailsecret,
                    MailSubject = "邮件名称",
                    MailBody = "邮件主体"
                };
                MailModel.SendMonitorEmail(mailEntity);
            }


        }
        #endregion

邮箱设置


生活不易,猫猫叹气。Q-Q

  • 17
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值