Je suis sûr que cela a déjà été demandé un million de fois, mais je ne trouve rien qui me convienne, alors je le redemande!
J'ai juste besoin d'un moyen d'envoyer des courriels en utilisant ActionMailer dans Rails 3. J'ai suivi de nombreux tutoriels, y compris le tutoriel Railscasts sur le nouveau ActionMailer et je peux voir les courriers générés mais je ne les reçois pas.
J'ai essayé différentes méthodes, mais elles consistent généralement à configurer les paramètres suivants
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
}
J'ai essayé le code ci-dessus (avec des détails valides de gmail bien sûr) dans mon config/environment.rb, config/environnements/development.rb et l'ai actuellement dans son propre initialiseur config/initialisers/setup_mail.rb
J'ai également essayé avec quelques serveurs smtp différents, notamment Gmail et Sendgrid, en ajustant les paramètres smtp en conséquence, mais toujours rien. Je peux voir le courrier dans le terminal et le journal de développement et le tour est joué.
Est-ce que quelqu'un connaît d'autres pièges que j'ai peut-être manqués et qui doivent être configurés pour qu'ActionMailer fonctionne? Sinon, y a-t-il moyen d'obtenir plus d'informations sur les raisons pour lesquelles les courriers ne sont pas envoyés? j'ai
config.action_mailer.raise_delivery_errors = true
défini dans mon config/development.rb mais le journal de développement ne montre toujours que ce que je vois dans le terminal.
Pour ce que cela vaut, je développe sur un ordinateur portable Ubuntu 10.04 au cas où une configuration spécifique serait nécessaire.
Merci beaucoup
Eh bien, j'ai résolu le problème, mais je ne sais pas pourquoi cela fonctionne et les autres méthodes qui ne fonctionnent pas.
La solution consistait à créer un initialiseur dans config/initialisers/setup_mail.rb contenant les éléments suivants:
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
J'ai ensuite ajouté config/email.yml contenant les détails des comptes de messagerie de développement et de production.
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
Comme je le dis, je ne sais pas pourquoi, mais cela a semblé faire l'affaire. Merci à tous pour les pointeurs
J'ai les éléments suivants dans config/environments/development.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
La configuration de messagerie actuelle, config.actionmailer.*
que j'ai placée dans config\application.rb
.
J'espère que cela t'aides :)
Essayez d'utiliser "sendmail" au lieu de "smtp".
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
}
Trois choses.
Tout d'abord, le port est un entier et n'a pas besoin de guillemets, comme dans votre premier exemple. (Mais je pense qu'une chaîne devrait toujours fonctionner.)
Deuxièmement, n'oubliez pas de redémarrer votre serveur chaque fois que vous modifiez ce fichier d'initialisation (ou un autre). Cela pourrait expliquer pourquoi vous n'avez pas vu d'erreur après avoir ajouté:
config.action_mailer.raise_delivery_errors = true
Sans ce message d'erreur, il est difficile de déterminer pourquoi le courrier n'allait pas, mais le reste. Une possibilité consiste à utiliser des guillemets doubles autour du mot de passe. Si vous utilisiez un mot de passe fort et que votre mot de passe ne contenait aucun jeton, il aurait pu être réinterprété. (i.e. "P@ssw\0rd"
deviendrait P@ssrd
). Pour cette raison, j'utilise toujours des guillemets simples dans mon code, sauf si j'ai spécifiquement besoin du sucre syntaxique.
Enfin, enable_starttls_auto: true
est la valeur par défaut et inutile.
ActionMailer::Base.delivery_method = :sendmail
et config.action_mailer.perform_deliveries = true
étaient les deux étapes nécessaires qui m'a permis de surmonter cette question
Il suffit de mettre toute la configuration dans: Config/environment/development.rb
Je veux dire
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
}
et
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
Cela a fonctionné pour moi.
Mes deux sous vaut la peine:
J'avais ces mêmes symptômes avec Rails 5.1: rien ne s'est passé, les paramètres de mon fichier development.rb
ont été complètement ignorés ...
Puis je me suis rappelé de redémarrer la machine! (qui a résolu le problème comme par magie)
Cela avait été souligné par quelques commentaires précédents.
Le problème est toutefois délicat, car vous ne vous attendez pas à ce comportement. À mon avis, les commentaires par défaut dans development.rb
sont, à cet égard, trompeurs:
# 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*.
De plus, votre nom d'utilisateur gmail ne correspond pas à un alias.