wp_mail и русские имена файлов

Функция wp_mail в WordPress обрезает кириллические имена прикреплённых файлов Leave a comment

Ни для кого не секрет что через функцию WordPress «wp_mail» легко можно отправлять файлы. Для этого необходимо передать в параметр функции массив с абсолютными путями к файлам которые в момент отправки будут прикреплены к письму.

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

Например, вы приложили файл который называется «Тёркин Василий.pdf«, получателю будет доставлено письмо с вложением «.pdf«.

Проблема кроется в стороннем классе «PHPMailer» который WordPress использует для отправки сообщений функция — «addAttachment»

Пример вызова в функции wp_mail:

Пример функции PHPMailer::addAttachment

Проблема кроется в строчке «$filename = basename($path);»

Здесь функция php «basename»Возвращает последний компонент имени из указанного пути и как раз она по умолчанию обрезает кирилицу из наименования файлов.

Есть аналог функции в WordPress — «wp_basename», которая справляется  с русскими наименованиями файлов, но так как PHPMailer это сторонняя библиотека которую использует ядро WordPress, в ней нет возможности указать использование «wp_basename» по этому простым решением проблемы с кирилицей в именах файлов будет указать локаль перед вызовом функции wp_mail

Пример и решение:

В нашем случае указание setlocale(LC_CTYPE, ‘ru_RU.utf8’); — перед отправкой письма с файлами будет решеним проблемы с обрезанием имён файлов.

PS: Ни в коем случае не нужно править файлы ядра WordPress если для того не предусмотренно фильтров-хуков!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *