Fonction mail () + piece jointe [Résolu]

Messages postés
1218
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
- - Dernière réponse : sidf
Messages postés
1218
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
- 14 avril 2006 à 12:08
bonjour à tous

j'essaie de joindre des fichiers à l'envoi d'un mail
j'ai intégré la classe mime_mail.class.php

et l'envoi de la pièce jointe s'effectue bien,
mais à l'ouverture du fichier joint, les données
sont totalement codées !
quelque chose m'a sans doute échappé

si quelqu'un sait d'où vient l'erreur,
merci d'avance
Afficher la suite 

14 réponses

Meilleure réponse
Messages postés
57
Date d'inscription
dimanche 19 décembre 2004
Statut
Membre
Dernière intervention
21 novembre 2006
3
Merci
<?php
//-----------------------------------------------
//DECLARE LES VARIABLES
//-----------------------------------------------
$email_expediteur='votre_mail@fai.fr';
$email_reply='email_de_reponse@fai.fr';
$message_texte='Bonjour,'."n\n".'Voici un message au format texte';

$message_html='<html>
<head>
<title>Titre</title>
</head>

Test de message

</html>';

//-----------------------------------------------
//GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML
//-----------------------------------------------

$frontiere = '-----=' . md5(uniqid(mt_rand()));

//-----------------------------------------------
//HEADERS DU MAIL
//-----------------------------------------------

$headers = 'From: "Anthony Rossetto" <'.$email_expediteur.'>'."\n";
$headers .= 'Return-Path: <'.$email_reply.'>'."\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= 'Content-Type: multipart/mixed; boundary="'.$frontiere.'"';

//-----------------------------------------------
//MESSAGE TEXTE
//-----------------------------------------------
$message = 'This is a multi-part message in MIME format.'."\n\n";

$message .= '--'.$frontiere."\n";
$message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";
$message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
$message .= $message_texte."\n\n";

//-----------------------------------------------
//MESSAGE HTML
//-----------------------------------------------
$message .= '--'.$frontiere."\n";

$message .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
$message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
$message .= $message_html."\n\n";

//-----------------------------------------------
//PIECE JOINTE
//-----------------------------------------------
$message .= '--'.$frontiere."\n";

$message .= 'Content-Type: image/jpeg; name="nom_du_fichier.jpg"'."\n";
$message .= 'Content-Transfer-Encoding: base64'."\n";
$message .= 'Content-Disposition:attachement; filename="nom_du_fichier.jpg"'."\n\n";

$message .= chunk_split(base64_encode(file_get_contents('nom_du_fichier.jpg')))."\n";

mail($destinataire,$sujet,$message,$headers);
?>

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 201 internautes nous ont dit merci ce mois-ci

Commenter la réponse de mehdisfr
Messages postés
315
Date d'inscription
mercredi 23 mars 2005
Statut
Membre
Dernière intervention
21 mars 2011
1
0
Merci
Hello,

Il faut savoir que les pièces jointes sont souvent codés en BASE 64 la plupart du temps, si tu veux exploiter ta pièce jointe, il faut d'abord la décoder .
Commenter la réponse de raven44
Messages postés
1218
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
0
Merci
merci pour ta reponse rapide
apparemment c'est mime_mail.class.php qui se charge d'encoder
mais je ne vois pas bien où décoder !!
voila ma page de test d'envoi (je n'ai pas touché à mime_mail.class.php )

<?php
require "mime_mail.class.php";
$fichier= fread(fopen("fichier.doc", "r"), filesize("fichier.doc"));
$mail = new mime_mail();
$mail->to = "
[mailto:xx@yy.fr xx@yy.fr
]"; // Adresse email de reception
$mail->subject = "Test envoi piece jointe"; // Sujet
$mail->body = "Ceci est un test====="; // Corps du message
$mail->from = "
[mailto:xx@yy.fr xx@yy.fr
]"; // Adresse email de l'expediteur (optionnel)
$mail->headers = "Date: "; // Entetes supplementaires (optionnel)
$mail->attach("$fichier", "fichier.doc"); // fichier attache (optionnel)
// envoi du message
$mail->send();
?>
Commenter la réponse de sidf
Messages postés
315
Date d'inscription
mercredi 23 mars 2005
Statut
Membre
Dernière intervention
21 mars 2011
1
0
Merci
en faite, ce qu'il faut faire, c'est lorsque tu extrait ta pièce jointe dans ton code, c'est à ce moment là que tu dois la décoder, là tu ne me montre que l'envoi.
Commenter la réponse de raven44
Messages postés
1218
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
0
Merci
merci encore mais là, j'avoue que je ne comprends pas



en fait je reçois bien le mail avec la piece jointe

dans outlook ou chez yahoo

et là c'est le logiciel client qui prend la main

quand je dble clique sur l'agrafe

je n'extrais pas moi même

donc je n'ai pas d'autre code ?..
Commenter la réponse de sidf
Messages postés
315
Date d'inscription
mercredi 23 mars 2005
Statut
Membre
Dernière intervention
21 mars 2011
1
0
Merci
D'accord, je comprend, quand tu envoi ton mail, il encode la pièce jointe naturellement en BASE 64 y'a de forte chance.

Donc l'erreur vient du faite que Word est incapable de décoder automatiquement l'encodage réalisé lors de l'envoi de ton mail. Il faudrait que tu précise le type "encoding" en BASE 64.
Commenter la réponse de raven44
Messages postés
315
Date d'inscription
mercredi 23 mars 2005
Statut
Membre
Dernière intervention
21 mars 2011
1
0
Merci
Un truc de ce genre : Content-Transfer-Encoding: base64
Commenter la réponse de raven44
Messages postés
1218
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
0
Merci
merci
je vois, mais ou intervenir ? pas dans mime_mail.class.php ?
(je ne suis pas specialiste des classes ni de l'objet)

j'essaie ça à tout hasard dans l'envoi
$mail->headers = "Content-Transfer-Encoding: base64 ";
Commenter la réponse de sidf
Messages postés
1218
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
0
Merci
j'ai immédiatement ça

Warning: mail(): SMTP server response: 550 5.7.1 [mailto:xx@yy xx@yy]... Relaying denied. IP name lookup failed [194.250.153.124] in c:\program files\easyphp1-8\www\XXX\pages\mime_mail.class.php on line 73
Commenter la réponse de sidf
Messages postés
1218
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
0
Merci
en fait
le

Content-Transfer-Encoding: base64

est bien inclus dans mime_mail.class...
Commenter la réponse de sidf
Messages postés
1218
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
0
Merci
comme par hasard le fournisseur smtp se met a bugger au même moment
donc ça n'a rien à voir
Commenter la réponse de sidf
Messages postés
315
Date d'inscription
mercredi 23 mars 2005
Statut
Membre
Dernière intervention
21 mars 2011
1
0
Merci
Etrange en effet.

Ce que tu peux faire c'est éviter d'utiliser mime_mail.class.
Commenter la réponse de raven44
Messages postés
1218
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
0
Merci
ça marche,
merci beaucoup
Commenter la réponse de sidf
Messages postés
1218
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
0
Merci
il manquait juste le destinataire
Commenter la réponse de sidf