这是我在 setup_email.rb 文件中设置的内容,
if Rails.env.production?
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "username",
:password => "mypass",
:authentication => "login",
:enable_starttls_auto => true
}
end
此代码适用于开发和准备环境。
这段代码在生产环境中运行良好,几天后它突然停止工作,我收到错误消息。我尝试设置openssl_verify_mode: none
仍然不起作用。
然后我更换了 Gmail 账户,但还是出现同样的错误。似乎是服务器端出了问题
错误:
OpenSSL::SSL::SSLError:主机名“smtp.gmail.com”与服务器证书不匹配
我尝试了网上的各种方法,但都没有用。任何帮助我都会很感激。
答案1
在同一生产系统上使用:
openssl s_client -connect smtp.gmail.com:587 -starttls smtp -showcerts
在我的系统上,输出包括:
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
您的 smtp 软件可能会检查 CN=smtp.gmail.com,然后发现其中存在其他内容。例如,有人可能将自己插入到您和 gmail.com 之间。不一定是以敌对的方式,可能是简单的/etc/hosts
修改,或者是对 socks 代理的更改。