Utilisation de wp_mail avec des pièces jointes mais aucune pièce jointe reçue

15

J'ai regardé plusieurs exemples, dont celui-ci .

Je reçois l'email sans problème mais il n'y a pas de pièces jointes. Suis-je absent du contenu / type de type de fichier? Tous les exemples que j'ai vus n'utilisent que du texte / html comme type de contenu.

Voici ce que j'ai (ajouté à la demande de 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
la source
Pourriez-vous publier un code concernant ce que vous avez essayé?
Stephen Harris
Salut Stephen, viens de mettre à jour le message avec le code. Je vous remercie!
tbm

Réponses:

27

L' $attachmentargument pour wp_mailprend un fichier (ou un tableau de fichiers) - mais le chemin du fichier doit être entièrement spécifié. Par exemple:

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

( voir Codex ). Il semble que votre $_POST['file']ne spécifie probablement pas le chemin complet.

La pièce jointe a un chemin de fichier , pas une URL. Ce qui suit a fonctionné pour moi:

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

Remarque: j'ai également changé l' headersattribut. Je ne suis pas tout à fait sûr de ce que votre exemple essayait de faire, mais cela signifiait que le message de l'e-mail n'était pas visible sur certains clients de messagerie.

Stephen Harris
la source
Merci Stephen pour le suivi ... ok $_Post['file']est en fait une URL vers le fichier et j'ai confirmé que l'URL est correcte. Est-ce acceptable?
tbm
Non, voir la réponse mise à jour :)
Stephen Harris
Cela signifie que je ne peux pas leur faire envoyer une pièce jointe qui est hébergée ailleurs, par exemple Amazon S3? J'avais peur de ça. J'essaie simplement de donner aux gens la possibilité d'envoyer un PDF par e-mail directement à partir d'une page Web. Quoi qu'il en soit, je vais essayer cela plus tard et faire rapport.
tbm
Vous pouvez lire le fichier distant, puis le joindre? Il y a un exemple ici . Exactement comment vous pouvez le faire / meilleures pratiques serait une question pour SO.
Stephen Harris
Merci beaucoup Stephen j'ai essayé votre solution et cela a fonctionné. Maintenant ... je dois comprendre comment envoyer une pièce jointe hébergée ailleurs. Merci pour le pointeur où chercher!
tbm