子文件夹中的Rails邮件程序和邮件程序视图无法正常工作

时间:2013-12-03 05:54:51

标签: ruby-on-rails ruby-on-rails-3 actionmailer

我有一个邮件,我可以在我的日志中看到它被发送,但邮件正文中没有包含邮件程序视图中的任何内容。

这是因为我把东西放在子文件夹中,并且我尝试在:template_path函数中使用mail,但无济于事。

应用程序/邮寄者/营销/ marketing_mailer.rb

class Marketing::MarketingMailer < ActionMailer::Base

    require 'mail'
    address = Mail::Address.new "test@example.com" # ex: "john@example.com"
    address.display_name = "Text" # ex: "John Doe"
    # Set the From or Reply-To header to the following:
    address.format # returns "John Doe <john@example.com>"
    default from: address

    # Sends an email when someone fills out the contact form
    def contact(name, email, message)
        @name = name
        @email = email
        @message = message
        mail(:subject => "Test", :to => 'test@example.com', :reply_to => @email) # <== I've tried using :template_path => 'marketing', 'marketing/marketing_mailer', etc, but none worked.
    end
end

/app/views/marketing/marketing_mailer/contact.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
  </head>
  <body>
    <p>Name: <%= @name %></p>
    <p>Email: <%= @email %></p>
    <p>Message: <%= @message %></p>
  </body>
</html>

我注意到devise在/ views / devise / mailers /中有邮件视图...所以我知道这是可能的,但我不确定如何。

4 个答案:

答案 0 :(得分:3)

您是否尝试使用{:template_path =&gt; 'marketing / marketing_mailer,:template_name =&gt;'contact'}?

模板名称可能需要文件名中的命名空间

答案 1 :(得分:3)

没有模板渲染

是否可行
   class Marketing::MarketingMailer < ActionMailer::Base
   def welcome_email(user, email_body)
     mail(to: user.email,
     body: email_body,
     content_type: "text/html",
     subject: "Already rendered!")
   end
   end

答案 2 :(得分:2)

由于您的文件格式为.html.erb,因此您可能必须指定要使用此格式。像这样:

mail(:subject => "Test", :to => 'test@example.com', :reply_to => @email) do
  format.html
end

通常,您的模板应该自动选取,因为名称匹配,但可能是第二个以.text.erb结尾的同名文件或其他妨碍模板外观的文件 - 起来。

EDIT1 (狂野猜测) 除了模板查找问题,我能想象的唯一其他问题来源是您的实例变量。也许@message应该是别的东西,你干扰内部,所以重命名它可能会有所帮助。根据apidock上的代码,邮件在某些地方使用@variables。我承认,这很遥远。

EDIT2 (这里面临的问题的解释) 实际问题背后的行为 - 在服务器重启之前找不到新模板 - 就像这样:

查找模板,但那时,它还没有出现。服务器找不到它,但记得它不存在的事实。然后在下次重启之前不会再查找它,即使你已添加它。

因此,重新启动将解决此问题。

您是否尝试过将其关闭再打开?

答案 3 :(得分:2)

我今天回到这个项目,似乎今天找到模板没有必要指定template_path没问题。

令人遗憾的是,显然我需要做的就是停止并重新启动我的服务器,以便我的邮件浏览器被拿起来。由于在不停止和启动服务器的情况下获取了其他视图,我对此感到非常惊讶。