Ошибка отправки сообщения

Здравствуйте,

У меня проблема с 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

Затем он работает, но я хотел бы иметь тело в отдельных файлах и сделать его более сложным с именем пользователя и другими вещами.

Если у кого-то есть идея, как решить эту проблему, я был бы очень благодарен:)

Ответы

Ответ 1

Попробуйте добавить макет

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

  layout "mailer"

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

end

Ответ 2

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

Используйте предварительный просмотр, чтобы проверить свою электронную почту на основе тестовой среды.

Ответ 3

Вероятно, 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)

Это, наконец, сработало для меня, надеюсь, это поможет некоторым из вас!

(Некоторые из этих шагов могут быть излишними.)

Ответ 4

Я переименовал свой метод, и он сработал. Возможно, имя метода не может быть почтой или почтой...

Ответ 5

У меня была та же проблема. Перезапуск sidekiq решил это для меня.

Ответ 6

Не могли бы вы опубликовать минималистский репозиторий Github, воспроизводящий вашу ошибку?

Вы можете попытаться создать свою почтовую программу, чтобы проверить, что вы ничего не забыли:

bundle exec rails generate mailer mailer_classname mailer_viewname

В вашем случае:

bundle exec rails generate mailer user_mailer mailer

Ответ 7

У меня была такая же проблема, мое решение состояло в том, чтобы удалить файл шаблона почтовой программы, в вашем случае views/user_mailer/mailer.html.erb и создать его снова. Кажется, что я создал файл с собственным именем, но с каким-то странным белым пространством где-то, и ActionMailer его не узнал.