php - 从 PHPMailer 清除最后一个异常错误以进行下一个循环
问题描述
可以说我有这个:
$emails = array('some1@email.com', 'some2@email', 'some3@email.com', 'some4@email.com');
foreach ($emails as $email) {
try {
$mail->addAddress($email);
$mail->send();
$mail->clearAddresses();
}
catch (Exception $e) {
if (strpos($e->errorMessage(), $email) > 0) {
// so here i can see if i have error like: SMTP Error: The following recipients failed: some2@email
echo $e->errorMessage();
echo "<br>";
echo $email;
}
else {
// so i would see if there is another error, like smtp login failed etc
// here unfortunately on third loop it gives me error from second loop that some2@email is nto valid even when i sent some3@email.com
die($e->errorMessage());
}
}
}
所以下一个循环中的异常被记住并显示,上面的输出是:
SMTP Error: The following recipients failed: some2@email: L6gvk4HSs0vIlL6gvkzbQ0 invalid destination domain <some2@email>
some3@email.com
所以我的问题是,如何在处理完错误后清除错误,以便重新开始?
解决方案
由于第二个地址的异常,$mail->clearAddresses()
永远不会到达与。
因此,您的第三封邮件将同时发送到some2@email
and some3@email.com
,并再次抛出异常。
try {
$mail->addAddress($email);
$mail->send(); // try block stops here on exception
$mail->clearAddresses(); // addresses are not cleared
} catch (Exception $e) {
// ...
}
您可以在语句$mail->clearAddresses()
之外调用。try, catch
try {
$mail->addAddress($email);
$mail->send();
} catch (Exception $e) {
// ...
}
$mail->clearAddresses();
您也可以先打电话$mail->clearAddresses()
再打电话$mail->addAddress($email)
。这样,您将始终确保在添加地址之前清除地址。
try {
$mail->clearAddresses();
$mail->addAddress($email);
$mail->send();
} catch (Exception $e) {
// ...
}
推荐阅读
- python - 如何在存在的搜索字段元素中第二次发送_keys
- laravel - Laravel 将值从控制器中的 foreach 循环传递到视图
- flutter - 如何修复颤振中的本地资产错误?
- javascript - Vuetify 使项目保持在一行并根据内容调整大小
- r - 检测是否间隔给药
- algorithm - prims算法,我试图找到下图的最小生成树
- javascript - 如何从您的 href 中获取原始尺寸的图像(高度和宽度)并将它们放在您的 attr 上。使用 jQuery
- spring-boot - Spring Cloud Dataflow - 流部署卡在“部署”中
- sql - 当 Select 语句中的特定列具有所有双精度值时,为什么 Hive SQL 返回 NULL 值?
- swift - 执行操作时(包括委托和协议),一部分不起作用