Вопрос или проблема
На моем сайте есть две формы, которые отправляют электронные письма. Одна из них, для которой вложения не требуются, отправляется корректно, а другая, с вложением, не отправляется. Я использую конфигурацию 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
может работать некорректно в случае с вложениями. Ниже приведено подробное руководство по устранению проблемы.
Диагностика проблемы
-
Проверка пути к файлам: Убедитесь, что файлы действительно существуют по указанному пути и имеют допустимые права доступа для чтения. Используйте
file_exists()
иis_readable()
для подтверждения.if (!file_exists($attachmentPath) || !is_readable($attachmentPath)) { echo "Файл не существует или недоступен для чтения: $attachmentPath"; }
-
Правильный формат файла: Проверьте, что файлы загружены корректно и не повреждены. Попробуйте вручную открыть файлы, чтобы убедиться, что они не испорчены.
-
Корректность SMTP конфигурации: Вы используете плагин Postman SMTP, убедитесь, что настройки SMTP правильные и сервер не блокирует вашу почту из-за большого размера вложений.
-
Логирование ошибок: Включите логирование ошибок 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.