Probleme avec mail() et pièces jointes

Eléphant du PHP | 70 Messages

30 mars 2010, 13:57

Bonjour à tous,

Je crée actuellement un formulaire avec la possibilité d'envoyer une pièce jointe, mon code me semble correct mais je ne reçois pas la pièce jointe, je reçois uniquement le contenu du message.

Voici mon code simplifié :
// Adresse de réception du formulaire
$email_dest = '[email protected]';
//----------------------------------------------- 
//GENERE LA FRONTIERE DU MAIL ENTRE HTML ET PIECE JOINTE 
//----------------------------------------------- 
$frontiere = '-----=' . md5(uniqid(mt_rand())); 
//----------------------------------------------- 
//HEADERS DU MAIL 
//----------------------------------------------- 
$headers = 'MIME-Version: 1.0'."\n";
$headers .= 'From: '.$email.''."\n";
$headers .= 'Content-Type: multipart/mixed; boundary="'.$frontiere.'"'; 
//----------------------------------------------- 
//CONSTRUCTION MESSAGE HTML 
//----------------------------------------------- 
$subject = 'Message de ma page';

$entete = '<html><head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8>
</head>
<body bgcolor="#FFFFFF">';

$corps = '<font face="Verdana" size="2" color="#003366">Vous avez reçu un message de votre page</font>';

$fin = '</body></html>';

$sortie = $entete . $corps . $fin;
//----------------------------------------------- 
//AJOUT DU MESSAGE HTML AU MAIL
//----------------------------------------------- 
$mail = 'This is a multi-part message in MIME format.'."\n\n"; 

$mail .= '--'.$frontiere."\n"; 
$mail .= 'Content-Type: text/html; charset=utf-8'."\n"; 
$mail .= 'Content-Transfer-Encoding: 7bit'."\n\n"; 
$mail .= $sortie."\n\n"; 

$mail .= '--'.$frontiere.'--'."\n"; 
//----------------------------------------------- 
//PIECE JOINTE 
//----------------------------------------------- 
$attach_tmp_name = $_FILES['attach']['tmp_name'];
$attach_type = $_FILES['attach']['type'];
$attach_name = $_FILES['attach']['name'];

$mail .= 'Content-Type: '.$attach_type.'; name="'.$attach_name.'"'."\n"; 
$mail .= 'Content-Disposition: attachement; filename="'.$attach_name.'"'."\n"; 
$mail .= 'Content-Transfer-Encoding: base64'."\n\n"; 

$mail .= chunk_split(base64_encode(file_get_contents($attach_tmp_name)))."\n\n"; 

$mail .= '--'.$frontiere.'--'."\n"; 

//Envoi du message
$resultat = mail($email_dest,$subject,$mail,$headers);

if($resultat) {
    $message = 'Votre message a bien été envoyé.';
} else {
    $message = 'Echec dans l\'envoi de votre message, veuillez réessayer.';
}
Est-ce que vous voyez quelque chose qui cloche, parce que là j'ai tout tenté :cry:

D'avance merci pour vos réponses

Eléphant du PHP | 428 Messages

30 mars 2010, 14:01

Je ne sais pas mais :
$mail .= 'Content-Disposition: attachement; filename="'.$attach_name.'"'."\n"; 
Ca ne devrait pas plutôt être :
$mail .= 'Content-Disposition: attachement; filename="'.$attach_tmp_name.'"'."\n";

???? Pas testé

Eléphant du PHP | 70 Messages

30 mars 2010, 14:07

Non déjà testé ça ne vient pas de là, merci quand même

Eléphant du PHP | 428 Messages

30 mars 2010, 14:19

Le reste de ton code me semblant logique et fonctionnel, je pense tout de même que le problème viens de là ... essaye un peu :
$fichier = chunk_split(base64_encode(file_get_contents($attach_tmp_name)))."\n\n"; 
$mail .= 'Content-Transfer-Encoding: base64'."\r\n";
$mail .= 'Content-Disposition: attachement; filename="'.$attach_name.'"'."\r\n\n $fichier"; 

OU

$mail .= 'Content-Disposition: attachement; filename="'.$fichier.'"'."\r\n\n"; 

Eléphant du PHP | 70 Messages

30 mars 2010, 14:33

:( Non toujours pas de pièces jointes reçu, je ne comprend vraiment d'où ça peut venir, ça doit être tout bête

Eléphant du PHP | 70 Messages

30 mars 2010, 16:50

Ca y'est j'ai trouvé :D
C'est la frontière avant la pièce jointe que j'avais "fermé"
$mail .= '--'.$frontiere.'--'."\n"; 

REMPLACER PAR

$mail .= '--'.$frontiere."\n"; 
Merci visualight pour l'aide et à bientôt