Car*_*tes 5 php rfc email-validation swiftmailer symfony-1.4
我正在使用SYmfony 1.4和swift邮件程序通过Sendgrid发送大量电子邮件.
我在某些电子邮件地址上收到RFC合规性错误.
一种解决方案是删除抛出错误的条件,它确实有效,但它涉及更改核心.你如何在站点文件而不是symfony核心中扩展MailboxHeader.php.像这样的东西,但不是因为它不起作用:
class overrideRFCError extends Swift_Mime_Headers_AbstractHeader
{
private function _assertValidAddress($address)
{
if (!preg_match('/^' . $this->getGrammar('addr-spec') . '$/D',
$address))
{
// throw new Swift_RfcComplianceException(
// 'Address in mailbox given [' . $address .
// '] does not comply with RFC 2822, 3.6.2.'
// );
}
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎有点沉重.有没有办法验证电子邮件的RFC合规性.如果是这样,那么我可以从阵列中取消它.
更新07/17/13
我能够对每个地址进行彻底的清理,使其符合RFC标准,从而解决了这个问题.但是,我想知道SwiftMailer中是否存在执行此检查的函数,而不是编写自定义函数.
更新07/18/13
这就是我的工作.我试图尽可能地清理条目.
在名为的变量中加载一组地址 $emailList
在行动中:
$cleanList = sendGridEmailer::validateEmails($emailList);
Run Code Online (Sandbox Code Playgroud)
在sendGridEmailer类中:
// loop and validate each email address
public static function validateEmails($emailList) {
foreach($emailList as $address => $name) {
try {
$v = new sfValidatorEmail();
$email = $v->clean($address);
} catch (sfValidatorError $e) {
unset($emailList[$address]);
}
}
foreach($emailList as $address => $name) {
$rfcTesting = validateEmailForRFC::is_email($address);
if(!$rfcTesting) {
unset($emailList[$address]);
}
if (!preg_match('/^[a-zA-Z0-9_.-@]/', $address)) {
unset($emailList[$address]);
}
}
// List should be clean
return $emailList;
}
Run Code Online (Sandbox Code Playgroud)
所以这首先使用sfValidator来踢出最初的坏地址.接下来,我在这里获得了一个RFC合规性脚本,并在validateEmailForRFC类中执行它,这应该使它们符合RFC标准.
最后,我为任何有着怪异角色的散兵游勇做了最后的预赛,以前的检查没有抓到.
这使我能够保持Symfony核心不受影响,并为没有合规性错误的Swift准备好地址.
您可以使用 symfonysfValidatorEmail或filter-var函数。它们与 一起工作得足够好SwiftMailer,但它们都不是符合 RFC 的 IIRC。要根据 RFC 进行验证,您可以使用https://github.com/egulias/EmailValidator或https://github.com/dominicsayers/isemail。
| 归档时间: |
|
| 查看次数: |
1145 次 |
| 最近记录: |