Здравствуйте.
С исключениями как в рамках PHPMailer, так и PHP можно сказать не работал (слышать слышал, но не использовал), поэтому не судите строго, если делаю какую-то банальную ошибку.
На тостер полез, потому что голова уже пухнет, от информации, которую я прочитал про исключения и вроде бы все делаю как рекомендуется, но все равно не выходит сделать, что требуется.
Суть в следующем, для рассылки писем использую PHPMailer, рассылка работает, теперь необходимо обернуть проверками, "некоторые этапы работы" (
наверное так будет правильнее выразиться): отправка писем, проверка подключаемого шаблона письма, корректность получаемых данных и т.д.
Буксую на создание проверки при отправки письма
mailer->send();
Ход действий такой:
1. Создаю свой класс EmailSendingFailed, наследуюсь от Exception
<?php declare(strict_types=1);
namespace extMailer;
use Exception;
class EmailSendingFailed extends Exception {}
Далее в классе, который расширяет стандартный класс PHPMailer, добавляю
namespace extMailer;
use EmailSendingFailed;
...
//В методе отвечающим за отправку реализую try\catch
public function sending(string $event, EmailAddress $recipient, array $tpl = array()): void
{
$this->mailer->addAddress($recipient->email, $recipient->name);
$this->mailer->Subject = $subject;
$this->mailer->Body = $body;
$this->mailer->isHTML(true);
try {
if (!$this->mailer->send()) {
throw new EmailSendingFailed("Couldn't send email. Invalid sender address '{$recipient->email}'.");
}
} catch (Exception $e) {
$e->getMessage();
}
$this->mailer->ClearAddresses();
}
После чего "ломаю" send(); (указываю некорректный формат mailmail.ru). В итоге письма перестают отправляться (что вполне логично :) ), но вот исключение не выбрасывается.
Просмотрел дебагером, исключение генерируется, попадает в блок catch и скрипт продолжает работать (хотя его работа должна прерываться). Не подскажите из-за чего такая штука может происходить?