wp_mail не отправляет письма с вложением

Вопрос или проблема

На моем сайте есть две формы, которые отправляют электронные письма. Одна из них, для которой вложения не требуются, отправляется корректно, а другая, с вложением, не отправляется. Я использую конфигурацию SMTP с плагином Postman SMTP.

move_uploaded_file($_FILES["cv"]["tmp_name"],WP_CONTENT_DIR .'/uploads/CV/'.basename($_FILES['cv']['name']));
move_uploaded_file($_FILES["lm"]["tmp_name"],WP_CONTENT_DIR .'/uploads/lm/'.basename($_FILES['lm']['name']));
    
$attachments = array(
    WP_CONTENT_DIR ."/uploads/CV/".$_FILES["cv"]["name"],
    WP_CONTENT_DIR ."/uploads/lm/".$_FILES["lm"]["name"]
    );

Это код, который я использую для сохранения и получения вложений, и я просто использую функцию wp_mail для отправки следующим образом:

$sent=wp_mail($s, $subject, $message, $headers,$attachments);

В другой форме я использую тот же код, только без переменной $attachments.
Форма без вложений отправляется, но другая нет.
Может ли кто-нибудь помочь мне найти проблему?

Попробуйте код ниже.

<?php
$attachments = array();

array_push($attachments, WP_CONTENT_DIR . '/uploads/my-first-attachment.docx' );
array_push($attachments, WP_CONTENT_DIR . '/uploads/my-second-attachment.zip' );

$to="[email protected]";
$subject="Online: multiple attachment demo through wp_mail of wordpress";
$message="This is testing";
$headers="From: NAPSWI online <[email protected]>";
get_header();
if( wp_mail( $to, $subject, $message, $headers, $attachments) ) {
 // сообщение было отправлено...
 echo 'Тестовое сообщение было отправлено. Проверьте свой почтовый ящик.';
} else {
 // сообщение не было отправлено...
 echo 'Сообщение не было отправлено!';
}
?>

Я также попробовал бы добавить в массив, используя следующий способ. (см. мой пример) Попробуйте использовать фактическое местоположение 2 файлов просто для теста, затем вставьте PHP.
Я предложил 3 разных варианта для опробования, но, конечно, вы должны использовать фактический URL на вашем сайте к этим files/

<?php
$attachments = array(); // может не понадобиться

$att1 = WP_CONTENT_DIR . '/uploads/my-1st-attachemnt.zip';
$att2 = WP_CONTENT_DIR . '/uploads/my-second-attachment.zip';

$attachments[] = $att1; // попробуйте это как рабочее решение
$attachments[] = $att2; // попробуйте это как рабочее решение 
$attachments[] = 'http://www.example.com/wp-content/uploads/my-1st-attachemnt.zip';  // попробуйте это вторым
$attachments[] = '/wp-content/uploads/my-second-attachment.zip';  // попробуйте это последним

$to = "[email protected]";
$subject = "Online: multiple attachment demo through wp_mail of wordpress";
$message = "This is testing";
$headers="From: NAPSWI online <[email protected]>";
get_header();

if ( wp_mail( $to, $subject, $message, $headers, $attachments) ) {
   // сообщение было отправлено...
   echo 'Тестовое сообщение было отправлено. Проверьте свой почтовый ящик.';
} else {
   // сообщение не было отправлено...
   echo 'Сообщение не было отправлено!';
}

Ответ или решение

Столкнувшись с проблемой отправки сообщений электронной почты с вложениями в WordPress, важно разобраться в деталях, чтобы успешно решить эту задачу. Вам необходимо учитывать несколько аспектов, чтобы выяснить, почему функция wp_mail может работать некорректно в случае с вложениями. Ниже приведено подробное руководство по устранению проблемы.

Диагностика проблемы

  1. Проверка пути к файлам: Убедитесь, что файлы действительно существуют по указанному пути и имеют допустимые права доступа для чтения. Используйте file_exists() и is_readable() для подтверждения.

    if (!file_exists($attachmentPath) || !is_readable($attachmentPath)) {
       echo "Файл не существует или недоступен для чтения: $attachmentPath";
    }
  2. Правильный формат файла: Проверьте, что файлы загружены корректно и не повреждены. Попробуйте вручную открыть файлы, чтобы убедиться, что они не испорчены.

  3. Корректность SMTP конфигурации: Вы используете плагин Postman SMTP, убедитесь, что настройки SMTP правильные и сервер не блокирует вашу почту из-за большого размера вложений.

  4. Логирование ошибок: Включите логирование ошибок WordPress, чтобы увидеть, встречаются ли какие-либо специфичные к случаю ошибки.

    define('WP_DEBUG', true);
    define('WP_DEBUG_LOG', true);
    define('WP_DEBUG_DISPLAY', true);

Решение проблемы

1. Оптимизация пути файлов

Проверьте пути к файлам, которые вы добавляете в массив $attachments. Убедитесь, что переменные содержат нужные пути:

$cvPath = WP_CONTENT_DIR .'/uploads/CV/'.basename($_FILES['cv']['name']);
$lmPath = WP_CONTENT_DIR .'/uploads/lm/'.basename($_FILES['lm']['name']);

$attachments = array($cvPath, $lmPath);

2. Убедитесь в успешной загрузке файлов

Вы можете проверить результат функции move_uploaded_file и обработать возможные ошибки:

$cvUploadSuccess = move_uploaded_file($_FILES["cv"]["tmp_name"], $cvPath);
$lmUploadSuccess = move_uploaded_file($_FILES["lm"]["tmp_name"], $lmPath);

if (!$cvUploadSuccess || !$lmUploadSuccess) {
    die("Ошибка загрузки файлов.");
}

3. Протестируйте отправку без вложений

Убедитесь, что базовая отправка почты проходит без вложений, это поможет уточнить, что проблема действительно связана с ними.

4. Проверка конфигурации SMTP и ограничений

Убедитесь, что параметры SMTP настроены правильно, и что сервер не отвергает сообщения из-за лимита на размер вложений.

Заключение

Используя предложенные шаги, вы сможете локализовать и устранить проблему с отправкой почты. Убедитесь, что все пути верны, файлы доступны и не повреждены, а конфигурация SMTP не имеет ограничений, препятствующих отправке сообщений с вложениями. Если проблема сохраняется, рассмотрите возможность использования альтернативных плагинов SMTP.

Оцените материал
Добавить комментарий

Капча загружается...