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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : envoyer le pdf par mail plutôt que l'afficher

par jay64 » 14 mai 2007, 22:34

Bien oui, c'est exactement ça, ça marche ! :shock:

Par contre, j'ai du mal à capter à quoi ça sert de la déclarer en global, et pourquoi ça ne marchait pas sans le faire.
Je vais essayer de me lire des tutos là dessus histoire de capter et de progresser. C'était une notion que je ne connaissais absolument pas, et qui est d'ailleurs encore nébuleuse pour moi !

MERCI ! :wink:

par jpaul » 14 mai 2007, 22:23

Bonsoir,

C'est un problème de portée des variables.
Tu déclares une variable $ChoixNumFacture dans la partie principale de ton programme.
Par défaut, elle n'est pas accessible à l'intérieur d'une fonction.

Deux solutions :
- soit tu rajoutes un paramètre à ta fonction pour lui passer l'information au moment de l'appel.
- soit tu déclares la variable en global dans la fonction où tu en as besoin.

Rajoute global $ChoixNumFacture; au début de la fonction :
function envoyermailpj($to, $subject, $message, $pj) { 
global $ChoixNumFacture;
         $limite = "_parties_".md5(uniqid (rand())); 
...
ça devrait marcher.

par jay64 » 14 mai 2007, 21:37

Dernier truc, après c'est promis, j'arrete.

Je coince avec le nom que je veux donner dynamiquement à ma PJ :
J'ai le code suivant :
$attachement .= "------=$limite\n"; 
         $attachement .= "Content-Type: application/octet-stream; name=\"".$ChoixNumFacture.".pdf\"\n"; 
         $attachement .= "Content-Transfer-Encoding: base64\n"; 
         $attachement .= "Content-Disposition: attachment; filename=\"".$ChoixNumFacture.".pdf\"\n\n"; 
         $attachement .= chunk_split(base64_encode($pg)); 
         $attachement .= $pg; 
         $attachement .= "\n\n\n------=$limite\n"; 
$ChoixNumFacture contient bien le numéro de facture à savoir "200700001".
La pièce jointe que je reçois ensuite dans le mail s'appelle seuleument ".pdf" => que l'extension et pas de nom.

Pourtant, un peu plus haut dans le code, quand j'appelle la PJ j'ai ceci :
$pj = "../admin/archivage_factures/".$annee."/".$ChoixNumFacture.".pdf";
et ça, ça marche trés bien, puisque c'est le bon fichier qui s'insère dans mon mail.

:roll:

Merci !

par jpaul » 14 mai 2007, 19:19

Merci en tout cas jpaul, tu m'as bien aidé !
De rien, c'est un plaisir :)
Si le problème est réglé, penses à passer le sujet en réglé ;)

par jay64 » 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é !

par jay64 » 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:

par jpaul » 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.

par jay64 » 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...)

par jpaul » 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);

par jay64 » 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.

par jay64 » 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.

par jpaul » 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 ;)

par jay64 » 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:

par iclo » 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.

par jay64 » 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 !