3

我对 Rails 很陌生,所以如果我在这里遗漏了一些明显的东西,请原谅我!

ActionMailer 不会向我的电子邮件发送正文。标题很好,但没有正文。

有几个类似的问题要问我,但是没有一个解决方案对我有用,我花了 2 天时间在互联网上拖网并追逐我的尾巴,但都无济于事!

我正在运行 Devise,它可以正常发送电子邮件!

我得出的结论是 actionmailer 没有呈现我的模板。

我有运行内部邮件的简单私人消息 gem,当用户在应用程序中收到消息时,我在其控制器中发送电子邮件。

到目前为止我尝试过的事情:

  1. 使用交付!而不是交付

  2. 在 user_mailer.erb 中指定 content_type:、template_path:、template_name:

  3. 在 user_mailer 中运行一个 Block 来指定模板。IE

    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]}.
  1. 模板的所有可能名称前缀 ... template.html.erb、template.text.html.erb、template.erb

  2. 甚至尝试从环境中删除 'config.active_support.deprecation = :log' 因为有帖子建议它可能是修复!(虽然如何,我不知道)

  3. 删除邮件中的任何参数,以防万一导致问题!

  4. 根据 API 尊重welcome_email 方法,而不是我喜欢的自定义方法,只是以防Rails 约定优于配置让我绊倒了!

已设置 ActionMailer Logging,但似乎没有显示任何错误,表示已发送电子邮件,但未引用模板。以上解决方案是我记得的,但它们都对其他人有用,只是不适合我!我对我错过的一切完全不知所措!

提前感谢您的帮助!如果您需要更多代码,请告诉我。

运行 rails 3.2.3、Ruby 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

消息控制器.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)
4

1 回答 1

4

这是一个愚蠢的错误,就像我知道的那样!一个 Git 提交指出了它......

create mode 100644 app/views/user_mailer/ welcome_email.html.erb
create mode 100644 app/views/user_mailer/ welcome_email.text.erb

文件名开头的空格,在 Sublime Text 中很难注意到!

很容易因为愚蠢的错误而松懈 2 天,但我学到了很多东西来解决这个问题!

于 2013-06-21T08:45:25.470 回答