Sendgrid在Rails 4上设置

时间:2014-09-04 19:18:56

标签: ruby-on-rails heroku sendgrid

我有一个rails 4 app。我设置了ActionMailer,我可以通过localhost和gmail发送订单确认电子邮件。

我在Heroku上安装了Sendgrid并按照设置说明操作。我得到Net::SMTPSyntaxError (501 Syntax error

my environment.rb(我在application.yml中有sendgrid用户/ pwd)

ActionMailer::Base.smtp_settings = {
  :address        => 'smtp.sendgrid.net',
  :port           => '587',
  :authentication => :plain,
  :user_name      => ENV['SENDGRID_USERNAME'],
  :password       => ENV['SENDGRID_PASSWORD'],
  :domain         => 'heroku.com',
  :enable_starttls_auto => true
}
生产中的

.rb - 我唯一的actionamailer设置就是这个。我有这个作为占位符,以便在以后放置真正的域名。我目前正在使用herokuapp.com。

config.action_mailer.default_url_options = { host: 'localhost:3000' }

在订单创建方法中的orders_controller中,我调用下面的内容。

AutoNotifier.orderconf_email(current_user, @order).deliver

auto_notifier.rb

class AutoNotifier < ActionMailer::Base
  default from: "Test Email"

  def orderconf_email(current_user, order)
        @buyer = current_user
        @order =  order
        mail(to: @buyer.email, subject: 'Thank you for your order.')
  end
end

我错过了什么?它适用于使用gmail的localhost,因此我在sendgrid设置或production.rb文件的default_url中遗漏了一些内容。

3 个答案:

答案 0 :(得分:23)

对于后代,这是Heroku上Rails中外部SMTP的工作设置:

#config/environments/production.rb
config.action_mailer.smtp_settings = {
    :address   => "smtp.sendgrid.net",
    :port      => 587, # ports 587 and 2525 are also supported with STARTTLS
    :enable_starttls_auto => true, # detects and uses STARTTLS
    :user_name => ENV["SENDGRID_USERNAME"],
    :password  => ENV["SENDGRID_PASSWORD"], # SMTP password is any valid API key, when user_name is "apikey".
    :authentication => 'login',
    :domain => 'yourdomain.com', # your domain to identify your server when connecting
}

答案 1 :(得分:4)

default from: "Test Email"更改为有效的电子邮件地址,甚至是example@example.com

答案 2 :(得分:0)

我想指出,这是通过SMTP发送电子邮件。虽然这种方法完全没问题,但您还应该考虑通过API发送。

为此,您需要指定一个拦截器。幸运的是,有一个宝石可以帮助你。这是一篇很好的文章,展示了如何使用它。

https://rubyplus.com/articles/561-Sending-Emails-using-SendGrid-API-in-Rails-4-1