当 MDaemon 服务(SMTP、Webmail、ActiveSync 或任何其他组件)意外停止时,每一分钟的沉默都意味着用户无法发送或接收邮件。很多管理员往往要等到用户投诉后才发现故障。其实你不需要第三方监控工具,也能在第一时间收到通知。
Windows 自带的性能监视器(Performance Monitor)可以监控服务是否停止,并在检测到异常后立即触发告警。这篇教程将带你完成全套端到端设置:创建性能计数器警报、将其关联到发送通知邮件的 PowerShell 脚本,并测试整条链路,搭建一套零成本的 MDaemon 服务监控方案。
在开始配置之前,先看清你将构建的整体流程。每个框代表你要配置的 Windows 组件,按配置顺序列出:

性能监视器(perfmon)是每个受支持的 Windows Server 版本都自带的组件,无需额外采购或部署第三方平台,就能完成基础的服务监控与异常告警。它可以监视计数器(例如 MDaemon 进程是否正在运行),并在该计数器跨过阈值时触发操作。结合任务计划程序(Task Scheduler)和一段简短的 PowerShell 脚本,它就变成一个轻量级、零成本的自动告警系统,直接运行在邮件服务器本地。
本文介绍的方法适用于:
你需要准备好以下内容:
性能监视器通过可执行文件名称(不带 .exe 扩展名)来跟踪进程。对于最常见的 MDaemon 服务,它们分别是:
MDaemon — 核心邮件引擎WorldClient — Webmail 邮件系统WebAdmin — 远程管理MDSpamD — ActiveSync 服务WCXMPPServer — XMPP/即时通讯服务在 MDaemon 服务器上打开任务管理器,在“详细信息”选项卡下确认确切的进程名称。如果你要同时监控多个服务,需要为每个服务重复以下步骤。

在构建警报本身之前,先创建它将要运行的 PowerShell 脚本。将以下代码保存为 C:\Scripts\Send-MDaemonAlert.ps1,并根据你的环境调整参数:
param(
[string]$ServiceName = "MDaemon"
)
$smtpServer = "smtp.yourrelay.com"
$smtpPort = 587
$smtpUser = "alerts@example.com"
$smtpPass = ConvertTo-SecureString "YOUR-APP-PASSWORD" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($smtpUser, $smtpPass)
$from = "alerts@example.com"
$to = "admin@example.com"
$subject = "[警报] MDaemon 服务 '$ServiceName' 在 $env:COMPUTERNAME 上已宕机"
$body = @"
服务器 $env:COMPUTERNAME 上的性能监视器警报检测到:
MDaemon 相关进程 '$ServiceName' 当前未运行。
检测时间 : $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
服务器 : $env:COMPUTERNAME
服务 : $ServiceName
请立即进行排查。
"@
Send-MailMessage -From $from -To $to -Subject $subject -Body $body `
-SmtpServer $smtpServer -Port $smtpPort -UseSsl `
-Credential $credential
几点重要说明:
Export-CliXml 导出凭据并在运行时导入,或者使用 Windows 凭据管理器(Windows Credential Manager)。Send-MailMessage 标记为过时(legacy),但它仍可正常使用,并且是此类脚本中最简单的方法。如果你喜欢现代化替代方案,可以从 PowerShell Gallery 安装 Send-MailKitMessage 模块并替换此命令。非常关键:请勿通过 MDaemon 本身进行中继!
请将中继指向被监控的 MDaemon 服务器之外的其他 SMTP 服务。如果 MDaemon 恰好是宕机的服务,通过它发出的警报将永远无法离开服务器。这是人们设置此功能时最常犯的错误。 告警链路不能依赖故障源本身,否则一旦服务中断,管理员将完全收不到通知。
在继续下一步之前,先单独测试脚本:
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\Send-MDaemonAlert.ps1" -ServiceName "MDaemon (测试)"
如果成功收到测试邮件,说明可以继续。
性能监视器警报只能触发计划任务,而不能直接运行脚本。我们需要创建性能监视器将调用的任务:
taskschd.msc)。MDaemon-Down-Alert。powershell.exe-ExecutionPolicy Bypass -File "C:\Scripts\Send-MDaemonAlert.ps1" -ServiceName "MDaemon"在任务计划程序中手动运行一次该任务,确认其能够正常发送邮件。

