web-dev-qa-db-de.com

Senden von E-Mails mit Rails 3 in der Entwicklungsumgebung

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

53
Addsy

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

55
Addsy

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 :)

27
nathanvda

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
}
6
Anubhaw

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.

3
IAmNaN

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

1
Jerome

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. 

1
Nickle

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*.
0
Varus Septimus

Zusätzlich zu Ihrem Google Mail-Nutzernamen wird kein Alias ​​verwendet.

Ref: https://support.google.com/mail/answer/12096?hl=de

0
seyyah