2014-09-04 6 views
6

Ich habe eine Schiene 4 App. Ich habe ActionMailer eingerichtet und kann Bestellbestätigungs-E-Mails über localhost und gmail versenden.Sendgrid auf Schienen eingerichtet 4

Ich installierte Sendgrid auf Heroku und folgte den Einrichtungsanweisungen. Ich erhalte eine Net::SMTPSyntaxError (501 Syntax error

meine environment.rb (ich habe sendgrid user/pwd in 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 
} 

in production.rb - die einzige actionamailer Einstellung Ich habe dies. Ich habe dies als Platzhalter, um später die echte Domain einzutragen. Ich verwende derzeit herokuapp.com.

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

in meinem orders_controller in der Reihenfolge create-Methode, rufe ich die unten.

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 

Was bin ich? Es funktioniert auf localhost mit gmail, so dass ich etwas in den sendgrid-Einstellungen oder in der default_url in production.rb-Datei fehlt.

+0

Welchen Stack verwenden Sie in der Produktion? Hast du ENVs in heroku config? Weil Heroku ENVs nur auf Bamboo Stack automatisch hinzufügt, müssen Sie sie auf Cedar manuell hinzufügen, wie ich weiß. –

+0

Ich bin auf Cedar. Ja, ich sehe den sendgrid user/pwd, wenn ich heroku config starte. – Moosa

+1

Versuchen Sie den Host in production.rb zu Ihrem blabla-bla.herokuapp.com zu wechseln. Tatsächlich habe ich keine config.action_mailer ... Zeile in production.rb, und Sendgrid funktioniert ok. –

Antwort

4

Ändern Sie default from: "Test Email" zu einer gültigen E-Mail-Adresse, auch [email protected].

+1

Wow ... Ich verschwendete so viel Zeit starrte auf die Einstellungen und docs !! Es funktionierte auf localhost, also dachte ich nicht daran, das zu ändern. – Moosa

22

Für die Nachwelt ist hier eine Arbeits Setup für externen SMTP in Rails auf 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

Ich möchte nur darauf hinweisen möchte, ist dies für E-Mails über SMTP zu senden. Während diese Methode völlig in Ordnung ist, sollten Sie auch das Senden über die API in Erwägung ziehen.

Dazu müssen Sie einen Interceptor angeben. Glücklicherweise gibt es einen Edelstein, der dabei hilft. Hier ist ein guter Artikel, der zeigt, wie man es benutzt.

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