使用ActionMailer+Letter_Opener预览邮件时遇ActionView::MissingTemplate报错如何解决?
解决ActionMailer模板缺失及Letter_opener配置问题
一、先解决预览报错(MissingTemplate)
错误核心是缺少邮件对应的视图模板,Rails的ActionMailer调用mail方法时,会自动查找app/views/[mailer类名小写]/[方法名]路径下的模板文件。
步骤1:创建模板文件
- 在
app/views目录下新建order_mailer文件夹(如果不存在) - 在该文件夹中创建以下两个文件(至少要有一个,推荐同时支持HTML和纯文本):
new_order_email.html.erb(HTML格式邮件):<h1>感谢您的捐赠</h1> <p>您好,<%= @email %>,感谢您的支持!</p>new_order_email.text.erb(纯文本格式邮件,适配不支持HTML的邮箱):感谢您的捐赠 您好,<%= @email %>,感谢您的支持!
步骤2:检查模板关联
- 确保模板文件名和
OrderMailer中的方法名完全一致(包括大小写,Rails对文件名大小写敏感) - 如果需要自定义邮件布局,取消
# layout "order_mailer"注释后,要确保app/views/layouts/order_mailer.html.erb存在;不需要的话保持注释即可使用默认布局。
二、配置Letter_opener gem
步骤1:添加并安装gem
在Gemfile的development组中添加:
group :development do gem 'letter_opener' end
执行命令安装:
bundle install
步骤2:修改开发环境配置
打开config/environments/development.rb,添加或修改以下配置:
config.action_mailer.delivery_method = :letter_opener config.action_mailer.perform_deliveries = true
步骤3:重启Rails服务器
修改配置后必须重启服务器,否则配置不生效。
测试验证
- 访问
localhost:3000/rails/mailers/order_mailer/new_order_email,此时应该能正常预览邮件 - 在Rails控制台测试发送邮件:
Letter_opener会自动打开浏览器展示发送的邮件内容。OrderMailer.new_order_email.deliver_now
常见排查点
- 模板路径错误:确认模板在
app/views/order_mailer下,而非app/views/mailers或其他路径 - 文件名错误:确保后缀是
.html.erb或.text.erb,而非.html或拼写错误 - 服务器未重启:修改配置或添加文件后必须重启服务器
内容的提问来源于stack exchange,提问作者Mel
相关产品推荐
相关产品推荐

