Mail + pièce jointe PDF généré en PHP
29 messages
• Page 1 sur 2 • 1, 2
-

xdeslandes - WRInaute occasionnel

- Messages: 393
- Inscription: 29 Déc 2004
Mail + pièce jointe PDF généré en PHP
Bonjour,
J'ai un script qui génère des bons de livraison (BL) en PDF ou en HTML (suivant un paramètre html=0 ou 1 dans l'url)
Après avoir épluché quelques posts, j'ai mis en place, en bas du BL HTML une fonctionnalité qui permet de saisir une adresse mail pour envoyer le BL au format PDF en PJ.
Le mail parvient bien au destinataire, avec une PJ au format PDF: mais ce fichier pdf joint est vide (ou réduit à 0 je ne sais pas): il fait 0 ko et ne peut être ouvert pas Adobe Reader.
J'ai tenté plusieurs soluces, mais en vain.
Explications techniques:
genrer_BL.php génère le BL au format DF ou HTML. Le format HTML affiche en plus un formulaire pour saisir l'adresse mail.
envoyer_mailBL.php reçoit le $_POST, traite l'adresse, envoie le mail avec ça comme code:
Avec $_POST['num_BT'] et $_POST['id_course'] qui étaient en type="hidden" dans le formulaire.
generer_BVL.php génère le PDF avec mPDF (super d'ailleurs). Lorsqu'il est appelé avec le paramètre pj, il ressort le PDF avec ça:
Où peut se trouver mon souci ?
J'ai un script qui génère des bons de livraison (BL) en PDF ou en HTML (suivant un paramètre html=0 ou 1 dans l'url)
Après avoir épluché quelques posts, j'ai mis en place, en bas du BL HTML une fonctionnalité qui permet de saisir une adresse mail pour envoyer le BL au format PDF en PJ.
Le mail parvient bien au destinataire, avec une PJ au format PDF: mais ce fichier pdf joint est vide (ou réduit à 0 je ne sais pas): il fait 0 ko et ne peut être ouvert pas Adobe Reader.
J'ai tenté plusieurs soluces, mais en vain.
Explications techniques:
genrer_BL.php génère le BL au format DF ou HTML. Le format HTML affiche en plus un formulaire pour saisir l'adresse mail.
envoyer_mailBL.php reçoit le $_POST, traite l'adresse, envoie le mail avec ça comme code:
- Code: Tout sélectionner
// Destinataire du mail
$destination = $_POST['mail_dest_bl'];
// Expediteur du mail
$from_mail = 'monadresse@mondomaine.com';
$from_name = "Prénom NOM";
// sujet du mail
$sujet = '[Mon entreprise] - votre BL';
// Chaine permettant de différencier les différentes parties du mail
$uid = md5(uniqid(time()));
$message = "Bonjour,\nVous trouverez en pièce jointe le BL demandé au format PDF.\n";
$message .= $signature_mail;
// Traitement pour attacher une PJ
// D'abord on lit le fichier
$fichier = 'generer_BL.php?id_course='.$_POST['id_course'].'&pj=BL-'.$_POST['num_BT'].'.pdf&html=0';
$attachement = chunk_split(base64_encode($fichier));
$header = "From: ".$from_name." <".$from_mail.">\r\n";
$header .= "Reply-To: ".$from_mail."\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$header .= "This is a multi-part message in MIME format.\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$header .= $message."\r\n\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-Type: application/pdf; name=\"BL-".$_POST['num_BT'].".pdf\"\r\n";
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"BL-".$_POST['num_BT'].".pdf\"\r\n\r\n";
$header .= $attachement."\r\n\r\n";
$header .= "--".$uid."--";
// enfin on envoi le mail
$is_sent = @mail($destination, $sujet, "", $header);
if ($is_sent)
{
header('Location: generer_BL.php?id_course='.$_POST['id_course'].'&html=1&mail=ok');
}
else echo 'Envoi raté:<br />'.$headers;
Avec $_POST['num_BT'] et $_POST['id_course'] qui étaient en type="hidden" dans le formulaire.
generer_BVL.php génère le PDF avec mPDF (super d'ailleurs). Lorsqu'il est appelé avec le paramètre pj, il ressort le PDF avec ça:
- Code: Tout sélectionner
if (isset($_GET['pj']))
$livraison_mpdf -> Output('', 'S');
else
$livraison_mpdf -> Output();
exit;
Où peut se trouver mon souci ?
-

UsagiYojimbo - WRInaute accro

- Messages: 8575
- Inscription: 23 Nov 2005
Re: Mail + pièce jointe PDF généré en PHP
spout a écrit:PHPMailer ou Swift Mailer ?
+10 000
1. Génération de la PJ physiquement sur le serveur
2. Envoi du mail avec la PJ via PHPMailer
3. Suppression de la PJ
-

xdeslandes - WRInaute occasionnel

- Messages: 393
- Inscription: 29 Déc 2004
Re: Mail + pièce jointe PDF généré en PHP
Wouaiiiis, bon d'accord. Cela me semblait être comme "utiliser une bombe nulcéaire pour tuer une mouche".
Je ne pense d'ailleurs pas que le souci soit logiciel/applicatif.
Mais bon, vous n'êtes pas les premiers à me le dire. Je tente PHPMailer et je reviens...
Je ne pense d'ailleurs pas que le souci soit logiciel/applicatif.
Mais bon, vous n'êtes pas les premiers à me le dire. Je tente PHPMailer et je reviens...
-

UsagiYojimbo - WRInaute accro

- Messages: 8575
- Inscription: 23 Nov 2005
Re: Mail + pièce jointe PDF généré en PHP
Il suffit de pas grand chose, lors de la constitution des en-têtes d'un mail, pour merdoyer et envoyer un truc mal interprété ou planté.
Tu as vérifié que le fichier que tu essaies d'envoyer était correctement généré ?
Tu as vérifié que le fichier que tu essaies d'envoyer était correctement généré ?
-

xdeslandes - WRInaute occasionnel

- Messages: 393
- Inscription: 29 Déc 2004
Re: Mail + pièce jointe PDF généré en PHP
Tu veux dire si ses en-têtes http l'étaient ?
En début de script PHP générateur du PDF, j'ai ça (donné par la web dev toolbar de Google Chrome):
qui se charge d'envoyer les en-têtes correct (j'espère).
Lorsque je génère le pdf "à la main", j'obtiens ça:
(J'ai supprimé des infos concernant les cookies)
C'est bien ou pas ?
En début de script PHP générateur du PDF, j'ai ça (donné par la web dev toolbar de Google Chrome):
- Code: Tout sélectionner
include ($chem."mpdf51/mpdf.php");
qui se charge d'envoyer les en-têtes correct (j'espère).
Lorsque je génère le pdf "à la main", j'obtiens ça:
- Code: Tout sélectionner
Request URL:http://plateforme.transporturgent.com/courses/generer_BL.php?id_course=7940&html=0
Request Method:GET
Status Code:200 OK
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
[...]
Host:plateforme.transporturgent.com
If-Modified-Since:Sat, 30 Jul 2011 13:39:00 GMT
User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30
Query String Parametersview URL encoded
id_course:7940
html:0
Response Headers
Cache-Control:public, must-revalidate, max-age=0
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:44543
Content-Type:application/pdf
Content-disposition:inline; filename="mpdf.pdf"
Date:Sat, 30 Jul 2011 13:39:49 GMT
Expires:Sat, 26 Jul 1997 05:00:00 GMT
Keep-Alive:timeout=15, max=100
Last-Modified:Sat, 30 Jul 2011 13:39:51 GMT
Pragma:public
Server:Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8o
Vary:Accept-Encoding,User-Agent
X-Powered-By:PHP/5.2.13-pl1-gentoo
(J'ai supprimé des infos concernant les cookies)
C'est bien ou pas ?
- jcaron
- WRInaute accro

- Messages: 2685
- Inscription: 13 Fév 2004
Re: Mail + pièce jointe PDF généré en PHP
A moins que j'aie besoin de lunettes, il manque quand même un énorme truc dans ton script: générer ou récupérer le PDF!
Tu fais:
Bref, ton fichier attaché, c'est juste l'URL (relative), pas le fichier lui-même. Si tu veux utiliser la logique que tu sembles privilégier (i.e. appeler le générateur de PDF à travers un appel http), il te manque un file_get_contents ou équivalent. Mais ça pose probablement un problème d'authentification (je suppose que tout le monde n'a pas accès à ce script), et c'est probablement un peu lourd pour pas grand chose, tu dois pouvoir gérer le PDF en interne directement, non?
Au passage, l'utilisation de $_POST['truc'] sans filtrage, sans escape, sans rien, c'est quand même très dangereux.
Et l'utilisation de librairies adaptées pour générer le mail ce n'est effectivement pas forcément une mauvaise idée.
Jacques.
Tu fais:
- Code: Tout sélectionner
$fichier = 'generer_BL.php?id_course='.$_POST['id_course'].'&pj=BL-'.$_POST['num_BT'].'.pdf&html=0';
$attachement = chunk_split(base64_encode($fichier));
Bref, ton fichier attaché, c'est juste l'URL (relative), pas le fichier lui-même. Si tu veux utiliser la logique que tu sembles privilégier (i.e. appeler le générateur de PDF à travers un appel http), il te manque un file_get_contents ou équivalent. Mais ça pose probablement un problème d'authentification (je suppose que tout le monde n'a pas accès à ce script), et c'est probablement un peu lourd pour pas grand chose, tu dois pouvoir gérer le PDF en interne directement, non?
Au passage, l'utilisation de $_POST['truc'] sans filtrage, sans escape, sans rien, c'est quand même très dangereux.
Et l'utilisation de librairies adaptées pour générer le mail ce n'est effectivement pas forcément une mauvaise idée.
Jacques.
-

