PHP : generer un fichier.csv et l'envoyer en piece jointe : prob

Fermé
diode80 Messages postés 115 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 21 décembre 2016 - Modifié par jordane45 le 16/02/2015 à 16:26
diode80 Messages postés 115 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 21 décembre 2016 - 16 févr. 2015 à 20:46
Bonjour,

sur une page web, j'ai un formulaire, je récupérè les données que j'écris dans une feuille "excel" pour que tout le monde comprenne.
Je veux recevoir ce formulaire CSV par email en tant que piece jointe.


la feuille se nomme : 20150215-test.csv
Apres la page php m'envoie cette feuille csv par email.

PROBLEME : le fichier n'est pas en piece jointe, mais les caractères sont en vrac dans le mail....

Voici ce que je vois dans l'email reçu:
--PHP-mixed-239191cd5886d9ac2498b082ce279c9f
Content-Type: application/vnd.ms-excel; name=20150215-test.csv
Content-Transfer-Encoding: base64
Content-Disposition: attachment

MjAxNTAyMTRfMTBfMThfNDIuY3N2O3RpdHJlO2N1c19jaXY7Y3VzX25vbTtjdXNfZnVuYztjdXNf
dGVsO2N1c19lbWFpbDtwcmpfY291bnRyeTtwcmpfZW5kdXNlcjtwcmpfc3RhdHVzO3Byal9sZWFk
dGltZTtwcmpfYW1sLWF2bDtwcmpfZGVhZGxpbmU7YXBwX21hcmtldDthcHBfcHJlc3N1cmU7YXBw
X3RlbXA7YXBwX3NlcnZpY2U7dmFsX2NvbS1jb2RlO3ZhbC10YWc7dmFsLXF0eTt2YWwtcGlwaW5n
LWNsYXM7dmFsLW5hY2U7VmFsLVR5cGU7cHZhbC1ib25uZXQ7dmFsLUROO3ZhbC1ib3JlO3ZhbC1y.......
(il y en a deux pages !)




Le souci doit se situer SOIT à la génération du mail, soit à l'entête du mail....

Voici mon code :
<?php
//$strPath = "";  
$filName = $myFile; 
//define the receiver of the email
$to = 'xxxx@xxxxx.xx';
//define the subject of the email
$subject = $myFile;
//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: xxxxemeteur@xxxx.be\r\nReply-To: xxxx@xxxxx.xx";
//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($filName)));
//define the body of the message.
ob_start(); //Turn on output buffering
?>


Question subsidiaire :
sur iphone, pas de piece jointe : du charabia dans le texte...
sur gmail, pas de piece jointe : du charabia dans le texte
sur outlook 2010 : le mail est parfait et la piece jointe .csv est bien attaché...


Toutes les pistes d'aides sont les bienvenues....



EDIT : AJOUT DES BALISES DE CODE

Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code


A voir également:

1 réponse

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié par gravgun le 16/02/2015 à 16:38
'lut, que le CSV soit "en vrac" est normal: le mail étant une technologie texte, les fichiers (binaires ou non) sont envoyés encodés en base64. Aucun problème donc avec ta pièce jointe sur ce point là.

Autrement ton type MIME n'est pas le bon: c'est le propriétaire Micro$oft que tu as mis, pas le standard
text/csv
comme définit par la RFC4180, ce qui à mon avis explique la non-lecture du fichier par d'autres clients mails que ceux de la firme de Redmond que je hais tant.

Après il y a peut-être un autre détail qui m'a échappé quant à la syntaxe du mail entier...
from human import idiocy
del idiocy
0
diode80 Messages postés 115 Date d'inscription lundi 20 mai 2013 Statut Membre Dernière intervention 21 décembre 2016 41
16 févr. 2015 à 20:46
Bonjour Gravgun et merci pour ta réponse rapide.
helas le fait d'utiliser text/csv ne change pas le probleme.

Je viens d'essayer phpmailer...ca a l'air de faire papa-maman....mais ca ne marche pas !

au moins, mon envoi en code dur php sans appel de class machin fonctionnait.

ok pour ta remarque sur micro$soft. je viens de faire l'essai vers un email free que j'ouvre avec Zimbra...et bien ca marche ! mon csv est bien en piece jointe....

sur iphone, pas de piece jointe : du charabia dans le texte...
sur gmail, pas de piece jointe : du charabia dans le texte
sur outlook 2010 : le mail est parfait et la piece jointe .csv est bien attachée...
Vers une adresse free avec Zimbra en "client" : le mail est parfait et la piece jointe .csv est bien attachée...

une idée pour reprendre mon formulaire proprement ?

car à force de bricoler...c'est le bazar et je n'ai pas trouvé de tuto propre et clair...
0