Настройка 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