UsagiYojimbo - WRInaute accro

- Messages: 8575
- Inscription: 23 Nov 2005
Re: Mail + pièce jointe PDF généré en PHP
+1 Jcaron. En fait ce que je te demandais c'est si le fichier créé physiquement était correcte ou pas. Or a priori, tu ne génères pas ce fichier, je vois mal dans ce cas comment tu peux l'envoyer en PJ.
-

xdeslandes - WRInaute occasionnel

- Messages: 393
- Inscription: 29 Déc 2004
Re: Mail + pièce jointe PDF généré en PHP
Au passage, l'utilisation de $_POST['truc'] sans filtrage, sans escape, sans rien, c'est quand même très dangereux.
ici, ce n'est pas dangereux.
Ce que vous dites est juste. J'ai bien tenté de faire un file_get_content ou un fgets (je ne me souviens plus), mais j'avais alors un problème de récursivité.
J'ai bientôt terminé mon test avec phpmailer. Je vous tiens au jus.
-

xdeslandes - WRInaute occasionnel

- Messages: 393
- Inscription: 29 Déc 2004
Re: Mail + pièce jointe PDF généré en PHP
PhpMailer me répond:
Kesako ? Comment réparer ?
- Code: Tout sélectionner
Language string failed to load: recipients_failedmediaprodx@gmail.com
Kesako ? Comment réparer ?
-

