Pourquoi cet expéditeur n'envoie-t-il aucun courrier? (Ou des idées pour le débogage?)
Dans my_app/config/environment/development.rb, j'ai ce 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 }
Puis sur mon ordinateur local dans ~/.bash_profile, j'ai ce code:
export GMAIL_USERNAME='blah@my_app.com'
export GMAIL_PASSWORD='***'
Lorsque j'exécute $ env
sur mon terminal, je constate que les deux variables d'environnement sont correctement définies.
J'ai également redémarré mon serveur Rails.
Vous devriez ajouter
config.action_mailer.perform_deliveries = true
comme par défaut c'est false, ce qui empêche l'envoi de mails depuis votre environnement de développement ...
Pour ceux qui n'utilisent pas smtp, le changement de méthode de livraison en sendmail m'a aidé, en plus de configurer explicitement les livraisons à effectuer:
config.action_mailer.delivery_method = :sendmail
Si vous rencontrez des problèmes pour envoyer un courrier électronique à partir de la console, vous devez appeler la méthode de livraison sur votre courrier.
MyMailer.create_email.deliver
Toutes ces réponses sont excellentes, mais il existe un autre endroit où vous pouvez être brûlé, en particulier dans le contexte du débogage.
Dans development.rb
, assurez-vous de définir config.action_mailer.raise_delivery_errors = true
Si votre méthode .deliver
semble fonctionner sans problème, mais que vous ne recevez jamais le courrier électronique, il se peut que votre méthode de livraison génère une exception et que Rails avale l'erreur. Cela est tout à fait vrai si vous avez simplement quelque chose d'aussi simple qu'une erreur d'identification mal configurée ou une erreur d'API avec un accès refusé à aws. Sauvegardez vos cheveux et assurez-vous que raise_delivery_errors
est activé. Il veut vous dire quelque chose mais ne peut pas.
Alors je l'ai compris. Le fait d'avoir la ligne ActionMailer::Base.delivery_method = :smtp
dans config/environment.rb
remplace ActionMailer::Base.delivery_method = :test
dans config/environments/test.rb
.
Supprimez donc cette ligne, ActionMailer::Base.delivery_method = :smtp
de config/environment.rb
et placez-la dans config/environments/production.rb
. Cela vous permet de placer ActionMailer::Base.delivery_method = :test
dans config/environments/test.rb
et la version souhaitée dans config/environments/development.rb
. J'ai créé development.rb
:test
au fur et à mesure que je remplissais ma base de données à l'aide de Faker et le changeais en :smtp
, donc j'étais sûr que les vrais courriels avaient été envoyés comme vérification supplémentaire.
Remarque: vous devez redémarrer votre serveur pour que ces modifications prennent effet.
Autre remarque: les instructions SendGrid actuelles de Heroku ( https://devcenter.heroku.com/articles/sendgrid ) placent le code de configuration SendGrid Heroku dans un nouveau fichier config/initializers/mail.rb
qui nécessitera probablement de supprimer sa dernière ligne et de placer la version souhaitée. dans chaque config/environments/[production.rb, development.rb, test.rb]