如何使用C#在控制台应用中格式化邮件通知布局以展示DMZ应用状态
解决方案
核心调整逻辑:将原有单站点检测完成即发信的逻辑,改为先汇总所有站点的运行状态,最后统一发送一封汇总邮件,符合管理层要求的排版规则。
修改后的完整代码如下:
using System; using System.Collections.Generic; using System.Net; using System.Net.Mail; using System.Net.NetworkInformation; using System.Configuration; namespace showserverstatus { class Program { static int Main(string[] args) { int errorCount = 0; // 存储所有应用的状态行 List<string> statusLines = new List<string>(); foreach (string site in args) { bool isNormal = CheckServerStatus(site, out string statusText); statusLines.Add($"{site}:{statusText}"); if (!isNormal) { errorCount++; } } // 拼接邮件正文 string emailBody = "以下是DMZ服务器的应用运行状态,请查阅:\n"; emailBody += string.Join("\n", statusLines); // 统一发送邮件 SendEmail("Status Of Applications on DMZ Server", emailBody); return errorCount; } /// <summary> /// 检测单个站点运行状态 /// </summary> /// <param name="site">站点地址</param> /// <param name="statusText">状态文本</param> /// <returns>是否正常运行</returns> static bool CheckServerStatus(string site, out string statusText) { Ping pingSender = new Ping(); PingReply reply = pingSender.Send(site, 10000); if (reply.Status != IPStatus.Success) { statusText = "DOWN"; return false; } statusText = "UP"; return true; } public static void SendEmail(string subject, string body) { using MailMessage mm = new MailMessage(ConfigurationManager.AppSettings["FromEmail"], "myemail@gmail.com"); mm.To.Add("myemail@gmail.com"); mm.CC.Add("myother@att.net"); mm.Subject = subject; mm.Body = body; mm.IsBodyHtml = false; SmtpClient smtp = new SmtpClient() { Host = ConfigurationManager.AppSettings["Host"], Port = int.Parse(ConfigurationManager.AppSettings["Port"]), EnableSsl = true, UseDefaultCredentials = false, Credentials = new NetworkCredential(ConfigurationManager.AppSettings["Username"], ConfigurationManager.AppSettings["Password"]), }; Console.WriteLine("Sending email..."); smtp.Send(mm); Console.WriteLine("Email sent."); } } }
关键改动说明
- 移除了单站点检测完成就发信的逻辑,新增集合存储所有站点的检测结果
- 所有站点检测完成后,按照要求拼接固定开头+逐行状态的邮件正文
- 邮件主题固定为要求的「Status Of Applications on DMZ Server」
- 保留了原有程序返回异常站点数量的逻辑,不会影响现有调度规则
- 移除了原有发信后的3秒等待,因为现在仅需发一次邮件,无需多次等待
内容的提问来源于stack exchange,提问作者Kenny
相关产品推荐
相关产品推荐

