在我的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
类中编写一个验证方法,将某些字符列入黑名单或列入白名单,但我不知道哪些字符。到目前为止唯一导致问题的角色是逗号。追踪是完全不同的。
感谢您的帮助。
答案 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