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

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

Ни для кого не секрет что через функцию WordPresswp_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 не будет опубликован. Обязательные поля помечены *