通知渠道
手机连接步骤见连接 App。
在控制台配置
- 打开通知,选择 Bark、Pushover、Webhook 或 Mailwake App。
- 填写下方对应渠道的字段。使用 Mailwake App 时先配对手机,再选定接收手机。
- 设置预览、通知语言和重试次数。重试次数为 0 时只尝试一次。
- 保存后明确点击发送测试通知,检查手机或 Webhook 接收端,并查看投递结果。
这些设置对所有邮箱生效。已入队任务按已有投递计划处理,修改后的行为请用一封新邮件验证。
通道配置
通过 /api/v1/settings/delivery 携带当前
revision
配置全局通道。通道、预览、重试次数和通知语言对所有邮箱生效。凭据加密且只写;目标保持原值时,省略凭据字段可保留已存值;修改
Bark 地址须重新输入设备 Key。
| 通道 | 参数 | 凭据 |
|---|---|---|
bark |
bark.endpoint,默认
https://api.day.app
|
bark.key |
native |
默认使用官方生产推送中继服务;通过
MAILWAKE_RELAY_URL 覆盖;在 App 授权中配对手机
|
本地生成并加密保存的哨站身份 |
pushover |
无 |
pushover.token、pushover.user
|
webhook |
HTTPS,可带查询参数 |
webhook.url、webhook.secret(至少
32 个非空白字符)
|
Webhook URL 的路径或查询参数可能包含凭据,因此整个 URL 只写。preview
仅支持 off 或 subject;retry_count
为 0–9,默认 0;language 支持
9 种语言及其地区别名,默认英文。subject 下 Bark/Pushover
正文只显示主题;Webhook 保留结构化的 sender 与 subject,message
只显示主题。off
或主题为空时,正文使用所选通知语言的“收到新邮件”文案。标题保持
{显示名称} · {文件夹},Bark group
使用同一个截断后的标题;测试通知文案保持原值。API 输入
sender_subject 返回 400
config_preview_invalid。第三方通道从
subject 切换为
off
时,同一事务清理所有待处理及失败记录的发件人与主题;后续入队也遵循已保存的预览策略。原生通道始终记录发件人与主题,并保留第三方预览偏好。
Bark 的邮件通知和测试通知均按 Bark App 的历史保存设置保留记录。
Webhook 格式
哨站向配置的地址 POST JSON,不跟随重定向:
{
"version": 1,
"id": "3f9c…",
"test": false,
"mailbox_id": "mbx_example",
"account": "工作邮箱",
"folder": "Clients",
"sender": "anna@example.org",
"subject": "Re: Q4 proposal",
"received_at": "2026-09-28T10:32:00Z",
"title": "工作邮箱 · Clients",
"message": "Re: Q4 proposal"
}
mailbox_id 为稳定邮箱 ID,account
为入队时的显示名称。Bark、Pushover、Webhook
普通通知在所有支持语言中的标题统一为“{显示名称} ·
{文件夹}”。邮箱改名或删除后,已入队任务保留原来的来源信息。测试通知使用独立文案并省略邮箱字段。
sender、subject 仅在
subject 预览下出现;title、message
是已本地化的展示文本,可直接转发给 ntfy、Gotify
等服务。关闭预览后仍会发送显示名称和文件夹,请使用适合提供给通知服务商的名称。
| 请求头 | 含义 |
|---|---|
X-Mailwake-Event |
事件 ID,与正文 id 相同;重试时不变,可用于去重
|
X-Mailwake-Timestamp |
发送时的 Unix 秒 |
X-Mailwake-Signature |
sha256= 加
HMAC-SHA256(secret,
"<timestamp>.<原始正文>")
的十六进制
|
接收端用同一密钥计算签名并以常量时间比较,同时拒绝时间戳偏差超过 5 分钟的请求:
import hashlib, hmac, time
def verify(secret: bytes, timestamp: str, body: bytes, signature: str) -> bool:
expected = "sha256=" + hmac.new(secret, timestamp.encode() + b"." + body, hashlib.sha256).hexdigest()
return abs(time.time() - int(timestamp)) <= 300 and hmac.compare_digest(expected, signature)
返回任意 2xx 视为接收成功;429 与 5xx 按重试配置处理,其他状态结束本轮并记录失败。
保存通知设置只校验字段、地址、配对状态与配置版本,直接保存。需要验证投递时手动点击发送测试通知。Native 测试使用推送中继服务固定内容的免费测试接口,与 App 测试共享额度;正式邮件仍要求 Native Push 权益。
Markdown · AGPL-3.0-only · Mailwake 贡献者