我有一个Ruby on Rails(v4.1.5)应用程序在RedHat的OpenShift上运行。我正在从Mandrill切换到SendGrid。在开发过程中,我能够将以下内容添加到我的development.rb配置文件中:
ActionMailer::Base.smtp_settings = {
:address => "smtp.sendgrid.net",
:port => 587,
:authentication => "plain",
:domain => ENV["DOMAIN_NAME"],
:enable_starttls_auto => true,
:user_name => ENV["SENDGRID_USERNAME"],
:password => ENV["SENDGRID_PASSWORD"]
}
我可以像以前一样继续使用ActionMailer。我在本地进行了测试,收到了电子邮件,邮件头显示它们来自sendgrid。
然后,我将相同的代码添加到production.rb中,并部署到OpenShift中。我添加了上面代码中使用的新SENDGRID用户名和密码环境变量,并验证了它们在OpenShift上的设置是否正确。
但当我测试它时,日志文件显示它将电子邮件发送到了正确的电子邮件地址,但它没有显示在我的SendGrid面板上,我也没有收到电子邮件。
有人知道OpenShift上还有其他可能显示更多信息的日志文件吗?我只看了应用程序root/runtime/repo/log/production.log.
我尝试删除上面的enable_starttls_auto字段,但没有任何更改。
如何调试此问题?我不知道它是在OpenShift端还是在SendGrid端。
这篇文章应该会有所帮助。我不是Ruby专家,所以我真的帮不上忙。
https://developers.openshift.com/external-services/sendgrid.html
我知道我们有很多用户使用openshift和sendgrid。
这是一个PHP代码回购-我知道我不知道正确的语言,但一个很好的例子
https://github.com/sendgrid/openshift-sendgrid-php
首先,使用Telnet进行直接连接:
telnet smtp-relay.sendinblue.com 587
Trying 94.143.17.4...
如果你得到这个错误:
telnet: Unable to connect to remote host: Connection timed out
那么,问题不在Rails中。
在我的案例中,问题出在端口号上。我的服务器运行在DigitalOcean上,它会阻止与587个端口的连接,除非你要求他们取消阻止,他们也会根据主机名取消阻止,这意味着它可以与mandrill一起工作,但不能与其他端口一起工作。
请记住,"2525"是新的"587",即使对于SendinBlue也是如此。
如果您在telnet上超时,需要检查的其他事项:
- 主机名:人们通常使用"smtp.sednblue.com"而不是"stmp-relay.sendinblue.com"
- 端口:尝试2525
- ipv6与ipv4:检查主机名是否被转换为ipv4。如果没有,请尝试通过编辑"/etc/sysctl.conf"来禁用IPv6
- firewall/AppArmor:检查它们是否不是罪魁祸首
- 主机名解析:在您知道电子邮件发送正常的机器上运行相同的telnet命令。检查翻译后的ip("尝试xxx…"的xxx部分)是否相同。如果没有,请返回服务器并用这个ip替换主机名。如果有效,请更改/etc/hosts并强制主机名使用此ip
禁用IPv6:
将以下行添加到/etc/sysctl.conf
:
#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
更改需要重新启动。
您可以使用测试IPv6是否被禁用
cat /proc/sys/net/ipv6/conf/all/disable_ipv6