web-dev-qa-db-ja.com

メーラーエラーテンプレートがありません

こんにちは、

ActionMailerに問題があります。アクションを実行しようとすると、次のようになります。

rake send_email

エラーが発生します:

    rake aborted!
ActionView::MissingTemplate: Missing template user_mailer/mailer with "mailer". Searched in:
  * "user_mailer"

これが私のものです:

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

私はstackoverflowで解決策を探し、同様の問題に対する多くの回答を試しましたが、残念ながらそれらのどれも私のために機能しませんでした。

次のようなメーラーメソッドに本文を追加すると、解決策が見つかりました。

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

次に、それは機能しますが、本文を別々のファイルに入れて、ユーザー名などでさらに複雑にしたいと思います。

誰かがこの問題を解決する方法を知っているなら、私は非常に感謝します:)

19
Kattaro
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
sukanta

レイアウトを追加してみてください

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

  layout "mailer"

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

end
3
Florin Ionita

私は自分のメソッドの名前を変更し、それが機能しました。たぶん、メソッドの名前をmailやmailerにすることはできません...

2
montrealmike

エラーを再現する最小限のGithubリポジトリを公開してもらえますか?

何かを忘れていないことを確認するために、メーラーを生成してみてください。

bundle exec Rails generate mailer mailer_classname mailer_viewname

あなたの場合:

bundle exec Rails generate mailer user_mailer mailer

1
Habax

Railsが新しく作成されたファイルを見つけられない可能性があります。spring gemを実行している場合、それが問題である可能性があります。(春の詳細: https://github.com/Rails/spring

端末コマンドを設定してspringの実行を停止するには:

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

私はこれを試してから、Rails sを使用してアプリを再実行しました。うまくいかなかったので、端末を完全に閉じて、コンピューターを再起動してみてください。 Rails sを実行し、2番目のタブでRails cを使用してテストしてみます。

 mail = UserMailer.mailer(User.last)

それがついに私のために働いた、うまくいけばそれはあなたの一部を助けるでしょう!

(これらの手順の一部は冗長になる場合があります。)

1
Matt Kandler

私も同じ問題を抱えていました。 sidekiqを再起動すると解決しました。

1
Jan Gerritsen

私も同じ問題を抱えていました。私の解決策は、メーラーテンプレートファイルを削除し、あなたのケースではviews/user_mailer/mailer.html.erbを作成して、もう一度作成することでした。適切な名前でファイルを作成したようですが、どこかに奇妙な空白があり、ActionMailerはそれを認識しませんでした。

0
Ivica Lakatoš