Bonjour,
J'ai un problème avec ActionMailer , lorsque j'essaie d'exécuter l'action:
rake send_email
Je reçois une erreur:
rake aborted!
ActionView::MissingTemplate: Missing template user_mailer/mailer with "mailer". Searched in:
* "user_mailer"
Voici mon:
mailers/user_mailer.rb
class UserMailer < ActionMailer::Base
default from: "[email protected]"
def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test')
end
end
views/user_mailer/mailer.html.erb
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<p>
Sample mail.
</p>
</body>
</html>
views/user_mailer/mailer.text.erb
Sample mail.
lib/tasks/emails_task.rake
desc 'send email'
task send_email: :environment do
UserMailer.mailer(User.last).deliver!
end
config/environnements/development.rb
# I recommend using this line to show error
config.action_mailer.raise_delivery_errors = true
# ActionMailer Config
config.action_mailer.delivery_method = :letter_opener
# config.action_mailer.default_url_options = { :Host => 'localhost:3000' }
# config.action_mailer.delivery_method = :smtp
# SMTP settings for gmail
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:user_name => ENV['gmail_username'],
:password => ENV['gmail_password'],
:authentication => "plain",
:enable_starttls_auto => true
}
# Send email in development mode?
config.action_mailer.perform_deliveries = true
J'ai cherché la solution sur stackoverflow et j'ai essayé plusieurs des réponses au problème similaire mais malheureusement aucune d'entre elles n'a fonctionné pour moi.
J'ai trouvé la solution quand j'ajoute body à la méthode mailer comme:
def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test', body: 'something')
end
Ensuite, cela fonctionne mais j'aimerais avoir un corps dans des fichiers séparés et le rendre plus complexe avec un nom d'utilisateur et d'autres choses.
Si quelqu'un a une idée sur la façon de résoudre ce problème, je vous en serais très reconnaissant :)
Essayez d'ajouter une mise en page
class UserMailer < ActionMailer::Base
default from: "[email protected]"
layout "mailer"
def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test')
end
end
J'ai renommé ma méthode et cela a fonctionné. Peut-être que le nom de la méthode ne peut pas être mail ou mailer ...
class UserMailer < ActionMailer::Base
default from: "[email protected]"
layout "mailer"
def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test')
end
end
Ajouter une mise en page HTML sous la mise en page #
mailer.html.erb
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
/* Email styles need to be inline */
</style>
</head>
<body>
<%= yield %>
</body>
</html>
Ajouter une mise en page sous la mise en page #
mailer.text.erb
<%= yield %>
Utilisez preview pour vérifier votre courrier électronique en fonction de votre framework de test.
Pourriez-vous publier un référentiel minimaliste Github reproduisant votre erreur?
Vous pouvez essayer de générer votre courrier afin de vérifier que vous n’oubliez pas quelque chose:
bundle exec Rails generate mailer mailer_classname mailer_viewname
Dans ton cas:
bundle exec Rails generate mailer user_mailer mailer
Il est probable que Rails ne trouve tout simplement pas les fichiers que vous venez de créer. Si vous avez la gemme spring
en cours d'exécution, c'est peut-être le problème. (Plus de détails sur le printemps: https://github.com/Rails/spring )
Pour configurer les commandes de terminal et arrêter l'exécution de spring
:
$ bundle exec spring binstub --all
$ bin/spring stop
J'ai essayé cela, puis j'ai relancé mon application avec Rails s
. Cela n'a pas fonctionné, essayez de fermer complètement le terminal et de redémarrer votre ordinateur. Exécutez Rails s
et essayez de tester avec Rails c
dans un deuxième onglet:
mail = UserMailer.mailer(User.last)
Ce enfin a fonctionné pour moi, j'espère que cela aidera certains d'entre vous!
(Certaines de ces étapes peuvent être redondantes.)
J'ai eu le même problème. Le redémarrage de sidekiq l'a résolu pour moi.
J'ai eu le même problème, ma solution était de supprimer le fichier modèle mailer, dans votre cas views/user_mailer/mailer.html.erb
et de le créer à nouveau. Il semble que j’ai créé un fichier avec le nom propre, mais avec un espace blanc étrange, et ActionMailer ne l’a pas reconnu.