E-mail pièce Jointe au format PDF avec PHP en Utilisant FPDF
J'aimerais envoyer un fichier PDF en pièce jointe qui a été créé à l'aide de FPDF. Mon code ressemble à ça, mais la pièce jointe ne vient jamais à travers.
<?php
require('lib/fpdf/fpdf.php');
$pdf = new FPDF('P', 'pt', array(500,233));
$pdf->AddFont('Georgiai','','georgiai.php');
$pdf->AddPage();
$pdf->Image('lib/fpdf/giftcertificate.jpg',0,0,500);
$pdf->SetFont('georgiai','',16);
$pdf->Cell(40,10,'Hello World!');
$doc = $pdf->Output('test.pdf', 'S');
//define the receiver of the email
$to = '[email protected]';
//define the subject of the email
$subject = 'Test email with attachment';
//create a boundary string. It must be unique
//so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time()));
//define the headers we want passed. Note that they are separated with \r\n
$headers = "From: [email protected]\r\nReply-To: [email protected]";
//add boundary string and mime type specification
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
//read the atachment file contents into a string,
//encode it with MIME base64,
//and split it into smaller chunks
$attachment = chunk_split(base64_encode(file_get_contents($doc)));
//define the body of the message.
ob_start(); //Turn on output buffering
?>
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Hello World!!!
This is simple text email message.
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
<h2>Hello World!</h2>
<p>This is something with <b>HTML</b> formatting.</p>
--PHP-alt-<?php echo $random_hash; ?>--
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: application/zip; name="attachment.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--
<?php
//copy current buffer contents into $message variable and delete current output buffer
$message = ob_get_clean();
//send the email
$mail_sent = @mail( $to, $subject, $message, $headers );
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed";
?>
Quiconque est familier avec cela? Je suis l'espoir d'utiliser la fonction PHP mail ().
Si ce n'est pas à des fins d'apprentissage, d'utiliser PHP mailer bibliothèque comme Swiftmailer. swiftmailer.org
Comme Pekka dit, Swift Mailer est une bien meilleure idée que de faire des mail avec des pièces jointes à la main.
Comme Pekka dit, Swift Mailer est une bien meilleure idée que de faire des mail avec des pièces jointes à la main.
OriginalL'auteur HWD | 2010-12-04
Vous devez vous connecter pour publier un commentaire.
Cela a fini de travailler pour moi:
vraiment de bonne réponse, je vous remercie beaucoup !
Je suis l'aide de ce code et de temps en temps certains e-mails ne sont pas reçus par tous les destinataires. Mais la Cci, j'ai mis en place semble toujours venir à travers. J'ai le code en cours d'exécution sur Go Daddy hébergement partagé (chambre de Luxe)... Quelqu'un sait pourquoi?
OriginalL'auteur HWD
si vous utiliser PHPMailer
Profiter de
Même ici. Fonctionne comme un charme. Merci
des heures et des heures de recherche et, ici, c'est sympa de répondre!
OriginalL'auteur xavip
Je pense que vous avez un superflu de commande. Vous êtes à l'aide de la chaîne variante de la
Output()
commande:Puis vous effectuez une
file_get_contents()
:Il n'est pas un fichier, c'est un fichier dans une chaîne, comme
file_get_contents()
serait de retour si$doc
était un nom de fichier.Seulement de réduire jusqu'à:
Voir si des erreurs se produisent.
L'obtention de codage MIME pour le travail à la main est très difficile, surtout quand vous ajoutez compliqué pièces jointes, je recommanderais certainement à l'aide d'une diffusion de la bibliothèque comme mentionner sur votre question. D'ailleurs, vous semblez être en lui disant le nom de fichier est attachment.zip et c'est un fichier zip, à aucun moment, avez-vous zippé le fichier PDF.
OriginalL'auteur Orbling
OriginalL'auteur Elangovan