こんにちは、
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
次に、それは機能しますが、本文を別々のファイルに入れて、ユーザー名などでさらに複雑にしたいと思います。
誰かがこの問題を解決する方法を知っているなら、私は非常に感謝します:)
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 %>
プレビューを使用して、テストフレームワークに基づいてメールを確認します。
レイアウトを追加してみてください
class UserMailer < ActionMailer::Base
default from: "[email protected]"
layout "mailer"
def mailer(user)
@user = user
mail(to: @user.email, subject: 'Test')
end
end
私は自分のメソッドの名前を変更し、それが機能しました。たぶん、メソッドの名前をmailやmailerにすることはできません...
エラーを再現する最小限のGithubリポジトリを公開してもらえますか?
何かを忘れていないことを確認するために、メーラーを生成してみてください。
bundle exec Rails generate mailer mailer_classname mailer_viewname
あなたの場合:
bundle exec Rails generate mailer user_mailer mailer
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)
それがついに私のために働いた、うまくいけばそれはあなたの一部を助けるでしょう!
(これらの手順の一部は冗長になる場合があります。)
私も同じ問題を抱えていました。 sidekiqを再起動すると解決しました。
私も同じ問題を抱えていました。私の解決策は、メーラーテンプレートファイルを削除し、あなたのケースではviews/user_mailer/mailer.html.erb
を作成して、もう一度作成することでした。適切な名前でファイルを作成したようですが、どこかに奇妙な空白があり、ActionMailerはそれを認識しませんでした。