Настройка Sendgrid на Rails 4

у меня есть приложение rails 4. Я настроил ActionMailer, и я могу отправлять письма с подтверждением заказа через localhost и gmail.

я установил Sendgrid на Heroku и следовал инструкциям по настройке. Я получаю Net::SMTPSyntaxError (501 Syntax error

мое окружение.rb (у меня есть SendGrid user/pwd в приложении.в формате YML)

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 в методе Order create я вызываю приведенное ниже.

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

что я упустил? Он работает на localhost с gmail, поэтому мне чего-то не хватает в настройках sendgrid или в default_url в производстве.файл rb.

3 ответов


изменить default from: "Test Email" в действительный адрес электронной почты, даже example@example.com.


для потомков вот рабочая настройка для внешнего SMTP в Rails на Heroku:

#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
}

Я просто хотел бы отметить, что это для отправки писем через SMTP. Хотя этот метод полностью в порядке, вы также должны рассмотреть возможность отправки через API.

для этого необходимо указать перехватчик. К счастью, есть камень, который помогает в этом. Вот хорошая статья, показывающая, как ее использовать.

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