envoyer le pdf par mail plutôt que l'afficher

Eléphant du PHP | 331 Messages

13 mai 2007, 18:20

Bonjour à tous,

Je génère une facture au format pdf et qui se construit dynamiquement.
Actuellement, la seule chose que je sais faire, c'est l'afficher à l'écran, mais moi je voudrais plutôt qu'elle soit automatiquement envoyée par mail en PJ à mon client.

Actuellement, mon code se termine par cette fonction :
$pdf->Output();
Pourriez-vous m'aider SVP ?

Merci !

Eléphant du PHP | 451 Messages

13 mai 2007, 19:54

Bonjour,
J'ai cru comprendre que tu utilises fpdf...
La première chose pour envoyer pâr mail est de générer un fichier.
Actuellement, en utilisant $pdf->Output(); sans aucun paramètre, le fichier est envoyé au navigateur.
La documentation indique les paramètres : http://www.fpdf.org/fr/doc/output.htm
A ta place, je mettrais :
$fichier_pdf=uniqid (); // pour générer un nom de fichier
$pdf->Output($fichier_pdf,"F"); // pour sauvegarder le fichier
Ensuite, il suffit d'envoyer le fichier en pièce jointe et de le supprimer ensuite. En recherchant avec Google, il y a beaucoup d'exemples d'envoi de documents en pièce jointe, là on m'appelle pour aller manger ;) et je n'ai pas le temps de détailler...
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 331 Messages

13 mai 2007, 23:10

Bon, ok, je suis sur la bonne voie !

J'arrive désormais à enregistrer mon pdf sur un emplacement de mon serveur.

Maintenant, je bloque complet pour les envois mails avec pièce jointe. Cela fait 2 heures que je recherche à travers ce forum et sur google, mais je n'arrive pas à trouver le moindre scripte que je suis capable d'adapter.

Enfin, je suis quand même parti là dessus mais je ne reçois jamais le moindre mail :
<?
$to = "[email protected]";
$subject = "sujet test";
$message = "voici votre facture !";
$pj = "../admin/archivage_factures/2007/200700001.pdf";

function envoyermailpj($to, $subject, $message, $pj) { 
         $limite = "_parties_".md5(uniqid (rand())); 

         $mail_mime  = "Date: ".date("l j F Y, G:i")."\n"; 
         $mail_mime .= "MIME-Version: 1.0\n"; 
         $mail_mime .= "Content-Type: multipart/mixed;\n"; 
         $mail_mime .= " boundary=\"----=$limite\"\n\n"; 

         $texte  = "Ceci est un message au format MIME.\n"; 
         $texte .= "------=$limite\n"; 
         $texte .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; 
         $texte .= "Content-Transfer-Encoding: 7bit\n\n"; 
         $texte .= $message; 
         $texte .= "\n\n"; 

         $attachement = ""; 
         // fichier 1 
         $fichier = $pj;  
         $fp = fopen($fichier, "rb");  
         $pg = fread($fp,filesize($fichier));  
         fclose($fp);  
         $attachement .= "------=$limite\n"; 
         $attachement .= "Content-Type: application/octet-stream; name=\"facture.pdf\"\n"; 
         $attachement .= "Content-Transfer-Encoding: base64\n"; 
         $attachement .= "Content-Disposition: attachment; filename=\"facture.pdf\"\n\n"; 
         $attachement .= chunk_split(base64_encode($pg)); 
         $attachement .= $pg; 
         $attachement .= "\n\n\n------=$limite\n"; 

         $headers = 'From: [email protected]' . "\r\n" . 
         'Reply-To: [email protected]' . "\r\n" . 
         'X-Mailer: PHP/' . phpversion(); 
     mail($to, $subject, $texte.$attachement, $headers.$mail_mime); 
   } 
   
?>
Merci d'avance pour votre aide !

Eléphant du PHP | 451 Messages

14 mai 2007, 09:29

Hum je ne vois pas comment se fait le passage de la variable fichier dans ton code d'envoi de pièce jointe...

Je n'ai pas retrouvé le site à partir duquel je me suis inspiré quand j'ai eu à faire ça mais voici un URL qui propose une fonction qui, en première lecture, semble OK :
http://www.phpcs.com/code.aspx?ID=26501
Comme il s'agit d'une fonction, je pense qu'il suffit de la prendre telle qu'elle en lui passant les bons paramètres.


J'édite le message car je pense avoir retrouvé le site qui m'a servi d'exemple :
http://www.toutestfacile.com/php/cours/mail_2.php5
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 331 Messages

14 mai 2007, 12:08

Merci jpaul pour t aréponse, cependant :
J'édite le message car je pense avoir retrouvé le site qui m'a servi d'exemple :
http://www.toutestfacile.com/php/cours/mail_2.php5
Tout d'abord, cel lien ne fonctionne pas !

