saxgard | bon j'ai essayer plusieurs fonctions et classes pour pouvoir envoyer des mails avec fichiers attachés
Code :
- // ------------------------------------------
- // Auteur : NoKi (nokifr@aol.com)
- // Site : http://zaolien.free.fr/
- // ------------------------------------------
- sendMail($nomFrom,$mailFrom,$nomTo,$mailTo,$CC,$BCC,$sujet,$body,$pj)
- ######################################################################
- # Classe mime_mail
- ######################################################################
- #
- # Concue par Sascha Schumann <sascha@schumann.cx>
- # Modifiee par Tobias Ratschiller <tobias@dnet.it>:
- # - Nettoyage du code
- # - Separation des propriétés body- et from-
- # - Suppression de choses casiment innutiles
- # Modifiee par PHPFrance <contact@phpfrance.com>:
- # - Ajout d'une partie pour recuperer le type de fichier attache
- # - Commentaires en francais
- #
- ######################################################################
- #
- # EXEMPLE D'UTILISATION
- #
- #
- #
- # // declaration de la classe
- # require "mime_mail.class.php";
- #
- # // ouverture et lecture du fichier
- # $fichier_attache = fread(fopen("test.jpg", "r" ), filesize("test.jpg" ));
- #
- # // instanciation de la classe
- # $mail = new mime_mail();
- # // parametres
- # $mail->to = "adresse@email"; // Adresse email de reception
- # $mail->subject = "Test"; // Sujet
- # $mail->body = "Ceci est un test."; // Corps du message
- # $mail->from = "adresse@email"; // Adresse email de l'expediteur (optionnel)
- # $mail->headers = "Date: "; // Entetes supplementaires (optionnel)
- # $mail->attach("$fichier", "test.jpg" ); // fichier attache (optionnel)
- # // envoi du message
- # $mail->send();
- #
- #
- #
- ######################################################################
- class mime_mail
- {
- var $parts;
- var $to;
- var $from;
- var $headers;
- var $subject;
- var $body;
- // constructeur
- function mime_mail()
- {
-
- $this->parts = array();
- $this->to = "";
- $this->from = "";
- $this->subject = "";
- $this->body = "";
- $this->headers = "";
-
- }
- // attache un fichier au message
- function attach($message,$name,$ctype = '')
- {
-
- // type de contenu non defini
- if(empty($ctype)){
- // on essaie de reconnaitre l'extension
- switch(strrchr(basename($name), "." )){
- case ".gz": $ctype = "application/x-gzip"; break;
- case ".tgz": $ctype = "application/x-gzip"; break;
- case ".zip": $ctype = "application/zip"; break;
- case ".pdf": $ctype = "application/pdf"; break;
- case ".png": $ctype = "image/png"; break;
- case ".gif": $ctype = "image/gif"; break;
- case ".jpg": $ctype = "image/jpeg"; break;
- case ".txt": $ctype = "text/plain"; break;
- case ".htm": $ctype = "text/html"; break;
- case ".html": $ctype = "text/html"; break;
- default: $ctype = "application/octet-stream"; break;
- }
- }
- $this->parts[] =
- array (
- "ctype" => $ctype,
- "message" => $message,
- "encode" => $encode,
- "name" => $name
- );
-
- // fin de fonction
- }
- // fonction utilisee pour contruire le message MIME
- // utilisee depuis build_multipart()
- function build_message($part)
- {
-
- $message = $part[ "message"];
- $message = chunk_split(base64_encode($message));
- $encoding = "base64";
-
- return "Content-Type: ".$part[ "ctype"].
- ($part[ "name"]? "; name = \"".$part[ "name"]. "\"" : "" ).
- "\nContent-Transfer-Encoding: $encoding\n\n$message\n";
-
- }
- // compose le message MIME
- // utilisee depuis send()
- function build_multipart()
- {
- $boundary = "b".md5(uniqid(time()));
- $multipart = "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";
- for($i = sizeof($this->parts) - 1; $i >= 0; $i--)
- {
- $multipart .= "\n".$this->build_message($this->parts[$i]). "--$boundary";
- }
- return $multipart.= "--\n";
- }
- // envoie le message
- // derniere fonction a appeler
- function send()
- {
- $mime = "";
- // parametres optionnels
- if (!empty($this->from)) $mime .= "From: ".$this->from. "\n";
- if (!empty($this->headers)) $mime .= $this->headers. "\n";
- if (!empty($this->body)) $this->attach($this->body, "", "text/plain" );
- // entete MIME
- $mime .= "MIME-Version: 1.0\n".$this->build_multipart();
- // envoi du message
- mail($this->to, $this->subject, "", $mime);
-
- }
- }; // fin de la classe
- ?>
- <?php
- function xmail($email_address,$email_from,$subject,$msg,$attach_filepath) {
- $b = 0;
- $mail_attached = "";
- $boundary = md5(uniqid(time(),1))."_xmail";
- if (count($attach_filepath)>0) {
- for ($a=0;$a<count($attach_filepath);$a++) {
- if ($fp = fopen($attach_filepath[$a],"rb" )) {
- $file_name = basename($attach_filepath[$a]);
- $content[$b] = fread($fp,filesize($attach_filepath[$a]));
- $mail_attached .= "--".$boundary."\r\n"
- ."Content-Type: image/jpeg; name=\"$file_name\"\r\n"
- . "Content-Transfer-Encoding: base64\r\n"
- . "Content-Disposition: inline; filename=\"$file_name\"\r\n\r\n"
- .chunk_split(base64_encode($content[$b]))."\r\n";
- $b++;
- fclose($fp);
- } else {
- echo "NEIN";
- }
- }
- $mail_attached .= "--".$boundary." \r\n";
- $add_header ="MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"$boundary\"";
- $mail_content = "--".$boundary."\r\n"
- . "Content-Type: text/plain; charset=iso-8859-1; format=flowed\r\n"
- . "Content-Transfer-Encoding: 8bit\r\n\r\n"
- . $msg."\r\n\r\n".$mail_attached;
- return mail($email_address,$subject,$mail_content,"From: ".$email_from."\r\n".$add_header);
- } else {
- return mail($email_address,$subject,$msg,"From: ".$email_from);
- }
- }
- ?>
- et
- <?php
- /*
- *
- *
- * Avertissement : Cette librairie de fonctions PHP est distribuee avec l'espoir
- * qu'elle sera utile, mais elle l'est SANS AUCUNE GARANTIE; sans meme la garantie de
- * COMMERCIALISATION ou d'UTILITE POUR UN BUT QUELCONQUE.
- * Elle est librement redistribuable tant que la presente licence, ainsi que les credits des
- * auteurs respectifs de chaque fonctions sont laisses ensembles.
- * En aucun cas, Nexen.net ne pourra etre tenu responsable de quelques consequences que ce soit
- * de l'utilisation ou la mesutilisation de ces fonctions PHP.
-
- */
- /****
- * Titre : Mail avec attachement
- * Auteur : Damien Seguy
- * Email : dams@nexen.net
- * Url : www.nexen.net
- * Description : Envoi un mail, avec un fichier attache. On lui passe le destinataire du mail, le sujet, le message, puis le fichier a envoyer, l'adresse d'origine, l'adresse de reponse et des entetes optionnels.
- ****/
- function mail_attachement($to,$sujet,$message,$fichier,$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=\"US-ASCII\"\n";
- $texte .= "Content-Transfer-Encoding: 7bit\n\n";
- $texte .= $message;
- $texte .= "\n\n";
- //lefichier
- $attachement = "------=$limite\n";
- $attachement .= "Content-Type: application/octet-stream; name=\"$fichier\"\n";
- $attachement .= "Content-Transfer-Encoding:base64\n";
- $attachement .= chunk_split(base64_encode(implode("", file($fichier))));
- $attachement .= "\n\n\n------=$limite\n";
- return mail($to, $sujet, $texte.$attachement, "Reply-to: $reply\nFrom: $from\n".$mail_mime);
- }
- ?>
|
et sur tous ca, aucune ne marche correctement.
soit j'ai aucun corps de message qui s'affiche , sois le fichier attachés est vide, soit le fichier attaché n'y est pas
soit le message est dans un code incomprehensible.
quelqu'un pourrait-il me donner ou me dire ou telecharger la fonction ou class la plus adapter à tous les problemes pour les envois de mails avec fichiers attachés? ou du moin celle qui est laplus adapter pour l'envois de fichiers texte ou CSV ou excel
je pense en parti que mes problemes serait liés avec les MIME , mais j'en suis pas sure.
je vous remercie d'avance.
PS : je fais des tests sur ma messageries AOL et sur ma messagerie du travail (completel) Message édité par saxgard le 07-04-2004 à 17:17:44
|