在与 Gmail 通信时,ActionMailer 的 "enable_starttls_auto" 设置会保护我的电子邮件凭据吗?

Does ActionMailer's "enable_starttls_auto" setting protect my email credentials when communicating with Gmail?

我有兴趣使用 Rails' ActionMailer 通过 gmail 帐户向用户发送电子邮件。有许多教程建议使用以下设置,它可以完成基本工作:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :user_name            => "my-gmail-address@gmail.com",
  :password             => "my-gmail-password",
  :authentication       => "plain",
  :enable_starttls_auto => true
}

不过,我担心的是安全问题。 Gmail 要求我降低 gmail 帐户的安全设置才能使此方法起作用,此外,presumably,ActionMailer 只使用 BASE64 编码将我的电子邮件凭据发送到 Gmail,这种编码很容易解码。

也就是说,ActionMailer 的“enable_starttls_auto”设置给了我一些希望,即 ActionMailer 和 Gmail 将在交换电子邮件凭据之前执行安全握手,并为凭据通过建立安全通道。是这种情况吗?我可以高枕无忧,还是要真正建立安全连接,我需要通过某种 OAuth 2 API 连接与 gmail 通信吗?

将 "enable_starttls_auto" 设置为 true 将检查服务器是否支持 starttls 并使用它 如果 它支持。但是,在任意 smtp 服务器的情况下,无法保证安全传输:如果服务器不支持 starttls,您的凭据将以明文形式发送。

您是否信任 GMail 始终启用 starttls 是您的选择。

如果你想确定,你可以使用 ssl: true 和 port: 465,如果我没有记错的话 GMail 服务器应该也支持。

enable_starttls_auto 本身并不能保护您,因为中间人可以伪装成 gmail,让您仅以明文连接,窃取您的密码并访问您的电子邮件。

至于如何强制执行 - 要么使用 Gabor Lengyel 建议的 - 正常的 TLS 端口。或者设置 enable_starttls 哪个有效并且应该在某个时候出现在 rails 文档中 #44096. See this answer