Menggunakan wp_mail dengan lampiran tetapi tidak ada lampiran yang diterima

15

Saya telah melihat banyak contoh termasuk yang ini .

Saya mendapatkan email tidak ada masalah tetapi tidak ada lampiran. Apakah saya melewatkan konten / jenis tipe file? Semua contoh yang saya lihat hanya menggunakan teks / html sebagai jenis konten.

Inilah yang saya miliki (ditambahkan atas permintaan 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 = '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
sumber
Bisakah Anda memposting beberapa kode tentang apa yang telah Anda coba?
Stephen Harris
Halo Stephen, baru saja memperbarui kiriman dengan kode. Terima kasih!
tbm

Jawaban:

27

The $attachmentargumen untuk wp_mailmengambil file (atau array file) - tapi path file harus sepenuhnya ditentukan. Sebagai contoh:

<?php
   $attachments = array(WP_CONTENT_DIR . '/uploads/file_to_attach.zip');
   $headers = 'From: My Name <[email protected]>' . "\r\n";
   wp_mail('[email protected]', 'subject', 'message', $headers, $attachments);
?>

( lihat Codex ). Tampaknya Anda $_POST['file']mungkin tidak menentukan path lengkap.

Lampiran harus jalur file , bukan url. Berikut ini bekerja untuk saya:

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

$headers = 'From: My Name <[email protected]>' . "\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);

Catatan: Saya juga mengubah headersatributnya. Saya tidak sepenuhnya yakin apa yang sedang Anda coba lakukan sebagai contoh, tetapi itu berarti pesan email itu tidak terlihat pada beberapa klien email.

Stephen Harris
sumber
Terima kasih Stephen untuk menindaklanjuti ... ok $_Post['file']sebenarnya adalah URL ke file dan saya telah mengkonfirmasi URL itu benar. Apakah itu dapat diterima?
tbm
Tidak, lihat jawaban yang diperbarui :)
Stephen Harris
Itu berarti saya tidak bisa meminta mereka mengirim lampiran yang di-host di tempat lain misalnya Amazon S3? Saya takut akan hal itu. Saya hanya mencoba memberi orang pilihan untuk mengirim surel PDF ke Kindle langsung dari halaman web. Bagaimanapun saya akan mencoba ini nanti dan melaporkan kembali.
tbm
Anda bisa membaca file jarak jauh, lalu melampirkannya? Ada contoh di sini . Bagaimana tepatnya Anda bisa melakukannya / praktik terbaik akan menjadi pertanyaan bagi SO.
Stephen Harris
Terima kasih banyak, Stephen, saya mencoba solusi Anda dan itu berhasil. Sekarang ... Saya harus mencari cara mengirim lampiran yang diinangi di tempat lain. Terima kasih atas penunjuknya ke mana harus mencari!
tbm