如何在Swift Mailer中扩展MailboxHeader.php或验证电子邮件

前端之家收集整理的这篇文章主要介绍了如何在Swift Mailer中扩展MailboxHeader.php或验证电子邮件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用SYmfony 1.4和 swift邮件程序通过Sendgrid发送大量电子邮件.

我在某些电子邮件地址上收到RFC合规性错误.

一个解决方案是remove the condition to throw the error,它确实有效,但它涉及改变核心.你如何在站点文件而不是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.'
          //   );
        }
    }
}

这似乎有点沉重.有没有办法验证电子邮件的RFC合规性.如果是这样,那么我可以从阵列中取消它.

更新07/17/13

我能够对每个地址进行彻底的清理,使其符合RFC标准,从而解决了这个问题.但是,我想知道SwiftMailer中是否存在执行此检查的函数,而不是编写自定义函数.

更新07/18/13

这就是我的工作.我试图尽可能地清理条目.

在名为$emailList的变量中加载地址数组

在行动中:

$cleanList = sendGridEmailer::validateEmails($emailList);

在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;
    }

所以这首先使用sfValidator来踢出最初的坏地址.接下来,我获得了RFC合规性脚本here并在validateEmailForRFC类中执行该脚本,这应该使它们符合RFC标准.

最后,我为任何有着怪异角色的散兵游勇做了最后的预赛,以前的检查没有抓到.

这使我能够保持Symfony核心不受影响,并为没有合规性错误的Swift准备好地址.

您可以使用symfony的sfValidatorEmail或 filter-var函数.它们与SwiftMailer一起工作得很好,但它们都不符合RFC IIRC.要验证RFC,您可以使用 https://github.com/egulias/EmailValidatorhttps://github.com/dominicsayers/isemail.

猜你在找的Swift相关文章