Как отправить прикрепленный файл вложением?

Ссылка скопирована
1 ответ

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, что значит "не работает"? Я не телепат и никто не телепат. Список ошибок и предпринятые способы решения в студию.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Алексей Денисов Ответ

В 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);

$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']]
        );
    }
}

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.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

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

Вам также может быть интересно