事务性电子邮件不是从OpenShift生产中的rails服务器发送的,但在开发中工作正常

时间:2016-04-09 03:49:50

标签: ruby-on-rails openshift actionmailer sendgrid sparkpost

我在RedHat的OpenShift上运行了一个Ruby on Rails(v4.1.5)应用程序。 我正在从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上可能显示更多信息的任何其他日志文件?我只看了app-root / runtime / repo / log / production.log。

我尝试删除上面的enable_starttls_auto字段但没有任何更改。

如何调试此问题?我不知道它是在OpenShift方面还是在SendGrid上。

2 个答案:

答案 0 :(得分:0)

这篇文章应该有所帮助。我不是Ruby专家,所以我无法提供帮助。

https://developers.openshift.com/external-services/sendgrid.html

我知道我们有很多用户使用openshift和sendgrid。

这是一个PHP代码回购 - 我知道我不是正确的语言,而是一个很好的例子

https://github.com/sendgrid/openshift-sendgrid-php

答案 1 :(得分:0)

首先,与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上是否超时的其他事项:

  1. 主机名:人们常常使用" smtp.sendinblue.com"而不是" stmp-relay.sendinblue.com"。
  2. 端口:尝试2525。
  3. ipv6 vs ipv4 :检查主机名是否被翻译为IPv4。如果没有,请尝试通过编辑" /etc/sysctl.conf"来禁用IPv6。
  4. firewall / AppArmor :检查他们是否不是罪魁祸首。
  5. 主机名解析:在您知道电子邮件发送正常的计算机上运行相同的telnet命令。检查翻译的ip("尝试xxx ..."的xxx部分)是否相同。如果没有,请返回到您的服务器并用此ip替换主机名。如果有效,请更改/ etc / hosts并强制主机名使用此ip。
  6. 禁用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