2014-09-04 21 views
6

Ho un'app per rails 4. Ho configurato ActionMailer e posso inviare e-mail di conferma dell'ordine tramite localhost e gmail.Sendgrid impostato su Rails 4

Ho installato Sendgrid su Heroku e ho seguito le istruzioni di installazione. Ho un Net::SMTPSyntaxError (501 Syntax error

mia environment.rb (ho SendGrid utente/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 - l'unica impostazione actionamailer che ho è questo. Ho questo come segnaposto per mettere il vero dominio in seguito. Attualmente sto usando herokuapp.com.

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

nel mio orders_controller all'interno dell'ordine creare metodo, che io chiamo il seguito.

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 

Che cosa mi manca? Funziona su localhost con gmail quindi mi manca qualcosa nelle impostazioni sendgrid o nel file default_url nel file production.rb.

+0

Cosa pila si utilizza in produzione? Hai ENV in heroku config? Dato che heroku aggiunge automaticamente ENV solo su Bamboo stack, su Cedar è necessario aggiungerli manualmente, come so. –

+0

Sono su Cedar. Sì, vedo sendgrid user/pwd quando eseguo heroku config. – Moosa

+1

Prova a cambiare l'host in production.rb sul tuo bla-bla-bla.herokuapp.com. In effetti, non ho nessuna riga config.action_mailer ... in production.rb, e Sendgrid funziona bene. –

risposta

4

Modificare default from: "Test Email" in indirizzo di posta elettronica valido, anche [email protected].

+1

Wow ... Ho perso così tanto tempo a fissare le impostazioni e documenti !! Ha funzionato su localhost quindi non ho nemmeno pensato di cambiarlo. – Moosa

22

Ai posteri, ecco una configurazione funzionante per SMTP esterno in Rails su 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

vorrei solo far notare, questo è per l'invio di messaggi di posta elettronica tramite SMTP. Anche se questo metodo è completamente ok, dovresti anche considerare l'invio tramite l'API.

Per fare ciò, è necessario specificare un intercettore. Fortunatamente, c'è una gemma che aiuta in questo. Ecco un buon articolo che mostra come usarlo.

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