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

Рейтинг: 0Ответов: 1Опубликовано: 12.02.2023

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

<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 fd = new FormData();
        var files_data = $('#form-ivent #input__file'); // The <input type="file" /> field
    
        // Loop through each data and create an array file[] containing our files data.
        $.each($(files_data), function(i, obj) {
            $.each(obj.files,function(j,file){
                fd.append('files[' + j + ']', file);
            })
        });
    
    // Сброс значений полей
    $('#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,
        },
        fd,
        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);
});

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

// Проверяем файлов
  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++;
      }
    }
  }

Отправляю форму

// Указываем адресата
    $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 );
      }

Никак не получается, файл не приходит на почту. Помогите, добрые люди.

Ответы

▲ 0

Вам нужно настроить почту для своего домена и указать его во From или использовать SMTP если хотите использовать сторонний сервис для отправки