Использование wp_mail с вложениями, но вложения не получены

26 апр. 2012 г., 06:59:07
Просмотры: 57.6K
Голосов: 16

Я просмотрел множество примеров, включая этот.

Я получаю письмо без проблем, но вложения отсутствуют. Возможно, я что-то упускаю в content/type файла? Во всех просмотренных примерах используется только text/html как тип контента.

Вот что у меня есть (добавлено по запросу Stephen)

if( isset( $_POST['to'] ) && isset( $_POST['from'] ) ) {
    global $wpdb;

    $to = $_POST['to'];
    $from = $_POST['from']; 
    $name = get_bloginfo('name');
    $attachment = $_POST['file'];
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: multipart/mixed; charset=iso-8859-1' . "\r\n";

    $headers .= 'From: ' . $name . ' <' . $from . '>' . "\r\n";   
    $subject = 'Отправка на Kindle';
    $msg = 'Ура! Ваша книга <a href="http://yahoo.com">прибыла</a>';

    $mail_attachment = array( $attachment );
    wp_mail($to, $subject, $msg, $headers, $mail_attachment);
    echo 'Письмо отправлено';
} else {
    echo 'Письмо не отправлено';
}
2
Комментарии

Не могли бы вы опубликовать код того, что вы уже пробовали?

Stephen Harris Stephen Harris
26 апр. 2012 г. 10:49:41

Привет, Стивен, только что обновил пост с кодом. Спасибо!

tbm tbm
26 апр. 2012 г. 21:31:15
Все ответы на вопрос 1
5
31

Аргумент $attachment для функции wp_mail принимает файл (или массив файлов) — но путь к файлу должен быть указан полностью. Например:

<?php
   $attachments = array(WP_CONTENT_DIR . '/uploads/file_to_attach.zip');
   $headers = 'From: My Name <myname@mydomain.com>' . "\r\n";
   wp_mail('test@test.com', 'subject', 'message', $headers, $attachments);
?>

(см. Codex). Похоже, что ваш $_POST['file'], скорее всего, не указывает полный путь.

Вложение должно быть путем к файлу, а не URL. Следующий код сработал у меня:

$to = $_POST['to'];
$from = $_POST['from']; 
$name = get_bloginfo('name');

$headers = 'From: My Name <myname@mydomain.com>' . "\r\n";

$subject = 'Send to Kindle';

$msg = 'Yay! Your book has <a href="http://yahoo.com">arrived</a>';

$mail_attachment = array(WP_CONTENT_DIR . '/uploads/2012/03/image.png');   

wp_mail($to, $subject, $msg, $headers, $mail_attachment);

Примечание: Я также изменил атрибут headers. Не совсем уверен, что именно вы пытались сделать в вашем примере, но из-за этого текст письма не отображался в некоторых почтовых клиентах.

27 апр. 2012 г. 03:20:36
Комментарии

Спасибо, Стивен, что уточнили... ок, $_Post['file'] — это на самом деле URL к файлу, и я подтвердил, что URL корректен. Это допустимо?

tbm tbm
27 апр. 2012 г. 06:40:50

Нет, смотри обновлённый ответ :)

Stephen Harris Stephen Harris
27 апр. 2012 г. 13:46:09

Значит, я не могу позволить им отправлять вложение, которое размещено где-то ещё, например, на Amazon S3? Я этого боялся. Просто я пытаюсь дать людям возможность отправить PDF на Kindle прямо со страницы сайта. В любом случае, попробую позже и отпишусь.

tbm tbm
27 апр. 2012 г. 15:02:13

Вы можете прочитать удалённый файл, а затем прикрепить его? Вот пример здесь. Точно как это можно сделать / лучшие практики — это вопрос для SO.

Stephen Harris Stephen Harris
27 апр. 2012 г. 15:17:14

Огромное спасибо, Стивен, я попробовал ваше решение, и оно сработало. Теперь... мне нужно разобраться, как отправлять вложение, размещённое на другом сервере. Спасибо за подсказку, где искать!

tbm tbm
28 апр. 2012 г. 07:56:13