如何防止标题格式错误的电子邮件?

时间:2017-07-15 08:10:53

标签: ruby-on-rails email actionmailer email-headers

在我的Ruby on Rails应用程序中,我有一个Mailer类,它发送带有用户定义的from标题的电子邮件:

def hello_email(user)
  @user = user
  from_email = %("#{@user.name}" <#{@user.email}>)
  to_email = "foo@bar.com"
  mail(from: from_email, to: to_email, subject: 'Hello everybody')
end

我使用的代码略有不同,并随Sucker Punch一起提供。

我遇到的问题是,当@user.name格式不正确时,邮件程序方法会无声地失败,例如:包含一个逗号,在日志中生成Net::SMTPSyntaxError 504 5.5.2

防止这种情况的最佳方法是什么?我想在User类中编写一个验证方法,将某些字符列入黑名单或列入白名单,但我不知道哪些字符。到目前为止唯一导致问题的角色是逗号。追踪是完全不同的。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我最好的猜测是你必须只检测,;,这让我得出结论,如果你试图撰写电子邮件(例如gmail),你就开始输入名字了在To部分中,只要您键入,;,它就会将其视为分隔符。所以正则表达式很简单

/[,;]/

<强>更新

找到这个支持性答案here

答案 1 :(得分:0)

好的,我自己找到了解决方案。

这是我的User模型中的旧代码:

  def sender
    display_name = profile.company_name? ? profile.company_name : name
    "#{display_name} (via #{APP_NAME})<#{NO_REPLY_EMAIL}>"
  end

这是更正后的版本:

  def sender
    display_name = profile.company_name? ? profile.company_name : name
    %("#{display_name} (via #{APP_NAME})" <#{NO_REPLY_EMAIL}>)
  end

关键是enclose the display name in double quotes