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

Signaler
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
-
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
-
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

14 réponses

Messages postés
57
Date d'inscription
dimanche 19 décembre 2004
Statut
Membre
Dernière intervention
21 novembre 2006

<?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);
?>
Messages postés
315
Date d'inscription
mercredi 23 mars 2005
Statut
Membre
Dernière intervention
21 mars 2011
1
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 .
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
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();
?>
Messages postés
315
Date d'inscription
mercredi 23 mars 2005
Statut
Membre
Dernière intervention
21 mars 2011
1
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.
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
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 ?..
Messages postés
315
Date d'inscription
mercredi 23 mars 2005
Statut
Membre
Dernière intervention
21 mars 2011
1
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.
Messages postés
315
Date d'inscription
mercredi 23 mars 2005
Statut
Membre
Dernière intervention
21 mars 2011
1
Un truc de ce genre : Content-Transfer-Encoding: base64
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
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 ";
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
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
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
en fait
le

Content-Transfer-Encoding: base64

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

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