Voilà le code source de ma class. Il y a surement des choses à supprimer mais je le ferai plus tard.
<?php
class sendMail
{
/*
Nom & adresse de l'expéditeur
@var array
*/
var $from;
/*
Adresse du reply (si différente de l'expéditeur)
@var array
*/
var $replyTo;
/*
Adresse du destinataire
@var array
*/
var $to;
/*
Adresse du Cc
@var array
*/
var $cc;
/*
Adresse du Bcc
@var array
*/
var $bcc;
/*
Sujet du mail
@var string
*/
var $subject;
/*
Contenu du mail
@var array
*/
var $content;
/*
Pièce jointe
@var array
*/
var $attachment;
/*
Type du mail = > text/plain | text/html | multipart/alternative
@var string
*/
var $type;
/*
Priorité du mail => de 1 à 5. Plus c'est petit plus c'est important
@var int
*/
var $priority;
/*
Accusé de réception
@var string
*/
var $receipt;
/*
Sauvegarde du mail
@var booléan
*/
var $save;
public function __construc()
{
}
public function mailFrom($name, $address)
{
if($this->checkMail($address))
{
$this->from[0] = array($name, $address);
}
else
{
$this->getException("Adresse mail de l\'expéditeur invalide !!");
}
}
public function mailReplyto($name, $address)
{
if($this->checkMail($address))
{
if($this->from && $this->from[0][1] != $address){ $this->replyTo = array($name, $address); }
}
else
{
$this->getException("Adresse mail du replyTo invalide !!");
}
}
public function mailTo($name, $address)
{
if($this->checkMail($address))
{
$this->to[] = array($name, $address);
}
else
{
$this->getException("Adresse mail du destinataire invalide !!");
}
}
public function mailCc($name, $address)
{
$error = false;
if($this->checkMail($address))
{
if($this->to)
{
$error = $this->findAddress($this->to, $address);
}
if($this->bcc)
{
$error = $this->findAddress($this->bcc, $address);
}
if(!$error){ $this->cc[] = array($name, $address); }
}
else
{
$this->getException("Adresse mail du Cc invalide !!");
}
}
public function mailBcc($name, $address)
{
$error = false;
if($this->checkMail($address))
{
if($this->to)
{
$error = $this->findAddress($this->to, $address);
}
if($this->cc)
{
$error = $this->findAddress($this->cc, $address);
}
if(!$error){ $this->bcc[] = array($name, $address); }
}
else
{
$this->getException("Adresse mail du Bcc invalide !!");
}
}
public function mailSubject($subject)
{
$this->subject = $subject;
}
public function mailContent($content)
{
$t_content = array("text"=>"", "html"=>"");
switch($this->type)
{
case "text/html":
$t_content["text"] = stripslashes(nl2br($content));
break;
case "multipart/alternative":
$t_content["text"] = stripslashes(nl2br($content));
$t_content["html"] = stripslashes(strip_tags(str_replace(array("
", "
", "
"), "\n", $content)));
break;
default:
case "text/plain":
$t_content["html"] = stripslashes(strip_tags(str_replace(array("
", "
", "
"), "\n", $content)));
break;
}
$this->content = array("text"=>$t_content["text"], "html"=>$t_content["html"]);
}
public function mailAttachment()
{
/* contrôler le type mime de la pièce jointe */
$this->attachment = "";
}
public function mailType($type)
{
if($type){ $this->type = $type; }
else{ $this->type = "text/plain"; }
}
public function mailPriority($priority)
{
if($priority){ $this->priority = $priority; }
else{ $this->priority = 3; }
}
public function mailReceipt($receipt = false)
{
if($receipt){ $this->receipt[] = $this->from[0]; }
}
public function mailSave($save = false)
{
if($save){ $this->save = true; }
}
public function send()
{
/* Vérifier si $this->replyTo est rempli. Si non, y mettre l'adresse de $this->from */
/* Cc & Bcc sont à mettre dans le header */
if(!is_array($this->from)){ $this->getException("Aucune adresse d'expéditeur fournie !!"); }
if(!is_array($this->to)){ $this->getException("Aucune adresse(s) de destinataire(s) fournie(s) !!"); }
if(empty($this->subject)){ $this->getException("Aucun titre à votre Email !!"); }
if(!is_array($this->content)){ $this->getException("Aucun contenu détecté !!"); }
// On filtre les serveurs qui présentent des bogues.
if(count($this->to) > 1){ $passage_ligne = "\r\n"; }
else
{
if(!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $this->to[0][1])){ $passage_ligne = "\r\n"; }
else{ $passage_ligne = "\n"; }
}
//=====Création de la boundary.
$boundary = "-----=".md5(rand());
//==========
//=====Lecture et mise en forme de la pièce jointe.
/* $fichier = fopen("$MREL/adm/img.jpg", "r");
$attachement = fread($fichier, filesize("$MREL/adm/img.jpg"));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier); */
//==========
//=====Création du header de l'e-mail.
$header = "From: ".$this->tab2stringAddress($this->from).$passage_ligne;
if(is_array($this->cc)){ $header .= "Cc: ".$this->tab2stringAddress($this->cc).$passage_ligne; }
if(is_array($this->bcc)){ $header .= "Bcc: ".$this->tab2stringAddress($this->bcc).$passage_ligne; }
if(is_array($this->replyTo)){ $header.= "Reply-to: "".$this->replyTo[0]."" <".$this->replyTo[1].">".$passage_ligne; }
$header .= "MIME-Version: 1.0".$passage_ligne;
if($this->priority){ $header .= "X-Priority: ".$this->priority.$passage_ligne; }
if($this->receipt){ $header .= "Disposition-Notification-To: ".$this->tab2stringAddress($this->from).$passage_ligne; }
$header .= "X-Mailer: PHP/".phpversion().$passage_ligne;
$header .= "Content-Type: ".$this->type.";".$passage_ligne." boundary="$boundary"".$passage_ligne;
$header .= "Date: ".date("r").$passage_ligne;
$header .= $passage_ligne;
//==========
//=====Création du message.
if(!empty($this->content["text"])){
//=====Ajout du message au format texte.
$content .= $passage_ligne."--".$boundary.$passage_ligne;
$content .= "Content-Type: text/plain; charset="ISO-8859-1"".$passage_ligne;
$content .= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$content .= $passage_ligne.$this->content["text"].$passage_ligne;
//$txt true;
}
if(!empty($this->content["html"])){
//=====Ajout du message au format HTML.
$content .= $passage_ligne."--".$boundary.$passage_ligne;
$content .= "Content-Type: text/html; charset="ISO-8859-1"".$passage_ligne;
$content .= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$content .= $passage_ligne."<html> ".$this->content["html"]." </html>".$passage_ligne;
// == ========
$html = true;
}
if($txt){ $content .= $passage_ligne."--".$boundary."--".$passage_ligne; }
if($html){ $content .= $passage_ligne."--".$boundary."--".$passage_ligne; }
/* $message.= $passage_ligne."--".$boundary.$passage_ligne; */
//=====Ajout de la pièce jointe.
/* $content.= "Content-Type: image/jpeg; name="img.jpg"".$passage_ligne;
$content.= "Content-Transfer-Encoding: base64".$passage_ligne;
$content.= "Content-Disposition: attachment; filename="img.jpg"".$passage_ligne;
$content.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$content.= $passage_ligne."--".$boundary."--".$passage_ligne; */
foreach($this->to as $address)
{
$result[$address[1]] = mail($address[1], $this->subject, $content, $header);
}
print_r($header);
echo "$content";
print_r($result);
}
private function checkMail($adress)
{
$syntaxe = '#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#';
if(preg_match($syntaxe,$adress))
{
return true;
}
else
{
return false;
}
}
private function findAddress($address1, $address2)
{
foreach($address1 as $address)
{
if($address === $address2){ return true; }
}
}
private function tab2stringAddress($tab)
{
$i = 0;
$str_address = """;
foreach($tab as $indice=>$infos)
{
if($i > 0){ $str_address .= ">, ""; }
$str_address .= implode("" <", $infos);
$i++;
if($i == count($tab)){ $str_address .= ">"; }
}
return $str_address;
}
private function getException($msg)
{
throw new Exception("$msg");
}
}
/* global $MREL;
$mail = $destinataire; // Déclaration de l'adresse de destination.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.
{
$passage_ligne = "\r\n";
}
else
{
$passage_ligne = "\n";
}
//=====Déclaration des messages au format texte et au format HTML.
$message_txt = "Salut à tous, voici un e-mail envoyé par un script PHP.";
$message_html = "<html><head></head> Salut à tous , voici un e-mail envoyé par un script PHP .</html>";
// ==========
//=====Lecture et mise en forme de la pièce jointe.
$fichier = fopen("$MREL/adm/img.jpg", "r");
$attachement = fread($fichier, filesize("$MREL/adm/img.jpg"));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========
//=====Création de la boundary.
$boundary = "-----=".md5(rand());
//==========
//=====Définition du sujet.
$sujet = "Hey mon ami !";
//=========
//=====Création du header de l'e-mail.
$header = "From: "$expediteur"<$expediteur>".$passage_ligne;
$header.= "Reply-to: "$expediteur" <$expediteur>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary="$boundary"".$passage_ligne;
//==========
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary="$boundary"".$passage_ligne;
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout du message au format texte.
$message.= "Content-Type: text/plain; charset="ISO-8859-1"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset="ISO-8859-1"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout de la pièce jointe.
$message.= "Content-Type: image/jpeg; name="img.jpg"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename="img.jpg"".$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
return email($destinataire, $sujet, $message, $expediteur, $header); */
?>
J'utilise cette class avec ceci :
(utilisation minimale)
<?php
require_once "mail.class.php";
$mail = new sendMail();
$mail->mailFrom('CHAPIT Nicolas', 'nicolas.chapit@saint-gobain.com');
$mail->mailTo('CHAPIT Free', 'kcinfr@gmail.com');
$mail->mailsubject('Test envoi mail');
$mail->mailType("multipart/alternative");
$mail->mailContent("test test test");
$mail->send();
?>
Kcin