使用外部SMTP在Heroku上发送电子邮件

时间:2012-08-01 07:59:57

标签: ruby-on-rails heroku smtp

我想从Heroku上的rails应用程序发送电子邮件。 由于Heroku不支持SMTP,我使用外部SMTP服务器。

config / environments / production.rb包含以下行。

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
  :address => 'mydomain.com',
  :port => 587,
  :user_name => "myusername",
  :password => "password",
  :authentication => :plain,
  :enable_starttls_auto => true,
  :openssl_verify_mode => 'none' 
}

当我从“heroku运行控制台”发送电子邮件时,它运行正常。但它不会从网站发送电子邮件。奇怪的是,“heroku logs --tail”显示“已发送邮件给...”。实际上电子邮件没有发送。

有没有人对这个问题有任何想法?

感谢。

Sam Kong

3 个答案:

答案 0 :(得分:3)

您是否在config / enviornment.rb

中尝试过此操作
ActionMailer::Base.smtp_settings = {
:address => 'mydomain.com',
:port => 587,
:user_name => "myusername",
:password => "password",
:authentication => :plain,
:enable_starttls_auto => true,
:openssl_verify_mode => 'none' 
}

答案 1 :(得分:3)

您的配置正确无误。但是你必须把它放在正确的环境文件中。在Heroku部署的情况下,它应该是'生产'。控制台之所以有效,是因为它使用“开发”作为环境。所以将以下代码放在config / environment / production.rb

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
  :address => 'mydomain.com',
  :port => 587,
  :user_name => "myusername",
  :password => "password",
  :authentication => :plain,
  :enable_starttls_auto => true,
  :openssl_verify_mode => 'none' 
}

希望它能解决你的问题。

答案 2 :(得分:1)

如果它显示为正在发送的邮件,我会建议您的邮件服务器上的配置问题可能阻止来自Heroku IP范围的中继 - 尽管它通过heroku控制台而不是通过您的应用程序工作,但这是最奇怪的。

你有没有想过尝试使用SendGrid Heroku插件来缓解你自己的邮件服务器的任何问题?