it-swarm.com.de

ActionMailer sendet keine E-Mails in Entwicklungs-Rails 4

Warum verschickt dieser Mailer keine Mails? (Oder irgendwelche Ideen zum Debuggen?)

In my_app/config /vironments/development.rb habe ich diesen Code:

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address:              'smtp.gmail.com',
    port:                 587,
    domain:               'my_app.com',
    user_name:            ENV['GMAIL_USERNAME'],
    password:             ENV['GMAIL_PASSWORD'],
    authentication:       'plain',
    enable_starttls_auto: true  }

Dann habe ich auf meinem lokalen Computer in ~/.bash_profile diesen Code:

export GMAIL_USERNAME='[email protected]_app.com'
export GMAIL_PASSWORD='***'

Wenn ich in meinem Terminal $ env starte, sehe ich, dass beide Umgebungsvariablen korrekt gesetzt sind.

Ich habe auch meinen Rails-Server neu gestartet.

43
Don P

Sie sollten hinzufügen

config.action_mailer.perform_deliveries = true

standardmäßig ist dies auf false gesetzt, sodass keine E-Mails aus Ihrer Entwicklungsumgebung gesendet werden können.

103
Danny

Für alle, die nicht mit smtp arbeiten, half mir die Umstellung der Zustellmethode auf sendmail zusätzlich zum expliziten Festlegen von Lieferungen,

config.action_mailer.delivery_method = :sendmail
10
Aaron Krauss

Wenn beim Senden von E-Mails über die Konsole Probleme auftreten, müssen Sie die Zustellungsmethode in Ihrer E-Mail anrufen.

MyMailer.create_email.deliver
9
Michael Brawn

Alle diese Antworten sind großartig, aber es gibt einen anderen Ort, an dem Sie sich verbrennen können, insbesondere im Zusammenhang mit dem Debugging. 

Stellen Sie in development.rb sicher, dass Sie config.action_mailer.raise_delivery_errors = true einstellen.

Wenn Ihre .deliver-Methode scheinbar ohne Probleme funktioniert, Sie die E-Mail jedoch niemals über die Leitung erhalten, löst Ihre Zustellungsmethode möglicherweise eine Ausnahme aus und Rails schluckt den Fehler. Dies ist sehr zutreffend, wenn Sie einfach etwas so einfaches wie falsch konfigurierte Anmeldeinformationen oder einen API-Fehler für den Zugriff von aws haben. Speichern Sie Ihr Haar aus und stellen Sie sicher, dass raise_delivery_errors eingeschaltet ist. Es will dir etwas sagen, kann es aber nicht. 

0
Ryan Romanchuk

Also habe ich es herausgefunden. Durch die Zeile ActionMailer::Base.delivery_method = :smtp in config/environment.rb wird ActionMailer::Base.delivery_method = :test in config/environments/test.rb überschrieben.

Löschen Sie also diese Zeile ActionMailer::Base.delivery_method = :smtp aus config/environment.rb und platzieren Sie sie in config/environments/production.rb. Dadurch können Sie ActionMailer::Base.delivery_method = :test in config/environments/test.rb und die gewünschte Version in config/environments/development.rb einfügen. Ich erstellte development.rb:test, als ich meine Datenbank mit Faker auffüllte, und :smtp änderte, sodass ich sicher war, dass echte E-Mails als zusätzliche Prüfung gesendet wurden.

Hinweis: Sie müssen Ihren Server neu starten, damit diese Änderungen wirksam werden.

Noch ein Hinweis: Die aktuellen SendGrid-Anweisungen von Heroku ( https://devcenter.heroku.com/articles/sendgrid ) enthalten den SendGrid Heroku-Konfigurationscode in einer neuen config/initializers/mail.rb-Datei, die wahrscheinlich die letzte Zeile entfernt und die gewünschte Version einfügen muss in jedem config/environments/[production.rb, development.rb, test.rb]

0
DJSampat