Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何防止邮件头出现格式错误?_Ruby On Rails_Email_Actionmailer_Email Headers - Fatal编程技术网

Ruby on rails 如何防止邮件头出现格式错误?

Ruby on rails 如何防止邮件头出现格式错误?,ruby-on-rails,email,actionmailer,email-headers,Ruby On Rails,Email,Actionmailer,Email Headers,在我的Ruby on Rails应用程序中,我有一个Mailer类,它使用用户定义的邮件头发送电子邮件: 我使用的是与此代码稍有不同的版本,并随附交付 我遇到的问题是,当@user.name格式错误时(例如,包含逗号),mailer方法会自动失败,从而在日志中生成Net::SMTPSyntaxError 504 5.5.2 防止这种情况的最好办法是什么?我想在User类中编写一个验证方法,将某些字符列入黑名单或白名单,但我不知道是哪些字符。到目前为止,引起问题的唯一字符是逗号。追查起来就完全不同

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

我使用的是与此代码稍有不同的版本,并随附交付

我遇到的问题是,当@user.name格式错误时(例如,包含逗号),mailer方法会自动失败,从而在日志中生成Net::SMTPSyntaxError 504 5.5.2

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


谢谢您的帮助。

我的猜测是,您必须检测和;只是,让我得出结论的是,如果你试图撰写一封电子邮件,例如gmail,你就开始在部分中键入姓名,一旦键入,或者;它将其视为分隔符。所以正则表达式非常简单

/[,;]/
更新


找到了这个支持性答案

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

这是我的用户模型中的旧代码:

这是正确的版本:

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

关键是。

电子邮件发送时是否不使用全名,只是使用电子邮件,还是使用“干净”的全名?我认为504 5.5.2和“来自电子邮件”或您的smtp服务器不好或其他问题有关,尽管我可能错了there@SimpleLime:是的,你完全正确。造成麻烦的是发件人地址,而不是收件人地址。我更正了我最初的帖子。谢谢。这部分解决了问题,谢谢。然而,最后我提出了一个更干净的解决方案,请看我的答案。在以后的问题中,您应该尝试发布导致问题的代码,或者更紧密地匹配它。您的问题示例的名称周围有双引号。如果我们看到这个方法的话,一小时前就可以告诉你这是个问题了
  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