Hello,
I have problem with ActionMailer, when I try to execute action:
rake send_email
I get a error:
rake aborted!
ActionView::MissingTemplate: Missing template user_mailer/mailer with "mailer". Searched in:
* "user_mailer"
Here's my:
mailers/user_mailer.rb
class UserMailer < ActionMailer::Base
default from: "from@example.com"
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/environments/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
I searched for the solution on stackoverflow and I tried many of the answers for the similar problem but unfortunately none of them worked for me.
I found solution, when I add body to mailer method like:
def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test', body: 'something')
end
Then it does work but I would like to have a body in separate files and make it more complex with user name and other things.
If someone have a idea how to solve this problem then I would be very thankful :)
Try adding layout
I renamed my method and it worked. Maybe the name of the method can't be mail or mailer...
I had the same problem, my solution was to delete mailer template file, in your case
views/user_mailer/mailer.html.erb
and to create it again. It seems that I created file with proper name but with some weird white space somewhere, and ActionMailer didn't recognise it.Add a html layout under layout#
Add text layout under layout #
Use preview to check your email based on your test framework.
Could you publish a minimalist Github repository reproducing your error?
You may try to generate your mailer in order to check you are not forgetting something:
bundle exec rails generate mailer mailer_classname mailer_viewname
In your case:
bundle exec rails generate mailer user_mailer mailer
It's likely that Rails just isn't finding your newly created files. If you have the
spring
gem running, that could be the issue. (More on spring: https://github.com/rails/spring)To setup terminal commands and stop running
spring
:I tried this, then re-running my app with
rails s
. That didn't work so then try closing the terminal completely and rebooting your computer. Runrails s
and try testing withrails c
in a second tab:That finally worked for me, hopefully it'll help some of you!
(Some of these steps may be redundant.)