Я использую php для чтения сообщений из почтового ящика обмена. Ниже приведен простой скрипт, а не реальный пример.
В какой-то момент цикл for иногда прерывается, и я нахожусь в процессе устранения этих проблем.
Если имеется 10 сообщений и разрыв цикла в последнем из них, остальные 9 сообщений, которые должны быть удалены, не будут удалены, поскольку разрыв кода до удаления не достигнут.
Есть ли обходной путь, так что даже если код сломается, я все равно смогу удалить правильные электронные письма, которые уже были обработаны для удаления.
//checking how many messages are in the mailbox
$total = imap_num_msg($inbox);
//if there are any messages then process them
if ( $total > 0){
echo "\nAnalysing Mailbox\n";
for ($x=$total; $x>0; $x--){
//doing some work here
delete_processed_message($x);
}
echo "Please wait, expunging old messages\n";
imap_expunge($inbox);
echo "Please wait, disconnecting from mail box\n";
imap_close($inbox);
Большое спасибо.
Один из вариантов — обернуть тебя delete_processed_message($x)
в блок try-catch (официальную документацию можно найти Вот). Таким образом, даже если оно выдает исключение (что, вероятно, является причиной его сбоя), оно будет продолжаться с остальными сообщениями.
Код должен выглядеть так
...
for ($x=$total; $x>0; $x--){
//doing some work here
try {
delete_processed_message($x);
}
catch (Exception $e) {
//Here you can log it to a file, or simply echo it
echo 'Caught exception: ', $e->getMessage(), "\n";
}
}
...
И как это было объяснено в этот вопрос, использование try-catch внутри цикла for гарантирует завершение for.
Других решений пока нет …