Как отправить прикрепленный файл вложением?
xccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
Дополнительно:
прячьте длинные портянки кода под спойлер.
Ответы:
Надо научиться пользоваться интернетом
И спросить там, как в пхп отправить прикрепленный файл вложением
- уже погуглил где только можно даж в ИИ. Всё равно приходит ссылкой
- Ну давайте попробуем вместе.
Вот вы набираете в браузере, как в пхп отправить прикрепленный файл вложением
что вы после этого видите?
Поскольку письмо отправляется средствами WordPress'а, нам достаточно посмотреть описание функции wp_mail() на официальном сайте и узнать, что пятым параметром она может принимать массив с путями к файлам, которые нужно отправить в виде вложения:
wp_mail(string|string[] $to, string $subject, string $message, string|string[] $headers = '', string|string[] $attachments = array() ): bool |
wp_mail(string|string[] $to, string $subject, string $message, string|string[] $headers = '', string|string[] $attachments = array() ): bool
Пример использования тоже найти элементарно:
$attachments = array(ABSPATH . '/uploads/abc.png'); wp_mail($email, 'Testing Attachment' , 'This is subscription','This is for header',$attachments); |
$attachments = array(ABSPATH . '/uploads/abc.png'); wp_mail($email, 'Testing Attachment' , 'This is subscription','This is for header',$attachments);
- Получается вот так нужно сделать?
// removing white space $fileName = isset($_FILES["file"]["name"]) ? preg_replace('/\s+/', '-', $_FILES["file"]["name"]) : ''; // removing special character but keep . character because . seprate to extantion of file $fileName = preg_replace('/[^A-Za-z0-9.\-]/', '', $fileName); // rename file using time $fileName = !empty($fileName) ? time().'-'.$fileName : ''; $attachments = array(); if (!empty($fileName)) { $arr = wp_upload_bits($fileName, null, file_get_contents($_FILES["file"]["tmp_name"])); $url = !empty($arr['url']) ? $arr['url'] : 'не прикреплен'; $attachments = array($arr['file']); } wp_mail($to, 'Форма заказа расчета кухни', $message, $header, $attachments); wp_die();// removing white space $fileName = isset($_FILES["file"]["name"]) ? preg_replace('/\s+/', '-', $_FILES["file"]["name"]) : ''; // removing special character but keep . character because . seprate to extantion of file $fileName = preg_replace('/[^A-Za-z0-9.\-]/', '', $fileName); // rename file using time $fileName = !empty($fileName) ? time().'-'.$fileName : ''; $attachments = array(); if (!empty($fileName)) { $arr = wp_upload_bits($fileName, null, file_get_contents($_FILES["file"]["tmp_name"])); $url = !empty($arr['url']) ? $arr['url'] : 'не прикреплен'; $attachments = array($arr['file']); } wp_mail($to, 'Форма заказа расчета кухни', $message, $header, $attachments); wp_die();
- ArtyomAlyokhin, ну так проверьте)
- humoured, Да проверил уже, не работает(
Буду очень признателен если поможете с этим и покажете как правильно - ArtyomAlyokhin, что значит "не работает"? Я не телепат и никто не телепат. Список ошибок и предпринятые способы решения в студию.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В WordPress файл можно отправить вложением через
wp_mail(): четвёртый параметр — headers, пятый — массив путей к файлам. Важно передавать именно путь на сервере, а не URL. URL видаhttps://site.ru/file.pdfкак вложение не подходит, его нужно сначала сопоставить с локальным файлом или скачать во временную папку.$to = 'client@example.com'; $subject = 'Документ'; $message = 'Здравствуйте, во вложении файл.'; $headers = ['Content-Type: text/html; charset=UTF-8']; $attachments = [ WP_CONTENT_DIR . '/uploads/docs/file.pdf', ]; wp_mail($to, $subject, wpautop($message), $headers, $attachments);
Если файл загружен через форму, сначала проверьте ошибку загрузки, тип, размер и переместите его через WordPress API:
if (! empty($_FILES['document']['tmp_name'])) { require_once ABSPATH . 'wp-admin/includes/file.php'; $uploaded = wp_handle_upload($_FILES['document'], ['test_form' => false]); if (empty($uploaded['error'])) { wp_mail( 'admin@example.com', 'Новая заявка', 'Файл во вложении', ['Content-Type: text/html; charset=UTF-8'], [$uploaded['file']] ); } }
Для Contact Form 7 вложения настраиваются проще: в форме добавляете поле file, а во вкладке «Почта» в поле «Прикреплённые файлы» указываете mail-tag, например
[your-file].Частые ошибки: передают URL вместо пути, файл удаляется до отправки, хостинг блокирует большие вложения, указан неправильный MIME type, письмо уходит в спам. Для больших файлов лучше отправлять ссылку на скачивание, а не само вложение.
Перед внедрением на рабочем сайте проверьте решение на копии или хотя бы сделайте резервную копию изменяемого файла. После правки включите отображение ошибок, откройте проблемную страницу в обычном и приватном окне, проверьте консоль браузера и логи PHP. Если задача связана с WordPress, WooCommerce или ACF, дополнительно проверьте поведение после очистки кэша и после выхода из админки: часть ошибок видна только для незалогиненного пользователя.
Если код работает только в одном шаблоне, лучше не оставлять его разрозненно в нескольких файлах. Вынесите повторяемую логику в функцию, небольшой плагин или template part, а в шаблоне оставьте только вызов. Так проще поддерживать решение после обновления темы, плагинов и PHP.