You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails多租户邮件通过Postfix发送的域名与SSL错误问题

多租户Rails应用邮件发件域名匹配问题解答

背景信息

Rails邮件器代码

from_string = 'do-not-reply@' + shop.shop_value.email_host
subject_string = 'your order at ' + shop.name
mail(
  from: from_string,
  to:  consumer.email,
  subject: subject_string 
)

Postfix配置(/etc/postfix/main.cf)

myhostname = maindomain.tld
mydestination = $myhostname, maindomain.tld, localhost.online, , localhost

错误日志

Delivered mail 6442d7c523bf1_7fab24fe0933c6@maindomain.tld.mail
[...]
] OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 peeraddr=[::1]:25 state=error: certificate verify failed (hostname mismatch)):

已知条件:可通过openssl_verify_mode: 'none'跳过证书验证,但当前Rails环境设置了config.action_mailer.delivery_method = :sendmail而非SMTP;Postfix为仅发送服务器,各租户域名已配置SPF和DKIM。


问题解答

1. 可将myhostname配置为数组,但Rails如何对接Postfix?是否有必要?

  • Postfix的myhostname本身不支持数组格式,它只能设置为单个主机名,所谓“配置为数组”的说法是误解,多域名配置靠的是mydestination字段。
  • Rails和Postfix对接仅依赖系统sendmail命令(Postfix兼容该命令),不会直接读取Postfix的myhostname配置。
  • 完全没必要修改myhostname适配多租户发件域名:Postfix作为仅发送服务器,发件域名的合法性靠SPF/DKIM保障,租户域名不属于本地投递域名,无需加入mydestination或修改myhostname。

2. 如下配置是否被Rails接受,smtp_settings是否会作用于sendmail处理流程?

config.action_mailer.smtp_settings = {
    openssl_verify_mode: 'none'
}
  • Rails会接受这个配置,但完全不会作用于sendmail投递流程。smtp_settings是专门为:smtp投递方法设计的配置块,当delivery_method设为:sendmail时,Rails会直接忽略smtp_settings内的所有参数。

3. 是否可通过sendmail_settings实现目标?

  • 首先明确:使用:sendmail投递时,Rails是直接调用系统sendmail命令提交邮件,属于本地进程调用,理论上不会触发SSL连接验证。你遇到的SSL错误大概率是配置冲突导致Rails实际走了SMTP投递,或是Postfix自身对外发信时的验证逻辑触发的。
  • sendmail_settings的核心配置是:location(指定sendmail命令路径)和:arguments(传递给sendmail的参数),但sendmail/Postfix没有对应openssl_verify_mode的直接参数,无法通过Rails的sendmail_settings跳过SSL验证。
  • 可行解决方向:
    • 检查Rails配置,确认delivery_method = :sendmail是否真的生效,有没有被其他配置覆盖;
    • 如果是Postfix对外发信的SSL验证问题,直接修改Postfix配置(比如设置smtp_tls_security_level = may);
    • 若一定要在Rails层面解决,可切换回:smtp投递方法,在smtp_settings中配置openssl_verify_mode: 'none'。

内容的提问来源于stack exchange,提问作者Jerome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:02:57