Как без остановки просмотреть каждое электронное письмо в «папке», даже если одно из них содержит ошибку?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как без остановки просмотреть каждое электронное письмо в «папке», даже если одно из них содержит ошибку?

Сообщение Anonymous »

Недавно я был вынужден переключиться на ужасную библиотеку "Webklex/PHP-IMAP" после того, как PHP 8.4 наконец удалил важное расширение IMAP, на которое я полагался при получении электронной почты и для которого я потратил много времени, совершенствуя свой код.
Без какой-либо значимой документации (https://www.php-imap.com/ просто игнорирует важные основные концепции), мне приходилось догадываться и экспериментировать на каждом этапе путь. Наконец, я думал, что у меня все работает, но затем я начал получать недействительные спам-сообщения, которые нанесли вред этой библиотеке:
По умолчанию любое недействительное электронное письмо (например, неверный формат даты в заголовке) полностью блокирует PHP-скрипт от любой дальнейшей обработки и просто выдает/выдает ошибки. Это происходит на этой критической строке, которая извлекает все электронные письма из папки $:

Код: Выделить всё

$messages = $folder->messages()->all()->get();
После нескольких часов пота, ругани и криков в монитор компьютера я в конце концов догадался, как изменить его на:

Код: Выделить всё

$messages = $folder->messages()->all()->softFail()->get();
Теперь он больше не останавливает всю обработку при первых признаках испорченного электронного письма, а переходит к следующему и так далее в моем цикле (следуя этой строке, как в их примере). Однако он по-прежнему не позволяет мне делать что-либо с испорченным сообщением электронной почты (никаким образом обращаться к ним), поэтому они навсегда застревают в моем почтовом ящике/"папке" и повторно загружаются каждый раз, когда мой скрипт получает электронные письма, каждый раз регистрируя "тихую"/программную ошибку, которую я в настоящее время подавляю. Количество таких испорченных и застрявших электронных писем будет продолжать накапливаться и тратить все больше ресурсов, если я не войду вручную через веб-интерфейс моего поставщика электронной почты и не буду вручную отправлять эти электронные письма вручную.
Чтобы было кристально ясно, что я говорю:
  • Если я использую $messages = $folder->messages()->all()->get();, наличие любых сломанных сообщений электронная почта в почтовом ящике останавливает всю обработку, делая ее совершенно бесполезной.
  • Если я использую $messages = $folder->messages()->all()->softFail()->get();, это позволяет мне перебирать все VALID электронные письма, но недействительные просто игнорируются и не включаются в возвращаемый массив $messages, поэтому мой цикл foreach никогда не «видит» сломанные вообще, и поэтому не может "ссылаться" на них, чтобы удалить их!
Как мне заставить библиотеку включать эти сломанные электронные письма, чтобы я мог их фактически удалить?
Обратите внимание, что «перехват» ошибок бессмысленен, поскольку это происходит в вызове, где он извлекает все электронные письма, а не внутри цикла foreach при переборе результатов этого вызова.
Пожалуйста, также обратите внимание: я не хочу добавлять «пользовательский формат даты», чтобы временно обойти эту проблему для конкретных испорченных электронных писем, которые я получил, потому что это неизбежно будет происходить снова и снова каждый раз, когда кто-то решит послать мне испорченное электронное письмо, и это абсолютно никогда не должно мешать библиотеке получать электронные письма! Бессмысленно пытаться добавлять еще более странные форматы дат, поскольку они могут просто злонамеренно (или по некомпетентности) превратить их в любую случайную строку. Или это может быть совершенно другая ошибка, которая также не позволяет библиотеке правильно ее проанализировать. Я просто хочу удалить и игнорировать любые такие недействительные электронные письма, потому что они никогда не являются «настоящими» электронными письмами (всегда просто спам или вредоносные тесты). Я знаю о (совершенно недокументированной) опции Fallback_date, но она не имеет для меня никакого смысла, и такого рода стрессовое «решение» Whac-A-Mole — это не то, что я ищу в любом случае.
Я потратил бесчисленное количество часов на поиск в Интернете, задавая вопросы в ChatGPT, экспериментируя, читая «документацию» (которая почти не существует) и очень много размышляя об этом. Я просто не вижу способа сделать это. ChatGPT выдает неработающий/бессмысленный код. Существующие обсуждения в Интернете бесполезны/неактуальны. Github не позволяет мне зарегистрировать учетную запись, чтобы спрашивать там. Сам автор на электронные письма вообще не отвечает (думаю, он рассчитывает на оплату). Не существует ни одной альтернативной библиотеки, которая не опиралась бы на ныне исчезнувшее расширение PHP IMAP и не была бы просто ответвлением этой библиотеки. Примеры тщательно избегают пригодности для реального/реального использования.
Один пример на https://github.com/Webklex/php-imap?tab ... ge-example буквально гласит:

Имейте в виду, что это не следует тестировать в реальной жизни и
предназначено только для того, чтобы дать представление о том, как все работает.

(Четыре других примера, найденных в руководстве, одинаково бесполезны/бессмысленны и также помечены как таковые.)
Если это не схема зарабатывания денег на коммерческой поддержке, я искренне не могу понять, как автор ожидает, что кто-то поймет, как использовать его библиотеку, когда нет значимой документации или реальных примеров использования. Я надеюсь, что мне не хватает целого раздела, в котором подробно объясняется, как это работает, но я прочитал каждую страницу доступной документации, и в ней ничего не объясняется о базовом практическом использовании простой загрузки электронной почты через IMAP. Существующие примеры перестанут работать, как только кто-нибудь отправит вам недействительный адрес электронной почты.

Подробнее здесь: https://stackoverflow.com/questions/798 ... n-if-one-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»