0

我有一个在 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 端。

4

2 回答 2

0

这篇文章应该有所帮助。我不是 Ruby 专家,所以我帮不上什么忙。

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

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

这是一个 PHP 代码仓库 - 我知道我不知道正确的语言,但是一个很好的例子

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

于 2016-04-19T02:21:10.523 回答
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。

禁用 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
于 2016-04-27T05:10:06.360 回答