我已经设置了 Postfix + Courier 服务器,并使用 SMTP 服务器设置配置了 Rails 应用。每当 Rails 应用尝试发送电子邮件时,Postfix 日志中都会显示以下内容(在 master.cf 中设置了额外的日志详细程度)
Feb 22 03:57:24 alpha postfix/smtpd[1601]: Anonymous TLS connection established from localhost[127.0.0.1]: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)
Feb 22 03:57:24 alpha postfix/smtpd[1601]: smtp_get: EOF
Feb 22 03:57:24 alpha postfix/smtpd[1601]: match_hostname: localhost ~? 127.0.0.0/8
Feb 22 03:57:24 alpha postfix/smtpd[1601]: match_hostaddr: 127.0.0.1 ~? 127.0.0.0/8
Feb 22 03:57:24 alpha postfix/smtpd[1601]: lost connection after STARTTLS from localhost[127.0.0.1]
Feb 22 03:57:24 alpha postfix/smtpd[1601]: disconnect from localhost[127.0.0.1]
Feb 22 03:57:24 alpha postfix/smtpd[1601]: master_notify: status 1
Feb 22 03:57:24 alpha postfix/smtpd[1601]: connection closed
关于为什么身份验证后会丢失连接,您有什么想法吗?
答案1
也许 rails 应用程序不信任 postfix 证书?
答案2
ActionMailer 已更改为更安全的默认配置,并以 TLS 模式检查服务器证书(自版本 2 或 3 起)。
一些解决方案如下:
- 在应用程序中恢复旧的 Rails 行为:添加
openssl_verify_mode: 'none'
到 Rails 配置中 - 在服务器上禁用 TLS:
smtpd_use_tls=no
在 Postfix 配置中设置 - 在服务器上设置有效的 TLS 证书,这些证书可通过客户端(Rails 应用程序)上的证书颁发机构进行验证。如果服务器与本例中的情况相同,那么这可能有点过头了,但对于这种配置,您需要确保 smtpd 未在公共端口上监听。