Задать вопрос
@ssawyer

Как настроить отправку файла на почту Wordpress?

Есть форма, инпут для файла выглядит так:

<div class="input__wrapper">
  <input name="file" type="file" id="input__file" class="input input__file" value="1" multiple>
  <label for="input__file" class="input__file-button">
   <p class="input__file-icon-wrapper"><img class="input__file-icon" src="<?php echo get_template_directory_uri();?>/assets/img/icons/file_download.svg"  alt="Выбрать файл" width="25"></p>
  <p class="input__file-button-text">Выберите файл</p>
  </label>
</div>

Обработчик AJAX

jQuery(document).ready(function ($) {
    var add_form = $('#form-ivent');
	var formData = new FormData(form);
    // Сброс значений полей
    $('#form-ivent input, #form-ivent textarea').on('blur', function () {
        $('#form-ivent input, #add_feedback textarea').removeClass('error');
        $('.error-name,.error-tel,.error-email,.error-comments').remove();
        $('#submit-form-ivent').val('Отправить');
    });

    // Отправка значений полей
    var options = {
        url: feedback_object.url,
        data: {
            action: 'feedback_action',
            nonce: feedback_object.nonce,
			formData,
        },
        type: 'POST',
        dataType: 'json',
        beforeSubmit: function (xhr) {
            // При отправке формы меняем надпись на кнопке
            $('#submit-form-ivent').val('Отправляем...');
        },
        success: function (request, xhr, status, error) {
            
            if (request.success === true) {
                // Если все поля заполнены, отправляем данные и меняем надпись на кнопке
//                 add_form.after('<div class="message-success">' + request.data + '</div>').slideDown();
                $('#submit-form-ivent').val('Отправлено');
            } else {
                // Если поля не заполнены, выводим сообщения и меняем надпись на кнопке
                $.each(request.data, function (key, val) {
                    $('.art_' + key).addClass('error');
                    $('.art_' + key).before('<p class="error-' + key + '">' + val + '</p>');
                });
                $('#submit-form-ivent').val('Ошибка...');

            }
            // При успешной отправке сбрасываем значения полей
            $('#form-ivent')[0].reset();
        },
        error: function (request, status, error) {
            $('#submit-form-ivent').val('Ошибка...');
        }
    };
    // Отправка формы
    add_form.ajaxForm(options);
});


Проверяю файл в обработчик php

// Проверяем файлов
	if($_FILES) {
	$filepath = array();
	$filename = array();
	$i = 0;
		foreach ($_FILES["file"]["error"] as $key => $error) {
			if ($error == UPLOAD_ERR_OK) {
				$filename[$i][0] = $_FILES["file"]["tmp_name"][$key];
				$filename[$i][1] = $_FILES["file"]["name"][$key];
				$i++;
			}
		}
	}


Отправляю форму в обработчике php

// Указываем адресата
		$email_to = 'email@yandex.ru';

		// Если адресат не указан, то берем данные из настроек сайта
		if ( ! $email_to ) {
			$email_to = get_option( 'admin_email' );
		}

		$body    = "Имя: $art_name \nТелефон: $art_tel \nEmail: $art_email \n\n\nМероприятие: $art_ivent \nИнтеграция: $art_adv \nСообщение: $art_comments";
		$headers = 'From: ' . $art_name . ' <' . $email_to . '>' . "\r\n" . 'Reply-To: ' . $email_to;

		$boundary = "--".md5(uniqid(time())); // генерируем разделитель
		$multipart .= $body;
		foreach ($filename as $key => $value) {
			$fp = fopen($value[0], "r"); 
			$content = fread($fp, filesize($value[0]));
			fclose($fp);
			$file .= "--".$boundary."\r\n";
			$file .= "Content-Type: application/octet-stream\r\n";
			$file .= "Content-Transfer-Encoding: base64\r\n";
			$file .= "Content-Disposition: attachment; filename=\"".$value[1]."\"\r\n\r\n";
			$file .= chunk_split(base64_encode($content))."\r\n";
		}
		$multipart .= $file."--".$boundary."--\r\n";

		// Отправляем письмо
		wp_mail( $email_to, $art_subject, $body, $headers, $filename, $multipart );

		// Отправляем сообщение об успешной отправке
		$message_success = 'Сообщение отправлено. В ближайшее время с вами свяжутся.';
		wp_send_json_success( $message_success );
	}


Никак не получается, файл не приходит на почту.
  • Вопрос задан
  • 95 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@chelnokov_a
Файл является стримом. Наверняка на php есть какая-то либа для обработки таких данных
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы