Page 1 sur 1

envoyer un mail avec fichier joint

Posté : 07 août 2007, 10:54
par béka
Bonjour tout le monde, je sais qu'il y a plein de sujet sur ce thème mais j'ai un problème dont je n'ai pas trouvé de réponse sur ce forum.

VOIla, donc j'ai une fonction qui permet d'envoyer un mail avec une pièce jointe.
Lorsque je choisit une pièce jointe (une image que je peux ouvrir sur mon ordi) et que je me l'envoi, je la reçoit bien mais je ne peux l'ouvrir. Elle ne doit pas être envoyée correctement je pense (mais cependant, je n'ai aucun message d'erreur).

Voici mon code :
<?
function mail_attachement($to, $sujet, $message, $fichier, $typemime, $nom, $reply, $from){
    $limite = "_parties_".md5(uniqid (rand()));
    
    $mail_mime = "Date: ".date("l j F Y, G:i")."\n";
    $mail_mime .= "MIME-Version: 1.0\n";
    $mail_mime .= "Content-Type: multipart/mixed;\n";
    $mail_mime .= " boundary=\"----=$limite\"\n\n";
    
    //Le message en texte simple pour les navigateurs qui n'acceptent pas le HTML
    $texte = "This is a multi-part message in MIME format.\n";
    $texte .= "Ceci est un message est au format MIME.\n";
    $texte .= "------=$limite\n";
    $texte .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
    $texte .= "Content-Transfer-Encoding: 8bit\n\n";
    $texte .= $message;
    $texte .= "\n\n";
    
    //le fichier
    $attachement = "------=$limite\n";
    $attachement .= "Content-Type: $typemime; name=\"$nom\"\n";
    $attachement .= "Content-Transfer-Encoding: base64\n";
    $attachement .= "Content-Disposition: attachment; filename=\"$nom\"\n\n";
    
    $fd = fopen( $fichier, "r" );
    $contenu = fread( $fd, filesize( $fichier ) );
    fclose( $fd );
    $attachement .= chunk_split(base64_encode($contenu));
    
    $attachement .= "\n\n\n------=$limite\n";
    return mail($to, $sujet, $texte.$attachement, "Reply-to: $reply\n$from\n".$mail_mime);
    }

    	
    $subjectMailing = $_POST['subject'];
    $bodyMailing = $_POST['body'];  
    $fileMailing = $_FILES['fileAttached']['name'];
    $nom = $_FILES['fileAttached']['name'];
    $typemime = $_FILES['fileAttached']['type'];
    $userMail = '[email protected]';
    $reply = 'Reply-To: [email protected]'."\n";
    $from = 'From: "Administrator"<[email protected]>'."\n";

mail_attachement($userMail, $subjectMailing, $bodyMailing, $fileMailing, $typemime, $nom, $reply, $from);
?>

EDIT :
j'ai trouvé, il fallait simplement remplacer
<? $fileMailing = $_FILES['fileAttached']['name']; ?>
par
<? $fileMailing = $_FILES['fileAttached']['tmp_name']; ?>

Posté : 07 août 2007, 12:02
par jpaul
Bonjour,

Je ne suis pas spécialiste, mais comme tu n'as pas encore de réponse, je me lance.
A ta place, je vérifierais le typemime qui se retrouve dans Content-Type: de l'entête du message.
Au besoin, tu peux trouver des infos là ! http://www.commentcamarche.net/systemes/mime.php3

Si cette piste n'aboutit pas peut être peux tu fournir un exemple du code source du message reçu (sous thunderbird : Ctrl U).