【发布时间】:2015-09-08 04:00:48
【问题描述】:
你好,
当我尝试执行操作时,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: "from@example.com"
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
然后它确实可以工作,但我希望在单独的文件中有一个正文,并使其与用户名和其他内容更加复杂。
如果有人知道如何解决这个问题,我将非常感激:)
【问题讨论】:
-
我发现了同样的问题,并且您的修复工作有效(尽管我现在偶尔仍会遇到故障。)有趣的是,这只发生在我的生产环境中。开发工作得很好。我仍在试图弄清楚发生了什么。
-
我也有同样的问题!刚开始赏金:-)
-
你使用什么时候运行这个?尝试像这样运行命令
RAILS_ENV=production rake send_email -
你检查过这个railscasts.com/episodes/206-action-mailer-in-rails-3 就像你想要的我猜
-
我找到了解决这个问题的办法。我在其中一个文件夹中没有英文字符,因此我遇到了这个问题。当我将文件夹名称更改为其他名称时,问题已解决。
标签: ruby-on-rails ruby ruby-on-rails-4 rake actionmailer