【问题标题】:Rails 5.1 mailer encoding errorsRails 5.1 邮件程序编码错误
【发布时间】:2017-06-02 22:03:27
【问题描述】:

我正在关注 Hartl Rails 教程 v5.0.1,但遇到了一个(大概)需要指定编码的 Mailer 测试。

相关的测试子句(我在任何一行都得到了类似的错误):

assert_match user.reset_token, mail.body.encoded
assert_match CGI.escape(user.email), mail.body.encoded

产生的错误信息(截断):

Failure:    
UserMailerTest#test_password_reset    
[...demo/test/mailers/user_mailer_test.rb:30]:    
Expected /6qyclXtvAeFin0htTK7t7g/ to match # encoding: US-ASCII

请注意,我在本地存储库中使用的是 Rails 5.1.1。邮件模板使用默认编码,无论它们是什么。

错误信息包含一长串电子邮件模板;我可以看到“charset=UTF-8”和“Content-Transfer-Encoding: 7bit”。

MailerTest 文件还会检查用户令牌和 CGI​​ 转义电子邮件地址的相同组合,以查找无问题的帐户激活测试用例。

有什么建议吗?到目前为止,Hartl 教程还没有深入研究编码。

【问题讨论】:

  • 请分享您正在测试的邮件文件(我假设它是user_mailer.rb)及其模板(例如some_mail.html.erbsome_mail.txt.erb)。
  • 最好编辑您的问题并在那里添加代码,而不是提供外部链接。

标签: ruby-on-rails encoding email-validation


【解决方案1】:

问题是mail.body必须是String,但是你还没有在password_reset中设置。

所以,首先设置它:

def password_reset(user)
  @user = user
  @body = "My message body"

  mail to: user.email, subject: "password reset"
end

其次,在你的模板中使用它。

# password_reset.html.erb
<h1>User#password_reset</h1>
<%= @body %>

# password_reset.text.erb
User#password_reset
<%= @body %>

您会注意到@greeting 已被删除,我这样做是因为它不再被使用(您将在@body 添加您的消息)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2012-01-21
    • 1970-01-01
    • 2011-02-05
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多