<?php
// ------------------------------------------------------------------------- //
// Classe pour l'envoi d'emails avec pièces jointes. //
// ------------------------------------------------------------------------- //
// Auteur: Perrich //
// Email: perrich@club-internet.fr //
// Web: http://www.frshop.net/ //
// ------------------------------------------------------------------------- //
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
);
}
// 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;
$multipart .= "\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 = 'Subject: '.$this->subject."\n";
// 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 );
}
};
// ------------------------------------------------------------------------- //
// Exemple d'utilisation //
// ------------------------------------------------------------------------- //
$file_name = 'fichier.txt';
@$fp = fopen( $file_name, "r");
if ( $fp ) {
$contenu_fichier = fread( $fp, filesize( $file_name ));
$mail = new mime_mail();
$mail->from = 'toto@email.com';
$mail->subject = 'Message de test';
$mail->body = ' ';
// 'nomdufichier' peut etre un nom complètement différent du fichier réel
$mail->attach( $contenu_fichier, 'nomdufichier');
$mail->to = 'toto@email.fr';
$mail->send();
}
?>