Как удалить сообщение из imap, если разрыв цикла

Я использую 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);

Большое спасибо.

0

Решение

Один из вариантов — обернуть тебя 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.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]