Ruby on rails 事务性电子邮件在OpenShift的生产环境中未从rails服务器发送,但在开发环境中运行良好
我有一个RubyonRails(v4.1.5)应用程序运行在RedHat的OpenShift上。 我正在从Mandrill切换到SendGrid。在开发中,我能够将以下内容添加到development.rb配置文件中:Ruby on rails 事务性电子邮件在OpenShift的生产环境中未从rails服务器发送,但在开发环境中运行良好,ruby-on-rails,openshift,actionmailer,sendgrid,sparkpost,Ruby On Rails,Openshift,Actionmailer,Sendgrid,Sparkpost,我有一个RubyonRails(v4.1.5)应用程序运行在RedHat的OpenShift上。 我正在从Mandrill切换到SendGrid。在开发中,我能够将以下内容添加到development.rb配置文件中: ActionMailer::Base.smtp_settings = { :address => "smtp.sendgrid.net", :port => 587, :authentication => "plain", :dom
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上的其他日志文件可能会显示更多信息?我只查看了approot/runtime/repo/log/production.log
我已尝试删除上面的enable_starttls_auto字段,但没有任何更改
如何调试此问题?我不知道它是在OpenShift端还是在SendGrid端。本文应该会有所帮助。我不是红宝石专家,所以我真的帮不了你 我知道我们有很多用户使用openshift和sendgrid 这里是一个PHP代码repo-我知道我不知道正确的语言,但一个很好的例子
首先,与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是否超时的其他事项:
禁用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
确保生产环境中所有必要的端口都已打开。SendGrid和Mandrill端口号都相同(587)。它与Mandrill一起工作,没有任何改变。我尝试使用SendInBlue而不是SendGrid。同样,它在本地开发中起作用,但在OpenShift的生产中不起作用。我想这就是问题所在。请使用SparkPost端口587和2525重试。同样的结果。除了Mandrill之外,OpenShift上没有其他功能。现在我真的被卡住了。这是一个很长的问题,但是试着把行
:authentication=>“plain”
改为:authentication=>:plain
,我差不多都在做这些了。但我在Rails 4中使用ActionMailer。ActionMailer使用他们提到的邮件宝石。我还发现其他SendGrid文档显示了使用ActionMailer时的配置,这与我所做的相同。我认为OpenShift的问题更多,因为我在几种不同的事务性电子邮件服务中得到了相同的结果。感谢您提供的详细答案。但是telnet在我运行rails的OpenShift服务器上工作:>telnet smtp-relay.sendinblue.com 587 Trying 94.143.17.4。。。已连接到smtp-relay.sendinblue.com。转义字符为“^]”。220 smtp-relay.sendinblue.com ESMTP sendinblue smtp 2.0,我的rails配置中确实有正确的主机名。您能在此服务器上打开rails控制台吗<代码>RAILS\u ENV=生产RAILS c。然后,尝试从那里发送电子邮件<代码>MyMailer.new(参数1,参数2)。传递。它返回什么?在OpenShift上运行rails控制台时遇到其他问题。正在努力解决这个问题,但可能不值得。我可能得另找一个主人。