You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:48:05