Ответ 1
Попробуйте добавить макет
class UserMailer < ActionMailer::Base
default from: "[email protected]"
layout "mailer"
def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test')
end
end
Здравствуйте,
У меня проблема с ActionMailer, когда я пытаюсь выполнить действие:
rake send_email
Я получаю сообщение об ошибке:
rake aborted!
ActionView::MissingTemplate: Missing template user_mailer/mailer with "mailer". Searched in:
* "user_mailer"
Здесь my:
мейлеры /user _mailer.rb
class UserMailer < ActionMailer::Base
default from: "[email protected]"
def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test')
end
end
вид /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>
вид /user _mailer/mailer.text.erb
Sample mail.
Lib/задачи/emails_task.rake
desc 'send email'
task send_email: :environment do
UserMailer.mailer(User.last).deliver!
end
<сильные > конфигурации/среда/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
Я искал решение в stackoverflow, и я попробовал много ответов для подобной проблемы, но, к сожалению, никто из них не работал у меня.
Я нашел решение, когда добавляю метод body to mailer, например:
def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test', body: 'something')
end
Затем он работает, но я хотел бы иметь тело в отдельных файлах и сделать его более сложным с именем пользователя и другими вещами.
Если у кого-то есть идея, как решить эту проблему, я был бы очень благодарен:)
Попробуйте добавить макет
class UserMailer < ActionMailer::Base
default from: "[email protected]"
layout "mailer"
def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test')
end
end
class UserMailer < ActionMailer::Base
default from: "[email protected]"
layout "mailer"
def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test')
end
end
Добавьте макет html в макет #
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>
Добавить макет текста в макете #
mailer.text.erb
<%= yield %>
Используйте предварительный просмотр, чтобы проверить свою электронную почту на основе тестовой среды.
Вероятно, Rails просто не находит ваши вновь созданные файлы. Если у вас работает spring
gem, это может быть проблемой. (Подробнее о spring: https://github.com/rails/spring)
Для настройки команд терминала и остановки работы spring
:
$ bundle exec spring binstub --all
$ bin/spring stop
Я попробовал это, а затем снова запустил мое приложение с помощью rails s
. Это не сработало, поэтому попробуйте полностью закрыть терминал и перезагрузить компьютер. Запустите rails s
и попробуйте выполнить тестирование с помощью rails c
на второй вкладке:
mail = UserMailer.mailer(User.last)
Это, наконец, сработало для меня, надеюсь, это поможет некоторым из вас!
(Некоторые из этих шагов могут быть излишними.)
Я переименовал свой метод, и он сработал. Возможно, имя метода не может быть почтой или почтой...
У меня была та же проблема. Перезапуск sidekiq решил это для меня.
Не могли бы вы опубликовать минималистский репозиторий Github, воспроизводящий вашу ошибку?
Вы можете попытаться создать свою почтовую программу, чтобы проверить, что вы ничего не забыли:
bundle exec rails generate mailer mailer_classname mailer_viewname
В вашем случае:
bundle exec rails generate mailer user_mailer mailer
У меня была такая же проблема, мое решение состояло в том, чтобы удалить файл шаблона почтовой программы, в вашем случае views/user_mailer/mailer.html.erb
и создать его снова.
Кажется, что я создал файл с собственным именем, но с каким-то странным белым пространством где-то, и ActionMailer его не узнал.