2014-09-04 2 views
6

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

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

мой environment.rb (я имею sendgrid пользователя/PWD в application.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 
} 

в production.rb - единственный параметр actionamailer у меня есть это. У меня есть это в качестве заполнителя, чтобы позже разместить реальный домен. В настоящее время я использую herokuapp.com.

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

in my 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 

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

+0

Какой стек вы используете в производстве? У вас есть ENV в конфигурации heroku? Поскольку heroku автоматически добавляет ENV только в стек Bamboo, на Cedar вам нужно добавить их вручную, как я знаю. –

+0

Я на Кедре. Да, я вижу пользователя sendgrid/pwd, когда я запускаю конфигурацию heroku. – Moosa

+1

Попробуйте изменить хост в production.rb на свой bla-bla-bla.herokuapp.com. На самом деле, у меня нет config.action_mailer ... line в production.rb, а Sendgrid работает нормально. –

ответ

4

Изменить default from: "Test Email" на действующий адрес электронной почты, даже [email protected].

+1

Wow ... Я потратил столько времени, глядя на настройки и docs !! Он работал на localhost, поэтому я даже не думал об изменении этого. – Moosa

22

Для потомков, вот рабочая установка для внешнего 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 
} 
0

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

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

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

Смежные вопросы