Envoi mails PHP : pièce jointe = texte !
new morning
Messages postés
127
Date d'inscription
Statut
Membre
Dernière intervention
-
new morning Messages postés 127 Date d'inscription Statut Membre Dernière intervention -
new morning Messages postés 127 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai tenté différents scripts glanés ici et là pour envoyer un mail avec pièce jointe avec le même résultat : le message arrive, mais la pièce jointe est dans le corps du message !
Exemple : en utilisant le script proposé ici : http://www.commentcamarche.net/faq/sujet 2761 langages envoyer un mail avec piece jointe
Je reçois un mail contenant :
Comment faire pour que la "frontière" (--didondinaditondelosdudosdodudundodudindon) soit prise en compte ? Est-ce parce que MIME ne fonctionne pas correctement ? Pourtant elle est bien présente : voir http://francafrique.shadow-corp.org/phpinfo.php
Est-ce qu'il faut impérativement donner le chemin absolu d'accès au fichier à joindre ? faut-il indiquer l'emplacement de MIME ?
J'ai tenté différents scripts glanés ici et là pour envoyer un mail avec pièce jointe avec le même résultat : le message arrive, mais la pièce jointe est dans le corps du message !
Exemple : en utilisant le script proposé ici : http://www.commentcamarche.net/faq/sujet 2761 langages envoyer un mail avec piece jointe
Je reçois un mail contenant :
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="didondinaditondelosdudosdodudundodudindon" --didondinaditondelosdudosdodudundodudindon Content-Type: text/plain; charset=UTF-8 Message principal du mail. --didondinaditondelosdudosdodudundodudindon Content-Type: application/x-tar; name="backup" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="backup" ZGl2LnRpdGxlLCBkaXYuaGVhZGVyLCBkaXYuc2lkZWJhciwgZGl2LnRyaWNrLCBkaXYuZm9vdGVy IGEudXBsaW5rIHsNCiAgICBkaXNwbGF5OiBub25lOw0KfQ0K --didondinaditondelosdudosdodudundodudindon--
Comment faire pour que la "frontière" (--didondinaditondelosdudosdodudundodudindon) soit prise en compte ? Est-ce parce que MIME ne fonctionne pas correctement ? Pourtant elle est bien présente : voir http://francafrique.shadow-corp.org/phpinfo.php
Est-ce qu'il faut impérativement donner le chemin absolu d'accès au fichier à joindre ? faut-il indiquer l'emplacement de MIME ?
A voir également:
- Envoi mails PHP : pièce jointe = texte !
- Programmer envoi mail gmail - Guide
- Easy php - Télécharger - Divers Web & Internet
- Envoi mail cci - Guide
- Programmer envoi sms - Guide
- Envoi impossible messenger - Forum Facebook Messenger
6 réponses
Je te conseille d'utiliser l'excellente libraire Zend (elle a une partie mail) dont la collectivité PHP use et abuse puisqu'elle est de très bonne facture ! Je pense que tu trouveras ton bonheur en lisant la doc dessus.
Un petit lien (anglais) sur quelques tutos pour Zend Mail & Zend Mime : http://www.zftutorials.com/zend-mail-zend-mime/
Amicalement
Un petit lien (anglais) sur quelques tutos pour Zend Mail & Zend Mime : http://www.zftutorials.com/zend-mail-zend-mime/
Amicalement
Merci SyGEN de cette réponse
Je n'ai pas encore essayé cette bibliothèque, mais je crains de retrouver pour la nième fois le résultat décevant d'un mail contentant bien quelque chose qui doit être ma pièce jointe, mais sous forme de Gl2LnRpdGxlLCBkaXYuaGVhZGVyLCBkaX etc., ce qui n'est guère satisfaisant.
As-tu des raisons technique de penser que cette bibliothèque puisse améliorer le shmil-blick ? Car à force de multiplier les essais, je me dis qu'il serait maintenant plus productif d'essayer de comprendre POURQUOI la frontière entre le texte et la pièce jointe n'est pas prise en compte. Et là, google ne m'aide pas beaucoup :(
EDIT : en fait, tout se passe comme si mon en-tête n'étais pas prise en compte :
Je n'ai pas encore essayé cette bibliothèque, mais je crains de retrouver pour la nième fois le résultat décevant d'un mail contentant bien quelque chose qui doit être ma pièce jointe, mais sous forme de Gl2LnRpdGxlLCBkaXYuaGVhZGVyLCBkaX etc., ce qui n'est guère satisfaisant.
As-tu des raisons technique de penser que cette bibliothèque puisse améliorer le shmil-blick ? Car à force de multiplier les essais, je me dis qu'il serait maintenant plus productif d'essayer de comprendre POURQUOI la frontière entre le texte et la pièce jointe n'est pas prise en compte. Et là, google ne m'aide pas beaucoup :(
EDIT : en fait, tout se passe comme si mon en-tête n'étais pas prise en compte :
$boundary='didondinaditondelosdudosdodudundodudindon'; Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n\n";
J'aurais du préciser que le lien donné en haut était celui du script. le voici ici reproduis (sans les paramétrages persos qui ne sont pas compliqués).
Est-ce que le blocage peut venir d'un paramétrage de MIME par l'hébergeur ? (Gandi AI)
<?php $boundary='didondinaditondelosdudosdodudundodudindon'; //En-têtes du mail $headers="From: expediteur@domaine.fr\r\n MIME-Version: 1.0\r\n Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n\n"; //Corps du mail en commençant par le message principal $body="--". $boundary ."\n Content-Type: text/plain; charset=ISO-8859-1\r\n\n Message principal du mail.\n\n"; /* Piece jointe, on va dire que notre fichier s'appele bidule.doc et qu'il se situe dans le repertoire courant */ $fichier=file_get_contents('./bidule.doc'); /* On utilise aussi chunk_split() qui organisera comme il faut l'encodage fait en base 64 pour se conformer aux standards */ $fichier=chunk_split( base64_encode($fichier) ); //Ecriture de la pièce jointe $body = $body . "--" .$boundary. "\n Content-Type: application/msword; name=\"nom_fichier\"\r\n Content-Transfer-Encoding: base64\r\n Content-Disposition: attachment; filename=\"nom_fichier\"\r\n\n $fichier"; //Fermeture de la frontière $body = $body . "--" . $boundary ."--"; //Envoi du mail mail("destinataire@bidule.fr", "sujet", $body, $headers); ?>
Est-ce que le blocage peut venir d'un paramétrage de MIME par l'hébergeur ? (Gandi AI)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
EXTRA !
Merci beaucoup SyGEN, enfin ! après 5 jours de lutte ! je vais pouvoir reprendre mon script de backup automatique sur Email (tous ceux que j'ai testé merdaient, à moins de réinstaller PEAR et MIME !)
Merci beaucoup SyGEN, enfin ! après 5 jours de lutte ! je vais pouvoir reprendre mon script de backup automatique sur Email (tous ceux que j'ai testé merdaient, à moins de réinstaller PEAR et MIME !)
Je t'en ai écrit un petit qui marche comme ca tu vois simplement (sans utiliser Zend) :
Amicalement
<?php $mime_boundary = "<<<--==+X[".md5(time())."]"; $headers .= "From: Bidule <destinataire@bidule.fr>\r\n"; $headers .= "To: Bidule <destinataire@bidule.fr>\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: multipart/mixed;\r\n"; $headers .= " boundary=\"".$mime_boundary."\""; $message .= "Message principal du mail.\r\n"; $message .= "\r\n"; $message .= "--".$mime_boundary."\r\n"; $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n"; $message .= "Content-Transfer-Encoding: 7bit\r\n"; $message .= "\r\n"; $message .= "Bonjour \r\n"; $message .= "Voici le fichier demandé! \r\n"; $message .= "--".$mime_boundary."\r\n"; $message .= "Content-Type: application/msword;\r\n"; $message .= " name=\"bidule.doc\"\r\n"; $message .= "Content-Transfer-Encoding: base64\r\n"; $message .= "Content-Disposition: attachment;\r\n"; $message .= " filename=\"bidule.doc\"\r\n"; $message .= "\r\n"; $myfile = file_get_contents("bidule.doc"); $fileContent = chunk_split( base64_encode($myfile) ); $message .= $fileContent; $message .= "\r\n"; $message .= "--".$mime_boundary."\r\n"; $ok = mail("destinataire@bidule.fr", "Fichier word", $message, $headers); if ($ok) echo "Parfait"; else echo "AIEEEEUH"; ?>
Amicalement