在“抄送”和“密件抄送”中查找被拒绝的地址-如何操作


Finding out Rejected Addresses in Cc and Bcc also - how to?

我可以从->setTo(array(.)中找到swiftmailer中被拒绝的地址,代码如下:

$mailer = Swift_Mailer::newInstance( ... );
$message = Swift_Message::newInstance( ... )
->setFrom( ... )
->setTo(array(
'receiver@bad-domain.org' => 'Receiver Name',
'other@domain.org' => 'A name',
'other-receiver@bad-domain.org' => 'Other Name'
))
->setBody( ... )
;
// Pass a variable name to the send() method
if (!$mailer->send($message, $failures))
{
echo "Failures:";
print_r($failures);
}
/*
Failures:
Array (
0 => receiver@bad-domain.org,
1 => other-receiver@bad-domain.org
)
*/

现在我也想从"抄送"answers"密件抄送"字段中找出被拒绝的地址。如何添加类似的代码?有教程或变通方法吗?swiftmailer教程中没有任何示例。

您可以使用try-catch块来设置收件人、抄送和密件抄送电子邮件地址。

来自手册:

如果您根据可能包含无效的电子邮件地址,可以防止可能的异常通过使用CCD_ 2和仅添加验证的地址。另一种方法是把你的尝试捕获块和句柄中的setTo()setCc()setBcc()调用捕获块中的CCD_ 6。

因此,您可以在$message对象上使用try-catch

$message = Swift_Message::newInstance();
$emails = array(
    'receiver@bad-domain.org' => 'Receiver Name',
    'other@domain.org' => 'A name',
    'other-receiver@bad-domain.org' => 'Other Name'
);
// loop through emails and set the individually to catch exceptions
foreach($emails as $email => $name)
{
    try {
        $message->setTo(array($email => $name));
    } catch(Swift_RfcComplianceException $e) {
        echo "The email ".$email." seems invalid";
    }
}
// And do the same thing with cc and bcc emails
$ccEmails = array(
    'receiver@ccemail.org' => 'CC Receiver Name'
);
foreach($ccEmails as $email => $name)
{
    try {
        $message->setCc(array($email => $name));
    } catch(Swift_RfcComplianceException $e) {
        echo "The email ".$email." seems invalid";
    }
}

如果您希望如何处理故障,您可以将故障设置为一个变量。

编辑:如果您有一组名字和姓氏不同的用户,您可以使用以下内容:

$users = array(
    array('email' => 'receiver@bad-domain.org', 'first' => 'Receiver', 'last' => 'Name'),
    array('email' => 'other@domain.org', 'first' => 'A', 'last' => 'name'),
    array('email' => 'other-receiver@bad-domain.org', 'first' => 'Other', 'last' => 'Name')
);
// loop through users and set the individually to catch exceptions
foreach($users as $user)
{
    try {
        $message->setTo(array($user['email'] => $user['first'].' '.$user['last']));
    } catch(Swift_RfcComplianceException $e) {
        echo "The email ".$user['email']." seems invalid";
    }
}