Pour ce qui de mon code ci-dessus, je cherche à envoyer un fichier existant sur un emplacement de mon serveur : "../admin/archivage_factures/2007/200700001.pdf"

Le problème, c'est que je ne sais justement pas comment m'y prendre pour l'inclure en PJ dans le mail. Mon script est surement faux puisque je ne pense pas m'y être pris correctement.
Je tourne en rond avec tous les autres scripts que je peux trouver par ci par là. J'ai l'impression qu'à chaque fois, on montre comment envoyer un fichier que l'on a choisi à l'aide d'un formulaire, ce qui n'est évidemment pas mon cas.

Merci !

ViPHP
ViPHP | 2144 Messages

14 mai 2007, 14:17

Visiblement, maintenant le lien fonctionne, et l'exemple me semble très clair et convient visiblement bien à ce que tu souhaites faire.

Eléphant du PHP | 331 Messages

14 mai 2007, 14:26

Visiblement, maintenant le lien fonctionne, et l'exemple me semble très clair et convient visiblement bien à ce que tu souhaites faire.
Ben non, désolé, je vous assure que la page apparait, avec son entete, mais tout le reste est vide, je n'ai absolument rien ! :cry:

Eléphant du PHP | 451 Messages

14 mai 2007, 14:33

Bon en fait j'avais mal lu, ton code est OK mais il manque simplement l'appel à la fonction que tu as déclarée.

Rajoute une ligne :
envoyermailpj($to, $subject, $message, $pj);
Et ca devrait rouler ;)
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 331 Messages

14 mai 2007, 15:06

ah oui, c'est mieux ! :lol:

Sauf que la PJ est bien un fichier pdf, portant le nom demandé, mais ne faisant que 4ko, donc impossible à ouvrir et ne correspondant pas à mon fichier d'origine.

J'ai du me louper dans l'attachement au fichier ! Pourtant, mon chemin semble bon, et je confirme que le fichier appelé est valide et s'ouvre correctement en temps normal.

Eléphant du PHP | 331 Messages

14 mai 2007, 15:08

ah oui, c'est mieux ! :lol:

Sauf que la PJ est bien un fichier pdf, portant le nom demandé, mais ne faisant que 4 octets, donc impossible à ouvrir et ne correspondant pas à mon fichier d'origine.

J'ai du me louper dans l'attachement au fichier ! Pourtant, mon chemin semble bon, et je confirme que le fichier appelé est valide et s'ouvre correctement en temps normal.

Eléphant du PHP | 451 Messages

14 mai 2007, 15:12

Si ça peut t'aider j'ai fait un test et ça marche, je récupère bien le fichier que j'ai copié.
J'ai juste changé :

$to = "[email protected]";
$pj = "Order_FR_HSB_DHSA_558299614_2006-12-13.pdf";

(Order_FR_HSB_DHSA_558299614_2006-12-13.pdf est un vieux fichier pdf que j'ai recopié dans mon répertoire de tests...
$to = "[email protected]";
$subject = "sujet test";
$message = "voici votre facture !";
$pj = "Order_FR_HSB_DHSA_558299614_2006-12-13.pdf";


envoyermailpj($to, $subject, $message, $pj);
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 331 Messages

14 mai 2007, 15:45

en fait, la seule différence entre toi et moi c'est l'emplacement de ce fichier pdf.
Toi tu l'as dans le même répertoire que celui de ton script php, alors que moi je vais le chercher ailleurs (../blabla...)

Eléphant du PHP | 451 Messages

14 mai 2007, 15:52

Si le ../blabla... est correct, ça devrait marcher.
Par contre si tu ne testes pas sous windows, il faut faire attention à la casse (majuscules/minuscules), tu peux avoir 2 fichiers distincts sous linux/unix (dont les noms différent par les majuscules) alors que sous windows ce serait le même fichier.
Pour le moment, je ne vois que cela qui pourrait expliquer ton problème.
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphant du PHP | 331 Messages

14 mai 2007, 17:12

Bon, après plusieurs tests, voici ce que je peux dire :

Quand je place le pdf dans le même dossier que mon script, ça fonctionne trés bien, puisque ma variable est ainsi définie : $pj = "200700001.pdf";

Par contre, dès que je vire le pdf pour le mettre dans un autre dossier et que je l'appelle via un chemin relatif, alors là badaboum, ça ne marche plus.
Pourtant, ce n'est pas une histoire de casse car j'ai tout en minuscule.

:roll:

Eléphant du PHP | 331 Messages

14 mai 2007, 17:16

Bien voilà que ça marche maintenant ........ :roll:

Bizarre bizarre, j'ai comme l'impression que ma PJ avait disparue de mon serveur dans l'emplacement que j'appelais. J'ai du faire une fausse manip sans m'en rendre compte et je bataillais pour rien en fait !

Merci en tout cas jpaul, tu m'as bien aidé !