当前位置:   article > 正文

C#定时发送邮件功能

C#定时发送邮件功能

C#定时发送邮件功能

背景

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

定时器+发送邮件

代码

邮件功能模块

  1. using ITSLog.LogManage;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Net;
  5. using System.Net.Mail;
  6. namespace SystemMonitor.Util
  7. {
  8. public static class MailModel
  9. {
  10. private static KSLog log = LogService.GetKSlog(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  11. /// <summary>
  12. /// 发送邮件
  13. /// </summary>
  14. /// <param name="mailEntity"></param>
  15. public static void SendMonitorEmail(MailEntity mailEntity)
  16. {
  17. //MailMessage mail = new MailMessage(mailEntity.SendMailAdress, mailEntity.ReciveAdress);
  18. MailMessage mail = new MailMessage();
  19. mail.From = new MailAddress(mailEntity.SendMailAdress);
  20. foreach (var toItem in mailEntity.ReciveAdress)
  21. {
  22. mail.To.Add(new MailAddress(toItem));
  23. }
  24. SmtpClient client = new SmtpClient();
  25. // 设置SMTP服务器和其他参数
  26. //client.Port = 465; // SMTP端口(通常用于TLS)
  27. client.DeliveryMethod = SmtpDeliveryMethod.Network;
  28. //使用自己的验证邮件设置为false
  29. client.UseDefaultCredentials = false;
  30. client.EnableSsl = true;
  31. // 你的SMTP服务器地址
  32. string[] addressor = mailEntity.SendMailAdress.Split(new Char[] { '@', '.' });
  33. switch (addressor[1])
  34. {
  35. case "163":
  36. client.Host = "smtp.163.com";
  37. break;
  38. case "126":
  39. client.Host = "smtp.126.com";
  40. break;
  41. case "qq":
  42. client.Host = "smtp.qq.com";
  43. break;
  44. case "gmail":
  45. client.Host = "smtp.gmail.com";
  46. break;
  47. case "hotmail":
  48. client.Host = "smtp.live.com";//outlook邮箱//client.Port = 587;
  49. break;
  50. case "foxmail":
  51. client.Host = "smtp.foxmail.com";
  52. break;
  53. case "sina":
  54. client.Host = "smtp.sina.com.cn";
  55. break;
  56. default:
  57. client.Host = "smtp.exmail.qq.com";//qq企业邮箱
  58. break;
  59. }
  60. //client.Host = mailEntity.StmpHost;
  61. // 设置你的邮箱凭据(如果需要)
  62. NetworkCredential credentials = new NetworkCredential(mailEntity.UseCode, mailEntity.PassWord);
  63. client.Credentials = credentials;
  64. // 设置邮件内容
  65. mail.Subject = mailEntity.MailSubject;
  66. mail.Body = mailEntity.MailBody;
  67. mail.SubjectEncoding = System.Text.Encoding.UTF8;
  68. mail.BodyEncoding = System.Text.Encoding.UTF8;
  69. mail.Priority = System.Net.Mail.MailPriority.Normal;
  70. mail.IsBodyHtml = true;
  71. mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
  72. if (mailEntity.accessoryPath != null)
  73. {
  74. foreach (string path in mailEntity.accessoryPath)
  75. {
  76. //将附件添加到邮件
  77. mail.Attachments.Add(new Attachment(path));
  78. //获取或设置此电子邮件的发送通知。
  79. mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
  80. }
  81. }
  82. // 发送邮件
  83. try
  84. {
  85. client.Send(mail);
  86. log.Debug(DateTime.Now.ToString() + "邮件发送成功");
  87. }
  88. catch (Exception ex)
  89. {
  90. log.Debug("初始化停止启动日期失败 :" + ex.ToString());
  91. }
  92. finally
  93. {
  94. client.Dispose();
  95. }
  96. }
  97. }
  98. /// <summary>
  99. /// 邮件实体类
  100. /// </summary>
  101. public class MailEntity
  102. {
  103. /// <summary>
  104. /// 发送地址
  105. /// </summary>
  106. public string SendMailAdress;
  107. /// <summary>
  108. /// 接收地址
  109. /// </summary>
  110. public List<string> ReciveAdress;
  111. /// <summary>
  112. /// 用户
  113. /// </summary>
  114. public string UseCode;
  115. /// <summary>
  116. /// 密码
  117. /// </summary>
  118. public string PassWord;
  119. /// <summary>
  120. /// 标题
  121. /// </summary>
  122. public string MailSubject;
  123. /// <summary>
  124. /// 邮件主体
  125. /// </summary>
  126. public string MailBody;
  127. /// <summary>
  128. /// 抄送地址
  129. /// </summary>
  130. public List<string> accessoryPath { get; set; }
  131. }
  132. }

调用模块

  1. #region 邮件发送相关
  2. /// <summary>
  3. /// 邮件触发器
  4. /// </summary>
  5. private System.Windows.Forms.Timer dailyMailTimer;
  6. /// <summary>
  7. ///
  8. /// </summary>
  9. private DateTime nextRunTime = DateTime.MinValue; // 初始化为一个无效时间
  10. private void InitializeTimer()
  11. {
  12. dailyMailTimer = new System.Windows.Forms.Timer();
  13. dailyMailTimer.Interval = 1000; // 1秒,用于检查时间
  14. dailyMailTimer.Tick += DailyTimer_Tick;
  15. dailyMailTimer.Start(); // 启动Timer
  16. }
  17. private void SetNextRunTime()
  18. {
  19. // 设置下一次运行时间为今天的15:50,如果已经过了这个时间,则设置为明天的15:50
  20. DateTime now = DateTime.Now;
  21. closeTime = Convert.ToDateTime(ConvertDate(InitDate)).Add(TimeSpan.Parse(Config.AutoCloseTime));
  22. DateTime sendMailTime = closeTime.AddMinutes(10);
  23. if (sendMailTime < now)
  24. {
  25. sendMailTime = sendMailTime.AddDays(1); // 设置为明天的同一时间
  26. }
  27. nextRunTime = sendMailTime;
  28. }
  29. private void DailyTimer_Tick(object sender, EventArgs e)
  30. {
  31. if (DateTime.Now >= nextRunTime)
  32. {
  33. dailyMailTimer.Stop(); // 停止Timer,防止在SendEmail期间再次触发
  34. SendEmail(); // 执行任务
  35. SetNextRunTime(); // 重置下一次运行时间
  36. dailyMailTimer.Start(); // 重新启动Timer
  37. }
  38. }
  39. /// <summary>
  40. /// 校验条件满足送发邮件
  41. /// </summary>
  42. public void SendEmail()
  43. {
  44. if (Config.SendMailAddress == "" || Config.SendMailAddress == null) return;
  45. if (Config.ReciveMailAddress == "" || Config.ReciveMailAddress == null) return;
  46. if (Config.Mailsecret == "" || Config.Mailsecret == null) return;
  47. if (true)//校验条件
  48. {
  49. MailEntity mailEntity = new MailEntity
  50. {
  51. SendMailAdress = Config.SendMailAddress,
  52. UseCode = Config.SendMailAddress,
  53. ReciveAdress = new System.Collections.Generic.List<string>() { Config.ReciveMailAddress },
  54. PassWord = Config.Mailsecret,
  55. MailSubject = "邮件名称",
  56. MailBody = "邮件主体"
  57. };
  58. MailModel.SendMonitorEmail(mailEntity);
  59. }
  60. }
  61. #endregion

邮箱设置


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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/865428
推荐阅读
相关标签
  

闽ICP备14008679号