1000 * 1000) { $erreurs[] = "La taille du fichier joint dépasse la taille autorisée.
Votre fichier est de ".number_format($pj_size, 2, ",", " ")." Ko et la taille maximale autorisée est de 1 mega"; // la fonction number_format retourne une chaîne avec un nombre formaté. number_format accepte 1,2 ou 4 paramètres // Avec 4 paramètres ici pour nous, formatage avec 2 décimales, "," comme séparateur décimal, et " "séparateur de milliers } else { echo "la piece jointe -$pj- se nomme $pj_name sa taille est de $pj_size son type MIME est $pj_type"; $pjnomorigine = $pj_name; } } // il n'y a pas d'erreur, on peut continuer //****************************************** if(count($erreurs) == 0) { $hcc="Cc: $cc \n"; // mot clé Cc: permet de définir une adresse mail d'envois en copie $entete=$hcc; // creation du 4° paramètre // teste si un fichier est joint au message if($pj) { // génère un nombre aléatoire unique servant de délimiteur que l'on ne peut trouver nulle part dans le corps du message $boundary = md5(uniqid(rand())); // ajout du champs from $entete .= "From: responsable \n"; // c'est un message au format MIME $entete .= "MIME-Version: 1.0\r\n"; // ce message est composé de plusieurs parties $entete .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; //-- corps du message -- $message = "C'est un message de format MIME en plusieurs parties.\r\n"; $message .= "--$boundary\r\n"; // type MIME, version du mail (HTML ou texte pur) $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n"; // format d'encodage des données $message .= "Content-Transfer-Encoding: 8bit\r\n"; // contenu du message récupéré depuis le formulaire $message .= "$corps\n\n"; // teste si le navigateur envoie le type MIME du fichier joint if($pj_type) $type_mime = $pj_type; else // type MIME par défaut $type_mime = "application/octet-stream"; // ******* UPLOAD DE FICHIER N.B: particularite Provider online ! ! ! ******************** // lorsque l'on telecharge un fichier, on peut le stocker dans un dossier quelconque par exemple tmp // ce dossier tmp doit etre crée au préalable. le chemin de ce dossier est le suivant chez online : // tmp/ à la racine du site web donc depuis le dossier mail-email cela donne ../../../tmp/ // pour charger le fichier uploadé ds un fichier de destination on utilise // la fonction copy( string filename , string destination ) //*********************************************************************************************** //******* récupération du nom du fichier uploadé**********/ $fichiercible="tmp/" . $pj_name; /******** copie du fichier dans le dossier adéquat*****/ /* copy fait une copie du fichier temp passé au fichier physique, elle renvoit TRUE en cas de succès, et FALSE sinon */ copy($pj,$fichiercible) or die("copie de fichier échouée, le nom du fichier est $fichier_name -"); /******* récupération du nom du fichier uploadé**********/ /* le dossier physique des fichiers est tmp au niveau de la racine du site...*/ $pj_name="tmp/".$pjnomorigine; $pj=$pj_name; echo "apres copie la pj so nomme $pj_name, sa taille est $pj_size son type MIME est $pj_type "; // lecture du fichier temporaire stocké chez le provider // son contenu est placé dans la variable $fichier_joint $fp = fopen($pj,"r"); $fichier_joint = fread($fp,filesize($pj)); fclose($fp); //unlink($pj); // supprime le fichier stocké sur le serveur Web (optionnel, permet de garder une trace des pj... $message .= "--$boundary\n"; // les fichiers texte n'ont pas besoin d'être codés en BAse64, pour verifier si le fichier est un fichier texte // on vérifie si dans son type mime on retrouve la chaine "text" if(eregi("text",$pj_type)) { // définition du champ type $message .= "Content-Type: $type_mime;\r\n name=\"$pjnomorigine\"\r\n"; // encodage en 8 bits $message .= "Content-Transfer-Encoding: 8bit\r\n"; // affichage du fichier joint dans le mail ("inline"); l'autre possiblité est "attachment" (comme pièce jointe) $message .= "Content-Disposition: inline;\r\n filename=\"pjnomorigine\"\r\n"; $message .= "$fichier_joint\r\n"; $message .= "--$boundary--"; } else { // ce n'est pas un fichier texte, faut encoder et découper en base64... $fichier_joint = chunk_split(base64_encode($fichier_joint)); // définition du champ type $message .= "Content-Type: $type_mime;\r\n name=\"$pjnomorigine\"\r\n"; // dans name= on donne le nom de la pièce jointe // encodage du fichier joint en base64 $message .= "Content-Transfer-Encoding: base64\r\n"; // affichage du fichier joint dans le mail ("inline"); l'autre possiblité est "attachment" (comme pièce jointe) $message .= "Content-Disposition: inline; filename=\"$pjnomorigine\"\r\n"; // dans filename= on donne le nom de la pièce jointe $message .= "$fichier_joint\r\n"; $message .= "--$boundary--"; } } // pas de fichier joint else { $entete .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n"; $message = $corps; } } // on verifie le tableau des erreurs, s'il n' est pas vide, on liste les erreurs //****************************************************************************** if(count($erreurs) > 0) { echo "Votre message n'a pu être envoyé pour les raisons suivantes :
"; echo ""; } else // s'il est vide, on peut lancer le(s) mail(s) avec ses 4 paramètres { // envois du email au destinataire principal if(!mail($a, $sujet, $message, $entete)) echo "Le message à $a n'a pu être envoyé."; // L'envoi du email a l'adresse donnée en Cc if($cc) { if(!mail($cc, $sujet, $message, $entete)) echo "Le message à $cc n'a pu être envoyé."; } } ?>