事务性电子邮件不是从OpenShift上生产中的rails服务器发送的,但在开发中运行良好



我有一个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上超时,需要检查的其他事项:

  1. 主机名:人们通常使用"smtp.sednblue.com"而不是"stmp-relay.sendinblue.com"
  2. 端口:尝试2525
  3. ipv6与ipv4:检查主机名是否被转换为ipv4。如果没有,请尝试通过编辑"/etc/sysctl.conf"来禁用IPv6
  4. firewall/AppArmor:检查它们是否不是罪魁祸首
  5. 主机名解析:在您知道电子邮件发送正常的机器上运行相同的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

相关内容

  • 没有找到相关文章

最新更新