我正在尝试为Ruby on Rails应用程序设置一个简单的电子邮件发件人。我已经安装了Postfix并在DNS服务器上添加了SFP记录,因此电子邮件确实可以通过垃圾邮件过滤器,但是我也想对邮件使用TLS加密,并且没有找到有效的设置。
这是我尝试过的一些事情:
我们已经从GoDaddy购买了证书。当我通过以下方式告诉postfix使用该证书时:
Postfix配置
# /usr/share/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/my-cert.pem
smtpd_tls_key_file=/etc/ssl/private/my-cert.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/
Rails Configs
# /config/environments/my_env.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'localhost',
authentication: 'plain',
domain: 'my_domain.com',
enable_starttls_auto: true
}
错误响应为hostname "localhost" does not match the server certificate
如果我将rails config中的地址更改为服务器的域,则会抛出454 4.7.1 <test_recipient@gmail.com>: Relay access denied
。
问题是,我不明白为什么这里需要SMTP。我正在从本地服务器发送邮件,因此不需要SMTP /身份验证。我的直觉是我可以告诉Rails直接使用:sendmail,但是我还没有找到让sendmail使用TLS的方法。
我感觉好像丢失了一些东西,我只想对从发件人到收件人的邮件进行加密。 (即避免使用Gmail red unlocked lock)我是否需要其他我不知道的工具? (对Mandrill等第三方邮件服务器不感兴趣。)
答案 0 :(得分:1)
在rails配置中,您必须将其指向实际地址。 Rails正在读取证书,查看证书中包含的所有内容并将其与您提供的地址进行比较。
例如,如果您购买了证书,并说它是mail.mydomain.com
,则在Rails连接到后缀服务器时,它将检查证书。在您的rails配置中,localhost
的地址与mail.mydomain.com
的证书签名不匹配,因此失败。有3种选择
从长远来看,如果后缀服务器受到威胁,则选项2的风险更大,但这是常用的。
您的主要观点是确保邮件传输已加密。 Rails可以使用本地系统传递邮件并将邮件放入linux消息总线吗?届时它将永远不会使用网络,而后缀将处理超过该时间点的加密。