ActionMailer发送空白电子邮件,而不是渲染模板,Rails 3

时间:2013-06-20 18:04:44

标签: ruby-on-rails-3.2 actionmailer

我对rails非常陌生,所以请原谅我,如果我错过了一些明显的东西!

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

我有几个类似的问题,但是没有一个解决方案适合我,我花了2天时间在网上搜索并追逐我的尾巴,一切都无济于事!

我有Devise正在运行,并且发送电子邮件很好!

我得出结论,动作制作者没有渲染我的模板。

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

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

  1. 使用发送!而不是提供

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

  3. 在user_mailer中运行块以指定模板。即

    format.html { render 'welcome_email' }
    format.text { render :text => 'welcome_email.txt.erb' })
    
  4. 这会导致错误,尽管模板位于正确的目录中(我认为)

         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约定已经让我失望了!

    5. 设置了ActionMailer Logging,但它似乎没有显示错误,表示已发送电子邮件,但没有引用该模板。 上面的解决方案是我记得的,但是它们都适用于其他人,只是不适合我! 我完全失去了我错过的东西!

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

      运行  轨道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
      

      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)
      

1 个答案:

答案 0 :(得分: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天,但我学到了很多想要解决的问题!