swift 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准备好地址.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值