4

我在 Ruby on Rails 应用程序中使用“Action Mailer”来发送电子邮件。我有以下动作邮件:

class SecurityUserMailer < ActionMailer::Base

  default from: 'myemail@gmail.com'

  def password_reset(security_user)
    @security_user = security_user
    mail to: security_user.email, subject: 'Password Reset'
  end

  def email_confirmation(security_user)
    @security_user = security_user
    mail to: security_user.email, subject: 'Account Created'
  end

end

我已成功发送电子邮件,但第二种方法 (email_confirmation) 未使用相应的模板。

电子邮件模板位于 views/security_users_mailer 文件夹中,命名如下:

  1. email_confirmation.txt.erb
  2. password_reset.txt.erb

为什么只使用 password_reset 模板?

请注意,首先,我认为我的模板中的代码可能有问题,但后来我将其替换为文本内容并且它不再呈现。

4

3 回答 3

4

该问题是由文件扩展名 TYPO 引起的。我有

邮件确认。txt .erb

并且邮件模板应该带有扩展名texthtml

正如您从官方文档中看到的- 如果存在,则默认使用具有相同邮件操作的模板。

于 2013-06-15T07:56:20.020 回答
3

Rails 4我遇到了同样的问题,但我的问题是由于在layouts/mailer.html.erb

于 2015-11-07T22:15:58.193 回答
2

我相信另一种选择是指定您要呈现的模板以下是您如何解决此问题的示例

class SecurityUserMailer < ActionMailer::Base
  default from: 'myemail@gmail.com'
  def password_reset(security_user)
    @security_user = security_user
    mail to: security_user.email, subject: 'Password Reset'
  end

  def email_confirmation(security_user)
    @security_user = security_user
    mail (:to =>  security_user.email, 
          :subject => 'Account Created', 
          :template_path => 'email_confirmation.txt.erb',
          :template_name => 'another')
  end
end

看看以下应该提供一些进一步的见解:

邮件查看

或看

Api Ruby on Rails您将看到它所说的示例,Or even render a special view以便您可以在mail块内包含以下内容:

mail (:to =>  security_user.email, 
              :subject => 'Account Created') do |format|
               format.html { render 'another_template' }
               format.text { render :text => 'email_confirmation.txt.erb' }
      end

这应该可以说明您要完成的工作

于 2013-06-13T23:25:11.203 回答