web-dev-qa-db-fra.com

Comment joindre PDF à un e-mail à l'aide de PHP

J'envoie un e-mail à l'aide de la fonction de messagerie PHP, mais j'aimerais ajouter un fichier PDF PDF en tant que pièce jointe à l'e-mail. Comment faire cette?

Voici mon code actuel:

$to = "[email protected]";
$subject = "My message subject";
$message = "Hello,\n\nThis is sending a text only email, but I would like to add a PDF attachment if possible.";
$from = "Jane Doe <[email protected]>";

$headers = "From:" . $from; 
mail($to,$subject,$message,$headers);

echo "Mail Sent!";
13
JROB

Vous devriez envisager d'utiliser une bibliothèque de messagerie PHP telle que PHPMailer qui rendrait la procédure d'envoi de courrier beaucoup plus simple et meilleure.

Voici un exemple d'utilisation de PHPMailer, c'est vraiment simple!

<?php

require_once('../class.phpmailer.php');

$mail             = new PHPMailer(); // defaults to using php "mail()"

$body             = file_get_contents('contents.html');
$body             = eregi_replace("[\]",'',$body);

$mail->AddReplyTo("[email protected]","First Last");

$mail->SetFrom('[email protected]', 'First Last');

$mail->AddReplyTo("[email protected]","First Last");

$address = "[email protected]";
$mail->AddAddress($address, "John Doe");

$mail->Subject    = "PHPMailer Test Subject via mail(), basic";

$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

?>

Une alternative à PHPMailer est http://swiftmailer.org/

19
josmith

Réponse simple: ne le faites pas. la création d'un e-mail MIME à la main est une entreprise douloureuse et très facile à foutre.

Utilisez plutôt PHPMailer ou Swiftmailer . Il est presque trivial de faire des pièces jointes avec eux, et vous obtenez FAR FAR FAR une meilleure rétroaction au cas où quelque chose exploserait, v.s. le simple vrai/faux que mail () condescend à cracher.

2
Marc B

Pour éliminer les erreurs de dépréciation,

Remplacer

$body             = eregi_replace("[\]",'',$body);

Avec

$body             = preg_replace('/\.([^\.]*$)/i','',$body);
1
sspence65