Navicat邮件通知仅对Synchronize等四类任务生效,需先保存同步任务才能启用通知;主题支持TaskName[DateTime]占位符,正文静态且不支持变量,差异结果须依赖日志文件+外部脚本实现。
同步任务必须选 Synchronize 类型才能触发邮件通知
navicat 的邮件通知只对四类任务生效:backup、restore、synchronize、export。如果你在批处理作业里加的是“数据传输”(data transfer)或“sql 查询”,哪怕逻辑上做了对比,邮件开关也始终灰色不可用。
正确做法是:右键目标数据库 → 选择 Synchronize → 按向导完成源/目标配置 → 最后一步务必点“保存为同步任务”,命名如 prod_to_staging_sync。这个保存动作很关键——未保存的同步操作无法被计划任务识别,更不会带出邮件选项。
- 同步任务保存后,它才会出现在“自动运行 → 新建批处理作业”的可拖入列表中
- 若同步过程含结构差异(如新增字段),Navicat 会在日志中明确标出,但这些内容不会自动进邮件正文
- 不支持直接在邮件里嵌入 HTML 表格形式的对比详情;所谓“包含对比结果”,实际只能靠日志文件间接实现
邮件正文不能动态插入同步差异,必须靠日志文件+外部脚本补位
Navicat 邮件功能的主题栏支持 [TaskName]、[Status]、[DateTime] 三个占位符,但正文完全静态,不解析任何变量。也就是说,你收不到类似“发现 3 行不一致”这样的摘要信息。
想让收件人看到真实对比结果,唯一可行路径是:启用日志记录 + 外部读取 + 替换发送。具体操作如下:
- 在同步任务属性 → 高级选项卡 → 勾选“保存运行日志到文件”,路径设为全英文、无空格,例如
C:\navicat_logs\sync_result.log - 确保该路径有写权限,且 Navicat 是以能访问该目录的用户身份运行(Windows 下常需管理员启动)
- 日志文件里会包含类似
Rows differ: 5或Table 'users' structure differs的原始行,但格式是纯文本,无结构化标记 - 若需美化展示,得另写一个 PowerShell 或 Python 脚本,定时读取该日志、提取关键行、拼成 HTML 邮件,再调用系统命令发信(Navicat 自身不提供此能力)
SMTP 配置错误会导致“已触发”却零送达,且无失败反馈
Navicat 的邮件发送是异步回调,不等待 SMTP 响应就返回“邮件已触发”。这意味着:配置错端口、SSL/TLS 开关、授权码失效,甚至邮箱服务商临时限流,都不会在任务日志里报错,你只会收不到邮件。
高频踩坑点集中在以下几项:
- QQ 邮箱填了账号密码却没开“POP3/SMTP 服务”,或用了登录密码而非“授权码”
- SMTP 服务器填
smtp.qq.com却配了端口 587 + TLS(应为 465 + SSL) - 收件人地址写了中文逗号、换行或空格,如
admin@x.com,dba@x.com(正确应为admin@x.com,dba@x.com) - 测试邮件成功不代表定时任务一定成功——因为计划任务可能由系统账户执行,而该账户未授权访问钥匙串(macOS)或凭据管理器(Windows)中的 SMTP 密码
附件无法自动附加同步差异报告,必须手动导出再绑定
Navicat 不生成结构化的“同步差异报告”文件,也不会把对比结果自动转成 Excel 或 CSV。所谓“包含对比结果”的附件,只能靠迂回方式实现:
- 先建一个 SQL 查询,内容为
SELECT * FROM information_schema.TABLES WHERE ...等能反映差异的语句,保存为本地查询 - 再新建一个“导出查询”任务,目标格式选
Excel 文件,路径用<date></date>占位符,如sync_diff_<date>.xlsx</date> - 在同一批处理作业中,把该导出查询拖入,并**手动点击“添加附件”按钮**(图标是回形针)——漏这步,邮件就只有正文没有附件
- 注意:一个批处理作业最多绑一个附件;若需同时发差异表 + 日志文本,得拆成两个独立作业,或用脚本合并文件
真正容易被忽略的是:同步任务的日志内容取决于你在向导中勾选的“详细程度”。默认只记关键步骤,若没在同步设置里主动勾选“显示所有差异行”,日志里连 Rows differ 都不会出现——那后续所有基于日志的动作,都成了无源之水。


















