Utilizzo di wp_mail con allegati ma nessun allegato ricevuto

26 apr 2012, 06:59:07
Visualizzazioni: 57.6K
Voti: 16

Ho esaminato diversi esempi incluso questo.

Ricevo l'email senza problemi ma non ci sono allegati. Mi sto perdendo il content/type del tipo di file? Tutti gli esempi che ho visto utilizzano solo text/html come tipo di contenuto.

Ecco cosa ho (aggiunto su richiesta di 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 = 'Invia su Kindle';
    $msg = 'Evviva! Il tuo libro è <a href="http://yahoo.com">arrivato</a>';

    $mail_attachment = array( $attachment );
    wp_mail($to, $subject, $msg, $headers, $mail_attachment);
    echo 'Email inviata';
} else {
    echo 'Email non inviata';
}
2
Commenti

Potresti pubblicare del codice relativo a ciò che hai provato?

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

Ciao Stephen, ho appena aggiornato il post con il codice. Grazie!

tbm tbm
26 apr 2012 21:31:15
Tutte le risposte alla domanda 1
5
31

L'argomento $attachment per wp_mail accetta un file (o un array di file) - ma il percorso del file deve essere specificato completamente. Ad esempio:

<?php
   $attachments = array(WP_CONTENT_DIR . '/uploads/file_to_attach.zip');
   $headers = 'From: Il Mio Nome <mionome@miodominio.com>' . "\r\n";
   wp_mail('test@test.com', 'oggetto', 'messaggio', $headers, $attachments);
?>

(vedi Codex). Sembra che il tuo $_POST['file'] probabilmente non stia specificando il percorso completo.

L'allegato deve essere un percorso del file, non un URL. Il seguente codice ha funzionato per me:

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

$headers = 'From: Il Mio Nome <mionome@miodominio.com>' . "\r\n";

$subject = 'Invia a Kindle';

$msg = 'Evviva! Il tuo libro è <a href="http://yahoo.com">arrivato</a>';

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

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

Nota: Ho modificato anche l'attributo headers. Non sono completamente sicuro di cosa stesse cercando di fare il tuo esempio, ma faceva sì che il messaggio dell'email non fosse visibile su alcuni client di posta elettronica.

27 apr 2012 03:20:36
Commenti

Grazie Stephen per il follow-up... ok $_Post['file'] è in realtà un URL al file e ho confermato che l'URL è corretto. È accettabile?

tbm tbm
27 apr 2012 06:40:50

No, vedi risposta aggiornata :)

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

Significa che non posso far loro inviare un allegato che è ospitato altrove, ad esempio Amazon S3? Temevo questo. Sto solo cercando di dare alle persone l'opzione di inviare un PDF a Kindle direttamente da una pagina web. Comunque proverò più tardi e farò sapere.

tbm tbm
27 apr 2012 15:02:13

Potresti leggere il file remoto e poi allegarlo? C'è un esempio qui. Come esattamente puoi farlo / le best practice sarebbe una domanda per SO.

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

Grazie mille Stephen, ho provato la tua soluzione e ha funzionato. Ora... devo capire come inviare un allegato ospitato altrove. Grazie per il suggerimento su dove cercare!

tbm tbm
28 apr 2012 07:56:13