订单支付成功,后台却没人知道;客户等验证码,邮件迟迟不到。这类问题通常不是“系统没发”,而是通知链路的某一段没配好:发信方式、推送服务,或者调度器。这篇按后台「设置 → 通知」的三块讲清楚。

KingCMS X1 商城前台示例
订单和支付在前台完成,通知由后台设置决定。

一、邮件:系统发信

路径是「设置 → 通知 → 邮件」(/admin/settings/notify/mail)。系统邮件(例如邮箱验证码登录)都按这里的配置发送。发信方式有两种:

  • SMTP:填发信服务器、端口、加密方式、用户名、密码;这是默认方式,适合已有企业邮箱或邮件服务的站点。
  • Cloudflare Email Sending:不需要自建 SMTP,但需要 Workers Paid 计划;要先在 Cloudflare 验证发信域名,再填账户 ID 和接口令牌。

两种方式共用「发件邮箱」和「发件人名称」,发件邮箱必须填,否则不能发信。切换发信方式时,页面只显示当前方式需要的字段;隐藏字段不会被保存,已保存的 SMTP 设置也不会被清掉。接口令牌和 SMTP 密码都按密钥保存,保存后不回显,留空提交表示保留原值。

Cloudflare 方式有几个边界要知道:只通过 Cloudflare 发信,失败不会自动改用 SMTP,也不会自动重试;不支持附件和回复地址;连接超时 8 秒、整个请求 20 秒。发件邮箱必须使用已验证域名下的地址,否则会被拒绝。

二、手机推送:支付与退款

路径是「设置 → 通知 → 手机推送」(/admin/settings/notify/ntfy)。它用于支付成功、退款成功时向指定主题推送消息,需要有一个可用的推送服务(自建或公共服务)。

要填三项:服务地址(如 https://ntfy.example.com,必须以 http/https 开头)、主题名(订阅方要订阅同一个主题)、访问令牌(服务端要求鉴权时填)。推送事件可选「支付成功、退款成功」「仅支付成功」「仅退款成功」「不推送」。服务地址和主题都填写后才会推送,任意一项为空、或事件选「不推送」,都不会发。

推送内容包含订单号、金额和支付渠道。修改设置后不需要重启服务,下一次任务执行时生效。

KingCMS X1 后台设置示例
通知设置属于「设置 → 通知」,保存后由后台任务执行。

三、共同前提:cron:run

手机推送由后台任务执行,需要按安装文档配置每分钟运行一次的 cron:run:系统 crontab、systemd timer 或宝塔「计划任务」都可以,周期选 1 分钟。没有配置 cron 时,订单和退款本身不受影响,但通知不会发出——这是最常见的“配了却不响”的原因。

邮件是同步发送的,不依赖 cron;但如果发信参数错误,验证码邮件会直接失败。两种通知相互独立:邮件不通不影响推送,推送没配也不影响邮件。

四、排查顺序

  1. 先看「发件邮箱」是否填写;再看发信方式需要的字段是否齐全。
  2. Cloudflare 方式检查:计划是否为 Workers Paid、发信域名是否验证、令牌权限是否包含 Email Sending。
  3. 手机推送检查:服务地址和主题是否都填、事件是否选了「不推送」、服务端是否要求令牌。
  4. 最后看 cron:后台任务是否每分钟执行,日志里有没有 cron:run 的记录。

小结

通知链路分三段:邮件负责系统发信,手机推送负责支付/退款提醒,cron 负责把推送跑起来。先把发件邮箱和推送主题这两个“必填项”补齐,再确认 cron 在跑,大部分“收不到通知”的问题都能定位。