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

15

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

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

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

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 = 'Send to Kindle';
$msg = 'Yay! Your book has <a href="http://yahoo.com">arrived</a>';

$mail_attachment = array( $attachment );
wp_mail($to, $subject, $msg, $headers, $mail_attachment);
echo 'Email sent';
} else {
echo 'Email not sent';
}
TBM
источник
Не могли бы вы опубликовать код относительно того, что вы пробовали?
Стивен Харрис
Привет Стивен, только что обновил пост с кодом. Спасибо!
TBM

Ответы:

27

$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);
?>

( см. Кодекс ). Похоже, что вы $_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тоже изменил атрибут Я не совсем уверен, что вы пытались сделать на примере, но это означало, что сообщение электронной почты не было видно на некоторых почтовых клиентах.

Стивен Харрис
источник
Спасибо, Стивен, за то, что ответили ... хорошо, $_Post['file']на самом деле это URL-адрес файла, и я подтвердил, что URL-адрес правильный. Это приемлемо?
2012 года
Нет, смотрите обновленный ответ :)
Стивен Харрис
Это означает, что я не могу заставить их отправлять вложения, размещенные в других местах, например в Amazon S3? Я боялся этого. Я просто пытаюсь дать людям возможность отправить Kindle по электронной почте прямо с веб-страницы. В любом случае я попробую это позже и доложу.
TBM
Вы можете прочитать удаленный файл, а затем прикрепить его? Здесь есть пример . Как именно вы можете это сделать / наилучшей практикой будет вопрос для SO.
Стивен Харрис
Большое спасибо, Стивен. Я попробовал ваше решение, и оно сработало. Теперь ... Я должен выяснить, как отправить вложение, размещенное в другом месте. Спасибо за указатель, где искать!
четверг в четверг