0Day Forums
Mailer error missing template - Printable Version

+- 0Day Forums (https://0day.red)
+-- Forum: Coding (https://0day.red/Forum-Coding)
+--- Forum: Ruby (https://0day.red/Forum-Ruby)
+--- Thread: Mailer error missing template (/Thread-Mailer-error-missing-template)



Mailer error missing template - pubilis397 - 07-19-2023

<!-- language: ruby-->

Hello, <br>

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: "[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/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 :)


RE: Mailer error missing template - jeninekxlrfhht - 07-19-2023

well, mine might be the silliest answer of all but mine work after deleting the template and recreating it with the same name 😂


RE: Mailer error missing template - careenew - 07-19-2023

I had a similiar issue. I had missed adding the gem 'haml-rails' in my Gemfile. Check if you are missing the gem.


RE: Mailer error missing template - Nathanial695 - 07-19-2023

I had the same problem. Restarting sidekiq solved it for me.


RE: Mailer error missing template - alikawnpquuh - 07-19-2023

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.


RE: Mailer error missing template - babby882069 - 07-19-2023

class UserMailer < ActionMailer::Base
default from: "[email protected]"

layout "mailer"

def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test')
end

end

Add a html layout under layout#

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

Add text layout under layout #

> mailer.text.erb

<%= yield %>

Use preview to check your email based on your test framework.



RE: Mailer error missing template - anisodactyl901159 - 07-19-2023

I renamed my method and it worked. Maybe the name of the method can't be mail or mailer...


RE: Mailer error missing template - teutonicism432891 - 07-19-2023

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:

[To see links please register here]

)

To setup terminal commands and stop running `spring`:

$ bundle exec spring binstub --all
$ bin/spring stop


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. Run `rails s` and try testing with `rails c` in a second tab:

mail = UserMailer.mailer(User.last)

That *finally* worked for me, hopefully it'll help some of you!

(Some of these steps may be redundant.)


RE: Mailer error missing template - Mrcarleef - 07-19-2023

Try adding layout

class UserMailer < ActionMailer::Base
default from: "[email protected]"

layout "mailer"

def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test')
end

end


RE: Mailer error missing template - neopythagoreanism9 - 07-19-2023

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`