【问题标题】:How to prevent malformatted email from header?如何防止来自标题的格式错误的电子邮件?
【发布时间】:2017-12-20 07:48:35
【问题描述】:

在我的 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 类中编写一个验证方法,将某些字符列入黑名单或白名单,但我不知道哪些字符。到目前为止,唯一引起问题的字符是逗号。而且追踪起来完全不同。

感谢您的帮助。

【问题讨论】:

  • 发送的电子邮件是不带全名的东西,只是使用电子邮件,还是使用“干净”的全名?我认为504 5.5.2 与“来自电子邮件”或您的 smtp 服务器坏或其他有关,尽管我可能错了
  • @SimpleLime:是的,你完全正确。造成麻烦的是from 地址,而不是to 地址。我更正了我最初的帖子。谢谢。

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


【解决方案1】:

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

/[,;]/

更新

找到这个支持答案here

【讨论】:

  • 这部分解决了问题,谢谢。然而,最后我想出了一个更清洁的解决方案(见我的回答)。
【解决方案2】:

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

这是我 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

【讨论】:

  • 在以后的问题中,您应该尝试发布导致问题的代码(或更紧密地匹配它)。您问题中的问题示例在名称周围有双引号。如果我们看到这种方法,一小时前就可以告诉你这是问题所在
猜你喜欢
  • 2012-04-28
  • 2017-07-21
  • 2012-03-03
  • 2013-11-30
  • 2011-07-03
  • 2018-08-17
  • 2011-11-13
  • 2019-06-27
  • 2012-01-11
相关资源
最近更新 更多