根本原因是Navicat邮件通知需全局SMTP配置生效且任务属性中显式启用通知并匹配触发条件;测试邮件仅验证SMTP连通性,不走任务通知链路,而计划任务还需满足任务类型支持、通知开关开启、父级未禁用等多重条件。

测试邮件成功但任务执行后不发,根本原因是 Navicat 的邮件通知不是“任务自带能力”,而是依赖两个独立条件同时满足:全局 SMTP 配置生效 + 任务属性中显式启用通知且触发条件匹配。
为什么“测试邮件”能过,但计划任务静默失败
点击“传送测试邮件”只验证全局 SMTP 设置是否可连通、凭据是否通过认证;它完全不走任务通知链路。而计划任务发邮件需额外经过三道关卡:
- 批处理作业中必须包含
Backup、Restore、Synchronize或Export四类之一——纯Query或Import即使执行成功也绝不会触发通知 - 该任务在批处理编辑界面中必须右键 → “属性” → 勾选
发送邮件通知,且下方“通知条件”不能是默认的“关闭”,要设为“所有成功操作”或“所有失败操作” - 若使用 Navicat Premium 16+,还需确认该任务未被嵌套在禁用通知的父级批处理中(子任务继承父级通知开关)
任务属性里“发送邮件通知”选项灰色不可点
这说明当前批处理尚未添加任何支持通知的任务类型。常见误操作是:
- 先建了
Query任务并保存,再试图给它加邮件——无效,Query不支持通知机制 - 把
Export任务拖进批处理后没点“添加”,只是列在“可用工作”里——它不算已加入任务流 - 使用了
Import但误以为它等同于Restore——实际Import属于数据加载动作,无状态反馈,Navicat 明确不支持其绑定通知
SMTP 配置看似正确,但任务执行时仍无邮件
全局 SMTP 设置虽通过测试,但任务执行时可能因权限或上下文失效:
- Windows 下计划任务若以系统账户或服务账户运行,Navicat 无法读取当前用户凭据(尤其是授权码),必须改用“以当前登录用户身份运行”并勾选“不管用户是否登录都要运行”
- macOS 上 Navicat 启动时若未获钥匙串访问授权,SMTP 密码会静默为空——需手动打开钥匙串访问,搜索
navicat或smtp,双击对应条目 → “访问控制” → 添加navicat应用 - 收件人地址填在任务属性里(逗号分隔),而非全局设置中;若此处为空或格式错误(如含中文逗号、空格),邮件直接丢弃且无日志提示
邮件内容动态变量只在主题生效,正文写死
很多人以为 [DateTime] 这类占位符能在正文中展开,结果收到的邮件正文全是字面量。真实规则是:
- 仅主题栏支持
[TaskName]、[Status]、[DateTime]三个变量,且必须严格按方括号+大驼峰书写,大小写敏感 - 正文不支持任何变量,若需带时间戳或数据库名,唯一办法是勾选任务属性中的
保存运行日志到文件,再用外部脚本读取日志拼接邮件 - 主题中若混入其他符号如
[TaskName]_backup_[DateTime],Navicat 仍能识别并替换,但建议保持简洁避免解析异常
真正容易被忽略的是:Navicat 的邮件通知没有失败重试、不校验收件箱有效性、也不记录投递结果。一旦 SMTP 连接超时或目标邮箱满额,它就默默吞掉错误——你只能去查看 Navicat 自动运行日志(路径见帮助文档),而不是等一封“发送失败”的提醒邮件。


















