fix(submission): 调整 SMTP 提交与发件授权逻辑。

- 启用 SMTP submission 时改为强制使用可读证书文件,并禁止使用容器自带测试证书。
- 收紧发件人校验,拒绝未授权的 From 地址,并支持别名多目标授权。
- 优化发送队列重入与重复消息处理,避免重复记录冲突。
- 让提交证书按需热加载,并稳定 MIME 头序列化顺序。
- 更新部署示例与文档,明确 submission 的证书配置要求。
This commit is contained in:
LanQin_
2026-06-24 13:10:24 +08:00
parent 2476fe0c19
commit d1876691dd
10 changed files with 345 additions and 75 deletions
+24
View File
@@ -462,6 +462,30 @@ func (a *App) migrateSendQueueMessageID(ctx context.Context) error {
return err
}
}
if _, err := a.db.ExecContext(ctx, `DELETE FROM send_queue
WHERE id IN (
SELECT id FROM (
SELECT id,
ROW_NUMBER() OVER (
PARTITION BY mailbox_id, source, message_id
ORDER BY
CASE status
WHEN 'queued' THEN 0
WHEN 'sending' THEN 1
WHEN 'failed' THEN 2
WHEN 'delivered' THEN 3
ELSE 4
END,
created_at DESC,
id DESC
) AS row_num
FROM send_queue
WHERE message_id <> ''
)
WHERE row_num > 1
)`); err != nil {
return err
}
_, err = a.db.ExecContext(ctx, `CREATE UNIQUE INDEX IF NOT EXISTS idx_send_queue_mailbox_source_message_id ON send_queue(mailbox_id, source, message_id) WHERE message_id <> ''`)
return err
}