envoyer un mail avec fichier joint

Mammouth du PHP | 536 Messages

07 août 2007, 10:54

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']; ?>
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Eléphant du PHP | 451 Messages

07 août 2007, 12:02

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).
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)