UsagiYojimbo - WRInaute accro

- Messages: 8575
- Inscription: 23 Nov 2005
Re: Mail + pièce jointe PDF généré en PHP
Il en est question ici : http://stephaneey.developpez.com/tutoriel/php/phpmailer/
Il faut faire un SetLanguage().
Il faut faire un SetLanguage().
-

xdeslandes - WRInaute occasionnel

- Messages: 393
- Inscription: 29 Déc 2004
Re: Mail + pièce jointe PDF généré en PHP
Merci.
Bon, tout est OK: mes mails partent (et arrivent), cela fonctionne aussi avec une PJ 'en dur' (un fichier pdf stocké à côté du script), mais lorsque je lui demande d'attacher mon fichier pdf généré à la volée comme ça:
on me répond
C'est une question d'identification ?
Peut-être faut-il générer le fichier, puis l'enregistrer, l'attacher au mail, et accessoirement le supprimer ensuite ?
Bon, tout est OK: mes mails partent (et arrivent), cela fonctionne aussi avec une PJ 'en dur' (un fichier pdf stocké à côté du script), mais lorsque je lui demande d'attacher mon fichier pdf généré à la volée comme ça:
- Code: Tout sélectionner
$fichier = 'generer_BL.php?id_course='.$_POST['id_course'].'&pj=BL-'.$_POST['num_BT'].'.pdf&html=0';
$mail->AddAttachment($fichier);
on me répond
- Code: Tout sélectionner
Could not access file: generer_BL.php?id_course=3350&pj=BL-003020811.pdf&html=0
C'est une question d'identification ?
Peut-être faut-il générer le fichier, puis l'enregistrer, l'attacher au mail, et accessoirement le supprimer ensuite ?
-

UsagiYojimbo - WRInaute accro

- Messages: 8575
- Inscription: 23 Nov 2005
Re: Mail + pièce jointe PDF généré en PHP
xdeslandes a écrit:Peut-être faut-il générer le fichier, puis l'enregistrer, l'attacher au mail, et accessoirement le supprimer ensuite ?
Je pense plutôt que c'est ça. perso je n'ai jamais procédé autrement.
29 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- [php] envoyer un mail avec une pièce jointe
- file_get_contents(), envoie mail() avec pièce jointe php
- Problème avec PHP: envoyer email avec pièce jointe PDF
- envoi mail avec pièce jointe impossible
- formulaire envoi de piece jointe php
- Un formulaire en PHP avec pièce jointe: sécurité!
- [resolu] envoie d'une piece jointe en php
- script php qui permet d'envoie une pièce jointe vers email
- formulaire avec piéce jointe
- Gmail : pièce jointe *.exe
Consultez la description détaillée des produits ou services de Google suivants : Google PDF Quick View, Gmail Notifier
- Transformer des citations en liens
Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


