Envoie de piece jointe par mail()

Eléphant du PHP | 248 Messages

19 oct. 2008, 16:37

Bonjour,
je vous post ce message car j'ai un souci pour l'envoi de piece jointe avec la fonction mail. Voici mon code:

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Untitled Document</title> </head> <body> <?php if(!$_POST['envoie']){?> <form action="" method="post" enctype="multipart/form-data" name="form1" id="form1"> <input type="file" name="file" /> <input name="envoie" type="submit" id="envoie" value="Submit" /> </form> <?php }else{ $dest_fichier = basename($_FILES['file']['name']); // formatage nom fichier // enlever les accents $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); // remplacer les caracteres autres que lettres, chiffres et point par _ $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier); $fichier = file_get_contents($_FILES['file']['tmp_name']); $email_expediteur='[email protected]'; $email_reply='[email protected]'; $message_texte='Bonjour'; $frontiere = '-----=' . md5(uniqid(mt_rand())); $headers = 'From: "Nom" <'.$email_expediteur.'>'."\n"; $headers .= 'Return-Path: <'.$email_reply.'>'."\n"; $headers .= 'MIME-Version: 1.0'."\n"; $headers .= 'Content-Type: multipart/mixed; boundary="'.$frontiere.'"'; $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 .= 'Content-Type: image/jpeg; name="'.$fichier.'"'; $message .= 'Content-Transfer-Encoding: base64'."\n"; $message .= 'Content-Disposition:attachement; filename="'.$fichier.'"'; $message .= chunk_split(base64_encode(file_get_contents($fichier)))."\n"; if(mail("[email protected]",$sujet,$message,$headers)) { echo 'Le mail a été envoyé'; } else { echo 'Le mail n\'a pu être envoyé'; } }?> </body> </html>
Voici le message que je recois :

Bonjour

Content-Type: image/jpeg; name="ÿØÿà


Avez vous une solution?


Merci d'avance

ViPHP
AB
ViPHP | 5818 Messages

20 oct. 2008, 03:15

1/ je vois pas à quoi te sert le remplacement des caractères accentués puisque tu n'utilises à aucun moment $dest_fichier dans l'envoi de mail

2/Il manque une frontière pour séparer le texte des fichiers joints

Un tuto ici http://www.vulgarisation-informatique.com/mail.php

Eléphant du PHP | 248 Messages

20 oct. 2008, 09:34

Bonjour à tous j'ai trouvé la solution ci dessous le code pour que cela puisse servir d'autre:

Merci AB
<?php if(!$_POST['envoie2']){?><form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
  <table width="92%" height="65" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td height="65"><table width="100%" height="281" border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td><table width="100%" height="103" border="0" cellpadding="0" cellspacing="0">
            <tr>
              <td width="44%"><span class="style5">envoy&eacute; &agrave; :</span> 
                  <input name="destinataire" type="text" id="destinataire" value="" />                </td>
              <td width="56%">Joindre un fichier : 
                <input type="file" name="file" /></td>
            </tr>
            <tr>
              <td height="33" class="style3">Pr&eacute;nom : 
                &nbsp;&nbsp;&nbsp;
                <input name="prenom" type="text" id="prenom" /></td>
              <td><span class="style3">Nom :  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                  <input name="nom" type="text" id="nom" />
              </span></td>
            </tr>
            <tr>
              <td class="style3">T&eacute;l : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input name="tel" type="text" id="tel" /></td>
              <td><span class="style3">Courriel :  &nbsp;&nbsp;&nbsp;
                  <input name="courriel" type="text" id="courriel" />
              </span></td>
            </tr>
          </table></td>
        </tr>
        <tr>
          <td><div class="ligne"></div></td>
        </tr>
        <tr>
          <td height="38" class="style5"><div align="left">Objet : 
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <input name="objet" type="text" id="objet" size="56" />
          </div></td>
        </tr>
        <tr>
          <td><div class="ligne"></div></td>
        </tr>
        <tr>
          <td align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <textarea name="message" cols="43" rows="5">&nbsp;</textarea>
            <input name="envoie2" type="submit" id="envoie2" value=" " /></td>
        </tr>
      </table></td>
    </tr>
  </table>
  </form>
  
  <?php 
  }else{
  $destinataire=$_POST['destinataire'];
  $nom=$_POST['nom'];
  $prenom=$_POST['prenom'];
  $tel=$_POST['tel'];
  $courriel=$_POST['courriel'];
  $sujet=$_POST['objet'];
  $mess=$_POST['message'];
  
  $dest_fichier = basename($_FILES['file']['name']);    
// formatage nom fichier    // enlever les accents    
$dest_fichier = strtr($dest_fichier,     'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',     'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');    
// remplacer les caracteres autres que lettres, chiffres et point par _    
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier); 
$fichier = file_get_contents($_FILES['file']['tmp_name']); 
$attachement = chunk_split(base64_encode($fichier));

    


$email_expediteur=$courriel; 
     $email_reply=$courriel;  
	 
	 
$boundary = "-----=".md5(rand());
//$boundary_alt = "-----=".md5(rand());

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


$message = "\n--".$boundary."\n";
$message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n"; 
$message .= 'Content-Transfer-Encoding: 8bit'."\n\n"; 
$message .= "Nom : ".$nom."\n"; 
$message .= "Prenom : ".$prenom."\n"; 
$message .= "Téléphone : ".$tel."\n"; 
$message .= "Courriel : ".$courriel."\n"; 
$message .= "Message : ".$mess."\n"; 





$message.= "\n--".$boundary."\n";
 
//=====Ajout de la pièce jointe
$message.= "Content-Type: image/jpeg;\n name=\"image.jpg\"\n";
$message.= "Content-Transfer-Encoding: base64\n";
$message.= "Content-Disposition: attachment;\n filename=\"image.jpg\"\n";
$message.= "\n".$attachement."\n\n";
$message.= "\n--".$boundary."--\n"; 


     if(mail($destinataire,$sujet,$message,$headers)) 
     { 
          echo 'Le mail a été envoyé'; 
     } 
     else 
     { 
          echo 'Le mail n\'a pu être envoyé'; 
     } 
  
  
  
  }
  ?>