如何设置 SSL 协议以使 ActionMailer 使用 TLS 连接?

5

我在使用Rails 5.x应用程序时,尝试使用我的校园SMTP服务器时遇到了问题。 我收到以下错误消息:SSL_connect returned = 1 errno = 0 state = SSLv2 / v3 read server hello A:unknown protocol。

以下是我的配置:

config.action_mailer.smtp_settings = {
    address:              'address.domain',
    port:                 587,
    user_name:            'UNAME',
    password:             'PWD',
    authentication:       :login,
    tls:                  true,
    enable_starttls_auto: true
  }

为确保我使用的是最新的openssl版本,我还在我的Gemfile中添加了“openssl”依赖项,并安装了openssl-2.1.2。
接下来有什么建议?

我已被告知需要使用TLSv1.2或1.3。 - Shawn M. Kiewel
2个回答

4
port:                 587,
...
tls:                  true,
enable_starttls_auto: true

根据文档的说明:“:ssl / :tls-启用SMTP连接使用SMTP/TLS(SMTPS:直接TLS连接)”。但是端口587不适用于直接TLS,而是通过STARTTLS命令进行TLS升级。如果启用了直接TLS,则在端口465上执行。因此,您的客户端尝试使用TLS访问非TLS连接,这导致出现此奇怪的错误。有关此类问题的解释,请参见我的解释(针对Perl而非Ruby的类似问题)。要解决问题,请使用端口465和tls(如果服务器启用),或者使用端口587并依赖于enable_starttls_auto进行后续升级到TLS。

将 tls: true 移除后,问题迎刃而解!非常感谢您! - Shawn M. Kiewel

1
我现在正在使用Rails和电子邮件做一些事情,但是文档中缺乏关于要求STARTTLS的描述,这让我感到困扰。在不强制要求的情况下,我认为几乎没有任何作用。

因此我查看了源代码。自Ruby 2.4以来,强制执行STARTTLS已经得到支持。

似乎可以通过设置enable_starttls来启用在Rails中启用STARTTLS,就像启用enable_starttls_auto一样。虽然它没有被记录在文档中,但所有设置似乎都会被传递给Mail::SMTP,所以无论它支持什么都可以传递。

更新:Rails项目接受了我的文档更新#44096


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接