现在来到最核心的部分:监控进程并触发任务的警报。
perfmon.msc)。MDaemon Service Alert,选择 手动创建(高级),然后点击“下一步”。MDaemon(或你要监控的进程)。点击“添加”,然后点击“确定”。1。这意味着:“只要进程没有有效的 PID(即进程未运行),就触发警报。”
默认情况下,警报每 15 秒才检查一次。你可以根据需求缩短或延长该间隔:
MDaemon Service Alert。DataCollector01,打开 属性。MDaemon-Down-Alert(即第 3 步创建的任务名称)。在“任务参数”中可以传入 MDaemon 或其他标签,以便邮件明确标出具体的服务。30 秒或 60 秒。采样过密会增加系统开销,采样过疏则会导致感知故障的时间变长。右键点击 MDaemon Service Alert 数据收集器组,选择 启动。
提示: 为了让警报在服务器重启后依然有效,请打开其属性,在 计划 选项卡中添加启动计划;或者直接在数据收集器组的“属性”→“常规”选项卡中配置为随系统自动启动。
对于 Webmail (WorldClient)、WebAdmin、ActiveSync 或任何其他组件,都可以沿用相同的模式。你可以选择:
-ServiceName 参数的任务(推荐,排错逻辑更清晰);测试步骤如下:
services.msc)。MDaemon 服务。Diagnosis-PLA 事件源的记录,表明警报已触发;MDaemon-Down-Alert 计划任务的历史记录显示运行成功。基础功能搞定后,以下几个小改进能大幅提升生产环境下的可靠性:
将 Windows 服务恢复机制作为第一道防线:
在 services.msc 中打开 MDaemon 服务的属性,切换到 恢复 选项卡,将“第一次失败”和“第二次失败”都设置为 “重新启动服务”。这通常能在警报触发之前就解决宕机问题——但警报依然需要保留,因为你必须要知道曾经发生过故障。
将警报发送到邮件组,而非个人邮箱:
如果接收警报的唯一管理员正好休假,警报就形同虚设。
考虑引入第二通知渠道:
邮件通知在工作时间很有效,但在夜间很容易被忽略。只需要多写几行代码,相同的 PowerShell 脚本就可以将消息推送至 Microsoft Teams Webhook、通过 Twilio 触发短信,或发布到 Slack 频道。
监控“监控者本身”:
配置每周一次的定期测试;哪怕只是让计划任务发送一封带有“这是一次测试”主题的邮件,也能确保中继凭据没有过期、脚本依旧可以正常执行。
告警解决的是“第一时间知道宕了”。如果还希望主服务器故障后业务能自动切走,需要把监控和集群、故障转移一起规划,可继续阅读:邮件服务器宕机怎么办?MDaemon 高可用(HA)与故障转移完整方案。
借助于性能监视器、任务计划程序以及一段简短的 PowerShell 脚本,无需安装任何额外的第三方软件,仅使用 Windows 系统自带的工具,就能实现与专业监控套件相同的“故障即时通知”功能,完成一套零成本和 MDaemon 服务监控与自动告警。
首次配置大约只需要 15 分钟,后续扩展到其他 MDaemon 组件也只需要几分钟。对于极其依赖 MDaemon 进行日常沟通的企业而言,只要它在用户发觉前捕获到一次故障,这项投入就物超所值。
上海云璨信息技术有限公司提供 MDaemon 产品代理、技术咨询与部署支持服务,围绕企业邮件服务器建设、系统部署、高可用、故障转移及邮件迁移等场景,帮助企业搭建稳定可靠的邮件系统。
如果您的企业正在规划或优化 MDaemon 邮件服务器,欢迎联系上海云璨了解产品与实施方案。
咨询电话:021-50583875
咨询邮箱:service@yuncan.com
如果您同时希望在邮件抵达服务器和用户之前加强垃圾邮件、钓鱼邮件及恶意软件防护,也可以了解 SecurityGateway 邮件安全网关解决方案。