Utilizarea wp_mail cu atașamente dar nu se primesc atașamentele

26 apr. 2012, 06:59:07
Vizualizări: 57.6K
Voturi: 16

Am studiat mai multe exemple, inclusiv acesta.

Primesc emailul fără probleme dar nu există atașamente. Îmi lipsește cumva content/type pentru tipul de fișier? Toate exemplele pe care le-am văzut folosesc doar text/html ca tip de conținut.

Iată ce am eu (adăugat la cererea lui Stephen)

// Verifică dacă există câmpurile 'to' și 'from' în POST
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! Cartea ta a <a href="http://yahoo.com">sosit</a>';

$mail_attachment = array( $attachment );
wp_mail($to, $subject, $msg, $headers, $mail_attachment);
echo 'Email trimis';
} else {
echo 'Email netrimis';
}
2
Comentarii

Puteți posta niște cod referitor la ce ați încercat?

Stephen Harris Stephen Harris
26 apr. 2012 10:49:41

Bună Stephen, tocmai am actualizat postarea cu codul. Mulțumesc!

tbm tbm
26 apr. 2012 21:31:15
Toate răspunsurile la întrebare 1
5
31

Argumentul $attachment pentru wp_mail acceptă un fișier (sau un array de fișiere) - dar calea către fișier trebuie să fie specificată complet. De exemplu:

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

(vezi Codex). Se pare că $_POST['file'] nu specifică probabil calea completă.

Atașamentul trebuie să fie o cale către fișier, nu o URL. Următorul cod a funcționat pentru mine:

$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! Cartea ta a <a href="http://yahoo.com">sosit</a>';

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

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

Notă: Am schimbat și atributul headers. Nu sunt sigur exact ce încerca să facă exemplul tău, dar a făcut ca mesajul email-ului să nu fie vizibil pe unele clienți de email.

27 apr. 2012 03:20:36
Comentarii

Mulțumesc Stephen pentru urmărire... ok $_Post['file'] este de fapt un URL către fișier și am confirmat că URL-ul este corect. Este acceptabil acest lucru?

tbm tbm
27 apr. 2012 06:40:50

Nu, vezi răspunsul actualizat :)

Stephen Harris Stephen Harris
27 apr. 2012 13:46:09

Asta înseamnă că nu pot permite oamenilor să trimită un atașament care este găzduit în altă parte, de exemplu pe Amazon S3? Mă temeam de asta. Încercam doar să le ofer oamenilor opțiunea de a trimite un PDF direct pe Kindle dintr-o pagină web. Oricum, voi încerca mai târziu și voi reveni cu feedback.

tbm tbm
27 apr. 2012 15:02:13

Ai putea citi fișierul de la distanță, apoi să-l atașezi? Există un exemplu aici. Modul exact în care poți face asta / cea mai bună practică ar fi o întrebare pentru SO.

Stephen Harris Stephen Harris
27 apr. 2012 15:17:14

Mulțumesc mult Stephen, am încercat soluția ta și a funcționat. Acum... trebuie să-mi dau seama cum să trimit un atașament găzduit în altă parte. Mulțumesc pentru indicarea locului unde să caut!

tbm tbm
28 apr. 2012 07:56:13