RubyonRails中的SendGrid/电子邮件发送问题(托管在Heroku上)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

我在config / environments / [development.rb和production.rb]上有以下动作邮件配置:

config.action_mailer.delivery_method = :smtp
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.default_charset = "utf-8"
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
  :address => 'smtp.sendgrid.net',
  :port => 587,
  :domain => ENV['SENDGRID_DOMAIN'],
  :user_name =>  ENV['SENDGRID_USERNAME'],
  :password => ENV['SENDGRID_PASSWORD'],
  :authentication => 'plain',
  :enable_starttls_auto => true
}

对于production.rb,上面的代码除了下面这点都是一样的:


    config.action_mailer.default_url_options = { :host => [app name in heroku] }

当我运行它的开发模式时,我得到以下错误报告:


    Completed 500 Internal Server Error in 21740ms
    Net::SMTPFatalError (550 Cannot receive from specified address notification@[app-domain]: Unauthenticated senders not allowed
):

我现在不知道如何设置它来使它工作。有没有人在Heroku和Rails上设置sendgrid以前的经验知道发生了什么?

提问于
用户回答回答于

我花了半天的时间,发现它是由于一个糟糕的文档错误。顺便说一下,我在Heroku上运行Rails 3.1和Cedar stack。

所以http://devcenter.heroku.com/articles/sendgrid会告诉你把你的SMTP设置的东西放在config / initializers / mail.rb中。

但在http://docs.sendgrid.com/documentation/get-started/integrate/examples/rails-example-using-smtp/说,把所有的SMTP设置的东西在config/environment.rb 而不是config/initializers/mail.rb

所以解决方案是把它放在你的environment.rb文件中。这是我的environment.rb:

# Load the rails application
require File.expand_path('../application', __FILE__)

# Initialize the rails application
Freelanceful::Application.initialize!

# Configuration for using SendGrid on Heroku
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
  :user_name => "yourSendGridusernameyougetfromheroku",
  :password => "yourSendGridpasswordyougetfromheroku",
  :domain => "staging.freelanceful.com",
  :address => "smtp.sendgrid.net",
  :port => 587,
  :authentication => :plain,
  :enable_starttls_auto => true
}

要获取SendGrid用户名和密码,请键入

$ heroku config -long

用户回答回答于

我猜你的意思是在本地开发模式?如果是这样,我不认为SendGrid插件允许从Heroku网络外部发送电子邮件(因为他们有他们希望使用的独立帐户)。

使用SendGrid加载项时,不需要在生产中配置邮件,因为它在部署应用程序时自动配置。

因此,可以删除config.action_mailer.smtp_settings代码,并使用开发中的默认值。

扫码关注云+社区