Ich bin sicher, dass dies schon eine Million Mal gefragt wurde, aber ich kann nichts finden, was für mich funktioniert, also frage ich noch einmal!
Ich brauche nur eine Möglichkeit, E-Mails mit ActionMailer in Rails 3 zu senden. Ich habe zahlreiche Tutorials einschließlich des Railscasts-Tutorials für den neuen ActionMailer verfolgt, und ich kann sehen, dass die Mails generiert werden, aber ich erhalte sie nicht.
Ich habe verschiedene Möglichkeiten ausprobiert, aber im Allgemeinen sind die folgenden Einstellungen konfiguriert
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "[email protected]",
:password => "yyy",
:authentication => "plain",
:enable_starttls_auto => true
}
Ich habe den obigen Code (mit gültigen Google Mail-Details natürlich) in meiner config/environment.rb, config/environues/development.rb ausprobiert und habe ihn derzeit in seinem eigenen Initialisierer config/initialisers/setup_mail.rb
Ich habe auch mit ein paar verschiedenen SMTP-Servern einschließlich Gmail und Sendgrid versucht, die SMTP-Einstellungen entsprechend anzupassen, aber immer noch nichts. Ich kann die Mail im Terminal und das Entwicklungsprotokoll sehen und das war's.
Weiß jemand von anderen Gotchas, dass ich vermisst habe, dass ActionMailer funktionieren muss? Andernfalls gibt es eine Möglichkeit, mehr Informationen darüber zu erhalten, warum die E-Mails nicht gesendet werden? ich habe
config.action_mailer.raise_delivery_errors = true
in meiner config/development.rb eingestellt, aber das Entwicklungsprotokoll zeigt immer noch dasselbe, wie ich es im Terminal sehe.
Für das, was es wert ist, entwickle ich auf einem Ubuntu 10.04-Laptop, nur für den Fall, dass dafür ein bestimmtes Setup erforderlich ist.
Danke vielmals
Nun, ich habe das Problem gelöst, aber warum dies funktioniert und die anderen Methoden nicht, weiß ich nicht.
Die Lösung bestand darin, einen Initialisierer in config/initialisers/setup_mail.rb zu erstellen, der Folgendes enthielt
if Rails.env != 'test'
email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/email.yml"))
ActionMailer::Base.smtp_settings = email_settings[Rails.env] unless email_settings[Rails.env].nil?
end
Ich fügte dann config/email.yml hinzu, das die Details der Entwicklungs- und Produktions-E-Mail-Konten enthält
development:
:address: smtp.gmail.com
:port: 587
:authentication: plain
:user_name: xxx
:password: yyy
:enable_starttls_auto: true
production:
:address: smtp.gmail.com
:port: 587
:authentication: plain
:user_name: xxx
:password: yyy
:enable_starttls_auto: true
Wie ich schon sagte, keine Ahnung warum, aber dies schien den Trick zu tun. Vielen Dank für die Hinweise
Ich habe folgendes in config/environments/development.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
Die eigentliche Mail-Konfiguration config.actionmailer.*
habe ich in config\application.rb
platziert.
Hoffe das hilft :)
Versuchen Sie "sendmail" anstelle von "smtp" zu verwenden.
ActionMailer::Base.delivery_method = :sendmail
ActionMailer::Base.sendmail_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "[email protected]",
:password => "yyy",
:authentication => "plain",
:enable_starttls_auto => true
}
Drei Dinge.
Erstens ist der Port eine Ganzzahl und benötigt keine Anführungszeichen, wie in Ihrem ersten Beispiel. (Aber ich denke, ein String sollte noch funktionieren.)
Vergessen Sie außerdem nicht, Ihren Server jedes Mal neu zu starten, wenn Sie diese (oder eine beliebige) Initialisierungsdatei ändern. Dies könnte erklären, warum nach dem Hinzufügen kein Fehler aufgetreten ist:
config.action_mailer.raise_delivery_errors = true
Ohne diese Fehlermeldung ist es schwer festzustellen, warum die E-Mail nicht gesendet wurde, aber jetzt ist. Eine Möglichkeit ist die Verwendung von Anführungszeichen um das Passwort. Wenn Sie ein sicheres Kennwort verwendet haben und ein Token in Ihrem Kennwort enthalten ist, das nicht mit einem Escapezeichen versehen wurde, könnte es neu interpretiert werden. (d. h. "[email protected]\0rd"
würde [email protected]
werden). Aus genau diesem Grund verwende ich in meinem Code immer einfache Anführungszeichen, es sei denn, ich benötige speziell den syntaktischen Zucker.
Schließlich ist enable_starttls_auto: true
der Standard und nicht erforderlich.
ActionMailer::Base.delivery_method = :sendmail
und config.action_mailer.perform_deliveries = true
dies waren die zwei notwendigen Schritte, die mich über dieses Thema gebracht haben
Setzen Sie einfach alle config auf: Config/umgebung/development.rb
Ich meine
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "[email protected]",
:password => "yyy",
:authentication => "plain",
:enable_starttls_auto => true
}
und
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
Es hat für mich funktioniert.
Meine zwei Pfennige wert:
Ich hatte genau die gleichen Symptome mit Rails 5.1: Es ist nichts passiert, die Einstellungen in meiner development.rb
-Datei wurden völlig ignoriert ...
Dann erinnerte ich mich daran, die Maschine neu zu starten! (was das Problem auf magische Weise gelöst hat)
Darauf waren bereits einige Kommentare hingewiesen worden.
Das Problem ist jedoch schwierig, da Sie dieses Verhalten nicht erwarten. Aus meiner Sicht sind die Standardkommentare in development.rb
in dieser Hinsicht irreführend:
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since *you don't have to restart the web server when you make code changes*.
Zusätzlich zu Ihrem Google Mail-Nutzernamen wird kein Alias verwendet.