После обновления до Joomla 3.5.1 я получаю сообщение Invalid Address
об ошибке в некоторых моих расширениях, использующих PHPMailer (система рассылки Joomla).
Как я могу это исправить?
После обновления до Joomla 3.5.1 я получаю сообщение Invalid Address
об ошибке в некоторых моих расширениях, использующих PHPMailer (система рассылки Joomla).
Как я могу это исправить?
Ответы:
Если вы получаете эту ошибку, потому что вы используете какое-то расширение, которое отправляет электронные письма, пожалуйста, посетите страницу разработчика и сначала убедитесь, что вы используете последнюю версию .
Если вы на 100% уверены, что используете последнюю версию, но все еще получаете эту ошибку, вам следует связаться с разработчиком и спросить их об этой ошибке. Отправив им ссылку на эту страницу, может помочь разработчику исправить эту ошибку .
Если вы считаете себя достаточно опытным с PHP, вы можете попробовать исправить код самостоятельно, используя «ответ для разработчиков» ниже.
Обратите внимание, что это будет не постоянное решение, а всего лишь «патч», пока разработчик не выпустит новую версию.
Joomla 3.5.1 по умолчанию включает исключения PHPMailer. Таким образом, ошибки, которые были ранее скрыты, обнаруживаются.
Один из случаев, когда это видно сейчас - это addReplyTo
функция.
В Joomla 2.5 addReplyTo
был параметр массива.
Начиная с Joomla 3.0 ( да, еще в 2012 году ) функция JMail в Joomla была изменена, чтобы не обрабатывать массивы иначе, чем строковые параметры. Таким образом, он опирался на базовый код PHPMailer, который, однако, также изменился и, следовательно, не может правильно добавить Reply-To.
PHPMailer создает исключение для этого, однако до Joomla 3.5.1 никто не видел это исключение, если вы не включили обработку исключений вручную!
Решение
Вы можете искать свой код расширения addReplyTo
и изменять строки следующим образом:
$mailer->addReplyTo(array($replyTo, $replyToName));
к этому:
if(version_compare(JVERSION, '3.0', 'ge')) {
$mailer->addReplyTo($replyTo, $replyToName);
} else {
$mailer->addReplyTo(array($replyTo, $replyToName));
}
Кроме того, вы хотите добавить try {} catch() {}
код по мере необходимости для обработки Исключения, поступающего из JMail / PHPMailer.
Больше информации: