Navicat本身不支持定时发送邮件报表,其“计划任务”仅能定时执行SQL或备份,邮件通知需依赖外部脚本实现;正确做法是Navicat导出CSV至固定路径,再由Python脚本读取并调用SMTP发送,且须确保导出完成后再延时2–3分钟执行脚本。

Navicat 本身不支持定时发送邮件报表
Navicat 是数据库管理工具,不是调度或邮件服务。它没有内置的“定时任务 + 邮件发送”功能。你看到的「计划任务」仅指在 Navicat 中定时执行 SQL 或备份,不能自动发邮件——哪怕勾选了“发送邮件通知”,那也只是任务失败时发告警,且依赖本地 Outlook 配置(Windows)或根本不可靠。
真正可行的替代路径:用 Navicat 计划任务 + 外部脚本触发
核心思路是:让 Navicat 每天导出一份 CSV/Excel 文件到固定路径,再用轻量脚本读取、组装邮件并发送。这样分工明确,也容易调试。
-
Navicat 计划任务设置为每天指定时间执行「导出查询结果」操作,目标格式选CSV(兼容性最好),保存路径写死,例如:C:\reports\daily_sales.csv - 导出前务必在 SQL 查询中加时间过滤,比如:
WHERE sale_date = CURDATE()(MySQL)或WHERE sale_date = CURRENT_DATE(PostgreSQL),避免数据重复或遗漏 - 导出任务需勾选「覆盖同名文件」,否则第二天会失败或生成带编号的副本,脚本读不到预期文件
- 注意 Navicat 导出的 CSV 默认用逗号分隔、无 BOM、字段不加引号——如果销售数据含逗号或换行,必须手动在导出设置里勾选「使用引号包围字段」,否则后续解析会错行
用 Python 脚本完成邮件发送(推荐)
Python 脚本比 Windows 任务计划器 + PowerShell 更可控,尤其处理附件和中文标题时少踩坑。
- 用
smtplib和email标准库即可,无需安装额外包;若需读 Excel,再装pandas - 邮件正文建议用纯文本,避免 HTML 渲染差异;附件用
daily_sales.csv,不要重命名,方便收件人识别 - SMTP 配置关键项:
smtp.gmail.com:587(Gmail)、smtp.exmail.qq.com:465(腾讯企业邮箱),密码必须用应用专用密码(Gmail)或授权码(QQ 邮箱),不能用账号登录密码 - 脚本开头检查文件是否存在:
os.path.exists(r"C:\reports\daily_sales.csv"),不存在则直接退出并写日志,防止发空邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email import encoders
import os
<p>msg = MIMEMultipart()
msg["Subject"] = "每日销售数据报表 - " + os.popen("date /t").read().strip()
msg["From"] = "report@company.com"
msg["To"] = "sales-team@company.com"</p><p>with open(r"C:\reports\daily_sales.csv", "rb") as f:
part = MIMEBase("application", "octet-stream")
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header("Content-Disposition", 'attachment; filename="daily_sales.csv"')
msg.attach(part)</p><p>server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
server.login("report@company.com", "your_app_password")
server.send_message(msg)
server.quit()</p>最后一步:用系统任务计划器运行脚本
别用 Navicat 的计划任务去“调用脚本”,那是伪需求。直接用 Windows 任务计划器(或 Linux cron)在导出任务执行后 2–3 分钟触发 Python 脚本,确保文件已写完。
- 触发时间比 Navicat 任务晚 120 秒,避免文件被占用或未完全落盘
- 操作设置里,“起始于”必须填脚本所在目录,否则相对路径会找不到 CSV
- 如果脚本报错“ModuleNotFoundError”,说明任务计划器用了系统默认 Python,而非你安装的那个——在动作命令中写完整路径,例如:
C:\Python39\python.exe C:\scripts\send_report.py - 首次运行后,立刻查收件箱和任务计划器的“上次运行结果”列,值为
0x0才算成功
实际跑通的关键不在 Navicat 设置多精细,而在于导出路径是否稳定、CSV 格式是否干净、SMTP 凭据是否有效、以及两个任务之间的时间差是否留够。任何一环断开,报表就停在某一天,还很难排查。


















