【发布时间】:2013-06-17 17:22:28
【问题描述】:
我对 Rails 很陌生,所以如果我在这里遗漏了一些明显的东西,请原谅我!
ActionMailer 不会向我的电子邮件发送正文。标题很好,但没有正文。
我有几个类似的问题,但是没有一个解决方案对我有用,我花了 2 天时间在互联网上拖网并追逐我的尾巴,都无济于事!
我正在运行 Devise,它可以正常发送电子邮件!
我得出的结论是 actionmailer 没有呈现我的模板。
我有运行内部邮件的 simple-private-messages gem,当用户在应用程序中收到消息时,我在其控制器中发送电子邮件。
到目前为止我尝试过的事情:
使用交付!而不是交付
在 user_mailer.erb 中指定 content_type:、template_path:、template_name:
-
在 user_mailer 中运行一个块来指定模板。即
format.html { render 'welcome_email' } format.text { render :text => 'welcome_email.txt.erb' })
这会导致错误,尽管模板位于正确的目录中(我认为)
ActionView::MissingTemplate (Missing template user_mailer/welcome_email with {:locale=[:en], :formats=>[:text], :handlers=>[:erb, :builder, :arb, :coffee, :haml]}.
模板的所有可能的名称前缀... 模板.html.erb、模板.text.html.erb、模板.erb
甚至尝试从环境中删除 'config.active_support.deprecation = :log',因为有帖子建议它可能是解决方法! (虽然如何,我不知道)
删除邮件中的任何参数,以防万一导致问题!
根据 API 尊重welcome_email 方法,而不是我喜欢的自定义方法,以防Rails 约定优于配置让我绊倒了!
已设置 ActionMailer 日志记录,但似乎没有显示错误,表示已发送电子邮件,但未引用模板。 以上解决方案是我记得的,但它们都对其他人有用,只是不适合我! 我对我错过的一切完全不知所措!
提前感谢您的帮助!如果您需要更多代码,请告诉我。
跑步 轨道 3.2.3, 红宝石 1.9, ActionMailer 3.2.3
似乎没有人在此处发布指向 git repo 的链接。这有什么原因吗?非常乐意提供,但似乎没有其他人提供,所以暂时不会。
这里有一些代码可以帮助查找故障...
user_mailer.rb
class UserMailer < ActionMailer::Base
default :from => "myemail@gmail.com"
def welcome_email(user)
@user = user
@url = "http://example.com/login"
mail(:to => user.email, :subject => "Welcome to My Awesome Site")
end
end
messages_controller.rb
def create
@message = Message.new(params[:message])
@message.sender = @user
@message.recipient = User.find(params[:message][:to])
if @message.save
flash[:notice] = "Message sent"
UserMailer.welcome_email(@message.recipient).deliver!
redirect_to user_messages_path(@user)
else
render :action => :new
end
结束
welcome_email.html.erb
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
</head>
<body>
<h1>Welcome</h1>
</body>
</html>
welcome_email.text.erb
Text Text Text!!!
从控制台服务器登录
Sent mail to user@me.com (14517ms)
Date: Thu, 20 Jun 2013 18:13:23 +0200
From: myapp@gmail.com
To: user@me.com
Message-ID: <31c32a237e61c_b73c3ff82f78328e051786@my-app.com.mail>
Subject: Welcome to My Awesome Site
Mime-Version: 1.0
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Redirected to http://localhost:3000/users/1/messages
Completed 302 Found in 14674ms (ActiveRecord: 15.3ms)
【问题讨论】:
-
首先,您的邮件模板的完整路径是什么?应该是 app/views/user_mailer/welcome_email.html.erb。其次,“捆绑开放式设计”并验证您是否按照他们的做法进行操作。
-
@davidfurber 感谢您的回复。路径是 'app/views/user_mailer/welcome_email.html.erb' 和 'app/views/user_mailer/welcome_email.test.erb'
-
在 Devise Gem 中我有点失落,我不了解 ActionMailer 逻辑。 'def devise_mail(record, action, opts={}) initialize_from_record(record) mail headers_for(action, opts)' 这和我做的不一样!
-
抱歉,请阅读上面的“welcome_email.**text**.erb”。
标签: ruby-on-rails-3.2 actionmailer