Accueil > > > CLASS E-MAIL
CLASS E-MAIL
Information sur la source
Description
Une classe email qui permet de lire un email (avec pièces jointes) et d'envoyer un email (avec pièces jointes).
Source
- <?php
- /**
- * Gestion d'un email : afficher, envoyer.
- *
- * <p>Cette classe permet de manipuler un email. Elle fonctionne avec un flux imap que l'on peut gérer avec une autre class</p>
- *
- * @name Email
- * @author generationweb <greg@generationweb.be>
- * @http://www.generationweb.be
- * @copyright generationweb.be 2008
- * @version 1.0.0
- */
- class Email {
-
- /*~*~*~*~*~*~*~*~*~*~*/
- /* 1. propriétés */
- /*~*~*~*~*~*~*~*~*~*~*/
-
- /**
- * @var resource
- * @desc flux imap vers une boîte mail
- */
- private $rFlux = null;
-
- /**
- * @var String
- * @desc Sujet de l'email
- */
- private $sujet = "";
-
- /**
- * @var String
- * @desc Expéditeur de l'email
- */
- private $de = "";
-
- /**
- * @var String
- * @desc Destinataire de l'email
- */
- private $a = "";
-
- /**
- * @var Date
- * @desc Date d'envoi de l'email
- */
- private $dateEnvoi = 0;
-
- /**
- * @var Array
- * @desc liste des adresses des destinataires
- */
- private $sendTo = array();
-
- /**
- * @var String
- * @desc Séparateur entre l'entête et le corps de l'email
- */
- private $boundary = "";
-
- /**
- * @var String
- * @desc Entête de l'email
- */
- private $entete = "";
-
- /**
- * @var String
- * @desc Contenu de l'email
- */
- private $message = "";
-
- /**
- * @var String
- * @desc les pièces jointes de l'email
- */
- private $attachement = "";
-
- /**
- * @var Array
- * @desc liste des pièces jointes (une pièces jointes étant un tableau)
- */
- private $pieceJointe = array();
-
-
- /*~*~*~*~*~*~*~*~*~*~*/
- /* 1.1 accesseurs */
- /*~*~*~*~*~*~*~*~*~*~*/
-
- function getSujet() {return $this->sujet;} // renvoi le sujet
- function getA() {return $this->a;} // renvoi le destinataire
- function getDe() {return $this->de;} // renvoi l'expéditeur
- function getMessage() {return $this->message;} // renvoi le message
- function getDateEnvoi() {return $this->dateEnvoi;} // renvoi la date d'envoi
- function getPieceJointe() {return $this->pieceJointe;} // renvoi un tableau de pièces jointes
-
-
- /*~*~*~*~*~*~*~*~*~*~*/
- /* 1.2 "seteurs" */
- /*~*~*~*~*~*~*~*~*~*~*/
- //Set le sujet à la classe Email
- function Subject( $subject ) {
- $this->sujet = strtr( $subject, "\r\n" , " " );
- }
-
- // Set le message à la classe Email
- function Body( $body ) {
- $entete_message = "\nContent-Type: text/html; Charset=iso-8859-1\n";
- $entete_message .= "Content-Transfert-Encoding: 8bit\n\n";
- $this->message = $entete_message . chunk_split($body) . "\n--".$this->boundary;
- }
-
- //Set le from à la classe Email
- function From( $from ) {
- if( ! is_string($from) ) {
- echo "Class Mail: error, From is not a string";
- exit;
- }
- $this->de= $from;
- }
-
- //Add un destinataire au tableau a de la classe Email
- function To( $a ) {
- if( is_array( $a ) )
- $this->sendTo= $a;
- else
- $this->sendTo[] = $a;
- }
-
-
-
- /*~*~*~*~*~*~*~*~*~*~*/
- /* 2. méthodes */
- /*~*~*~*~*~*~*~*~*~*~*/
-
- /**
- * Constructeur
- *
- * <p>création de l'instance de la classe</p>
- *
- * @name Nom de la classe::__construct()
- * @return void
- */
- function __construct () {
- //la frontière
- $this->boundary = "b" . md5(uniqid(time()));
- }
-
-
- /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
- /* 2.1 méthodes privées */
- /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
-
- /**
- * @name _make_headers
- * Construit l'entête du mail
- *
- *
- * @return void.
- */
- private function _make_headers()
- {
- // creation du header mail
- $this->entete= "From: ".$this->de."\n";
- $this->a= implode( ", ", $this->sendTo );
- }
-
- /**
- * @name _make_attachement
- * Construit les pièces jointes du mail
- *
- *
- * @return void.
- */
- function _make_attachement() {
- // les entêtes pour dire que c'est un message mutipart
- $this->entete .= "MIME-Version: 1.0\n";
- $this->entete .= "Content-Type: multipart/mixed; boundary = ".$this->boundary."\n\n";
- $this->entete .= "This is a MIME encoded message.\n\n--".$this->boundary;
-
- // for each attached file, do...
- $this->attachment = "";
- $iLengthPieceJointe = sizeof( $this->pieceJointe);
- for( $i=0; $i < $iLengthPieceJointe; $i++ ) {
- $filename = "" . $this->pieceJointe[$i]['nom'];
-
- if( ! file_exists( $filename) ) {
- echo "Class Email, method attach : file $filename can't be found"; exit;
- }
-
- //lecture du fichier
- $fp = fopen($filename, "r");
- $content_file = "";
- while ($data = fread($fp, 4096) )
- $content_file .= $data;
-
- //encodage en base 64 et mise en forme (ligne de 75 caractères)
- $le_fichier = chunk_split(base64_encode($content_file));
-
- //on ajout les entêtes du fichier
- $entete_fichier = "\nContent-Type: application/octet-stream; ";
- $entete_fichier .= "name =\"".basename($this->pieceJointe[$i]['nom'])."\"\n";
- $entete_fichier .= "Content-Transfer-Encoding: base64\n";
- $entete_fichier .= "Content-Disposition:" . $this->pieceJointe[$i]['dispo'] . "\n\n";
-
-
- $le_fichier = $entete_fichier.$le_fichier."\n--".$this->boundary; // avec la frontière
-
- $this->attachement .= $le_fichier;
-
- //suppression des fichiers
- Unlink($this->pieceJointe[$i]['nom']);
- }
- }
-
- /**
- * @name trouverNom
- * trouve le nom du fichier en pièce jointe
- *
- *
- * @return string.
- */
- private function trouverNom($aParam) {
- $nomFichier = "";
- $iParamSize = sizeof($aParam);
- for ($i=0;$i<$iParamSize;$i++)
- {
- if ( ($aParam[$i]->attribute == "filename") || ($aParam[$i]->attribute =="name") )
- $nomFichier = $aParam[$i]->value;
- }
- return $nomFichier;
- }
-
- /**
- * @name decoder
- * decode le texte en 1 paramètre suivant l'encodage passé en second paramètre
- *
- *
- * @return string.
- */
- private function decoder( $sTexte, $iEncodage) {
- switch ($iEncodage)
- {
- case 4:
- $ret = imap_qprint($sTexte);
- break;
- case 3:
- $ret = imap_base64($sTexte);
- break;
- default:
- $ret = $sTexte;
- break;
- }
- return $ret;
- }
-
- /**
- * @name BodyToArray
- * Mets les parties du message dans un tableau à 2 entrée contenant : 1 le texte - 2 un tableau avec les pièces jointes
- *
- *
- * @return array.
- */
- private function BodyToArray( $id_msg, $num_partie, $partie, $niveau, $alternative=0 ) {
- //tableau contenant les informations
- static $retour = Array('message' => '' );
-
- //si la partie contient des infomrations sru la disposition
- //et que la chaine indique "attachment", alors nous avons
- //affaire à une pièce jointe
- if ( $partie->ifdisposition && strtolower($partie->disposition) == "attachment" )
- {
- //on récupère le nom et quelques infos
- //qu'on ajoute au tableau de résultats.
- //on suppose la fonction trouverNom qui parourt
- //le tableau parameters jusqu'à trouver le paramètre
- //name, et en retourner la valeur
- if ($partie->ifdparameters) {
- $fichier = array( 'nom' => $this->trouverNom($partie->dparameters),
- 'numero_partie' => $num_partie,
- 'encodage' => $partie->encoding,
- 'taille' => $partie->bytes);
- }
- if ($partie->ifparameters) {
- $fichier = array( 'nom' => $this->trouverNom($partie->parameters),
- 'numero_partie' => $num_partie,
- 'encodage' => $partie->encoding,
- 'taille' => $partie->bytes);
- }
- $retour['fichiers'][] = $fichier;
- }
- else
- {
- switch ($partie->type )
- {
- case TYPETEXT: // si c'est du texte
- if ( $alternative) // et que c'est un texte avec une alternative
- {
- if ($this->sMailFormat == $partie->subtype) // on fait un test du format à afficher
- {
- $texte = imap_fetchbody( $this->rFlux, $id_msg, $num_partie);
- $retour['message'] = "".nl2br($this->decoder($texte,$partie->encoding))."";
- }
- }
- else // si c'est pas alternatif, on affiche
- {
- //if( !empty($partie->parts) )
- //if ($niveau !=0)
- if ($num_partie<>0)
- {
- // on lit le texte à la partie qui nous interesse.
- $texte = imap_fetchbody( $this->rFlux, $id_msg, $num_partie);
- $retour['message'] = "".$this->decoder($texte,$partie->encoding)."";
- }
- else
- {
- if ($partie->subtype == 'PLAIN') // on lit le texte PLAIN
- {
- $texte = imap_body( $this->rFlux, $id_msg);
- $retour['message'] = "".nl2br($this->decoder($texte,$partie->encoding))."";
- }
- else if($partie->subtype == 'HTML') // on le texte HTML
- {
- $texte = imap_body( $this->rFlux, $id_msg);
- $retour['message'] = "".$this->decoder($texte,$partie->encoding)."";
- }
- }
- }
- break;
-
- case TYPEMULTIPART:// si c'est pas du texte alors on se rappelle
- if ($partie->subtype == "ALTERNATIVE")
- {
- $alternative = 1;
- }
- //on lit chaque sous parts.
- for ( $i=0;$i<count($partie->parts); $i++)
- {
- if ($niveau != 0 )
- {
- $pos = strrpos($num_partie, ".");
- if ($pos === false) { // si on trouve pas de point, on en ajoute un sinon pas : pas de double point
- $num_partie = $num_partie.".";
- }
- }
- else {
- $num_partie = "";
- }
- $this->BodyToArray($id_msg, $num_partie.($i + 1), $partie->parts[$i], 1, $alternative);
- }
- break;
- /*case TYPEMESSAGE:
- case TYPEAPPLICATION:
- case TYPEAUDIO:
- case TYPEIMAGE:
- case TYPEVIDEO:
- case TYPEMODEL:*/
- default:
- if ($partie->ifdparameters) {
- $fichier = array( 'nom' => $this->trouverNom($partie->dparameters),
- 'numero_partie' => $num_partie,
- 'encodage' => $partie->encoding,
- 'taille' => $partie->bytes);
- }
- if ($partie->ifparameters) {
- $fichier = array( 'nom' => $this->trouverNom($partie->parameters),
- 'numero_partie' => $num_partie,
- 'encodage' => $partie->encoding,
- 'taille' => $partie->bytes);
- }
- $retour['fichiers'][] = $fichier;
- break;
- }
- }
- return $retour;
- }
-
-
- /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
- /* 2.1 méthodes publiques */
- /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
-
- /**
- * @name Attach
- * Attache une pièce jointe à l'email
- *
- * @paramString : nom du fichier joint
- * @paramString : type du fichier joint
- * @paramString : disposition du fichier joint (attachment | inline)
- *
- * @return Boolean : Vrai.
- */
- public function Attach( $filename, $filetype='application/x-unknown-content-type', $disposition = "attachment" )
- {
- $piece['nom'] = $filename;
- $piece['type'] = $filetype;
- $piece['dispo'] = $disposition;
- $this->pieceJointe[] = $piece;
- return true;
- }
-
- /**
- * @name Send
- * Envoi l'email aux destinataires
- *
- *
- * @return void.
- */
- public function Send()
- {
- // build th headers
- $this->_make_headers();
- $body = "";
-
- // include attached files
- if( sizeof( $this->pieceJointe > 0 ) ) {
- $this->_make_attachement();
- $body .= $this->entete . $this->message . $this->attachement."--\n";
- }
- else {
- $body .= $this->entete . $this->message . "--\n";
- }
-
- // envoie du mail aux destinataires principal
- for( $i=0; $i< sizeof($this->sendTo); $i++ ) {
- $res = imap_mail($this->sendTo[$i], $this->sujet, '', $body);
- }
- }
-
- /**
- * @name Read
- * Lit le contenu d'un email et assignation à la class
- *
- * @paramRessource : flux imap vers la boîte de l'email
- * @paramNumeric : numéro séquentiel de l'email dans la boîte
- *
- * @return Boolean : Vrai.
- */
- public function Read($rFlux, $id_msg=0) {
- $this->rFlux = $rFlux;
- //lecture des entêtes de l'email
- $entetes = imap_headerinfo($rFlux, $id_msg);
-
- // affectation
- $this->sujet = utf8_decode(imap_utf8($entetes->subject)); // sujet
- $this->de = htmlentities(utf8_decode(imap_utf8($entetes->fromaddress)));// adresse de l'expéditeur
- $this->a = htmlentities(utf8_decode(imap_utf8($entetes->toaddress))); // adresse du destinataire
- $this->dateEnvoi = strftime("%A, %d %B %Y à %H:%M:%S", $entetes->udate);// date d'envoi
-
- //récupération de la structure du mail
- $struct = imap_fetchstructure($rFlux,$id_msg);
- $email = $this->BodyToArray($id_msg, 0, $struct, 0);
-
- // mise en forme des liens se trouvant dans le contenu
- $body = $email['message'];
- $start_link = 0;
- $start_link = strpos($body, "http://");
- $stop_link = 0;
- if ($start_link > 0 && $start_link >100) {
- // si on trouve mais pas au début du mail (http://www.w3c.org ...)
- $aFinLink = array('<',')','>',' ');
- $iLengthBody = (strlen($body)-1);
- for ($i=$start_link; !in_array($body{$i}, $aFinLink) && ($i<$iLengthBody);$i++) {
- $stop_link = $i;
- if ($i == strlen($body)-2) {
- $stop_link = $i+1;
- }
- }
- $adresse = substr($body, $start_link, ($stop_link-$start_link) + 1 );
- $link = "<a href=\"".$adresse."\">".$adresse."</a>";
- $body = str_replace($adresse, $link, $body);
- }
- $this->message = stripslashes($body); // message
-
- //pièces jointes
- if (isset($email['fichiers']) ) {
- $this->pieceJointe = $email['fichiers']; // tableau des pièces jointes
- }
- }
- }
-
- ?>
<?php
/**
* Gestion d'un email : afficher, envoyer.
*
* <p>Cette classe permet de manipuler un email. Elle fonctionne avec un flux imap que l'on peut gérer avec une autre class</p>
*
* @name Email
* @author generationweb <greg@generationweb.be>
* @http://www.generationweb.be
* @copyright generationweb.be 2008
* @version 1.0.0
*/
class Email {
/*~*~*~*~*~*~*~*~*~*~*/
/* 1. propriétés */
/*~*~*~*~*~*~*~*~*~*~*/
/**
* @var resource
* @desc flux imap vers une boîte mail
*/
private $rFlux = null;
/**
* @var String
* @desc Sujet de l'email
*/
private $sujet = "";
/**
* @var String
* @desc Expéditeur de l'email
*/
private $de = "";
/**
* @var String
* @desc Destinataire de l'email
*/
private $a = "";
/**
* @var Date
* @desc Date d'envoi de l'email
*/
private $dateEnvoi = 0;
/**
* @var Array
* @desc liste des adresses des destinataires
*/
private $sendTo = array();
/**
* @var String
* @desc Séparateur entre l'entête et le corps de l'email
*/
private $boundary = "";
/**
* @var String
* @desc Entête de l'email
*/
private $entete = "";
/**
* @var String
* @desc Contenu de l'email
*/
private $message = "";
/**
* @var String
* @desc les pièces jointes de l'email
*/
private $attachement = "";
/**
* @var Array
* @desc liste des pièces jointes (une pièces jointes étant un tableau)
*/
private $pieceJointe = array();
/*~*~*~*~*~*~*~*~*~*~*/
/* 1.1 accesseurs */
/*~*~*~*~*~*~*~*~*~*~*/
function getSujet() {return $this->sujet;} // renvoi le sujet
function getA() {return $this->a;} // renvoi le destinataire
function getDe() {return $this->de;} // renvoi l'expéditeur
function getMessage() {return $this->message;} // renvoi le message
function getDateEnvoi() {return $this->dateEnvoi;} // renvoi la date d'envoi
function getPieceJointe() {return $this->pieceJointe;} // renvoi un tableau de pièces jointes
/*~*~*~*~*~*~*~*~*~*~*/
/* 1.2 "seteurs" */
/*~*~*~*~*~*~*~*~*~*~*/
//Set le sujet à la classe Email
function Subject( $subject ) {
$this->sujet = strtr( $subject, "\r\n" , " " );
}
// Set le message à la classe Email
function Body( $body ) {
$entete_message = "\nContent-Type: text/html; Charset=iso-8859-1\n";
$entete_message .= "Content-Transfert-Encoding: 8bit\n\n";
$this->message = $entete_message . chunk_split($body) . "\n--".$this->boundary;
}
//Set le from à la classe Email
function From( $from ) {
if( ! is_string($from) ) {
echo "Class Mail: error, From is not a string";
exit;
}
$this->de= $from;
}
//Add un destinataire au tableau a de la classe Email
function To( $a ) {
if( is_array( $a ) )
$this->sendTo= $a;
else
$this->sendTo[] = $a;
}
/*~*~*~*~*~*~*~*~*~*~*/
/* 2. méthodes */
/*~*~*~*~*~*~*~*~*~*~*/
/**
* Constructeur
*
* <p>création de l'instance de la classe</p>
*
* @name Nom de la classe::__construct()
* @return void
*/
function __construct () {
//la frontière
$this->boundary = "b" . md5(uniqid(time()));
}
/*~*~*~*~*~*~*~*~*~*~*~*~*~*/
/* 2.1 méthodes privées */
/*~*~*~*~*~*~*~*~*~*~*~*~*~*/
/**
* @name _make_headers
* Construit l'entête du mail
*
*
* @return void.
*/
private function _make_headers()
{
// creation du header mail
$this->entete= "From: ".$this->de."\n";
$this->a= implode( ", ", $this->sendTo );
}
/**
* @name _make_attachement
* Construit les pièces jointes du mail
*
*
* @return void.
*/
function _make_attachement() {
// les entêtes pour dire que c'est un message mutipart
$this->entete .= "MIME-Version: 1.0\n";
$this->entete .= "Content-Type: multipart/mixed; boundary = ".$this->boundary."\n\n";
$this->entete .= "This is a MIME encoded message.\n\n--".$this->boundary;
// for each attached file, do...
$this->attachment = "";
$iLengthPieceJointe = sizeof( $this->pieceJointe);
for( $i=0; $i < $iLengthPieceJointe; $i++ ) {
$filename = "" . $this->pieceJointe[$i]['nom'];
if( ! file_exists( $filename) ) {
echo "Class Email, method attach : file $filename can't be found"; exit;
}
//lecture du fichier
$fp = fopen($filename, "r");
$content_file = "";
while ($data = fread($fp, 4096) )
$content_file .= $data;
//encodage en base 64 et mise en forme (ligne de 75 caractères)
$le_fichier = chunk_split(base64_encode($content_file));
//on ajout les entêtes du fichier
$entete_fichier = "\nContent-Type: application/octet-stream; ";
$entete_fichier .= "name =\"".basename($this->pieceJointe[$i]['nom'])."\"\n";
$entete_fichier .= "Content-Transfer-Encoding: base64\n";
$entete_fichier .= "Content-Disposition:" . $this->pieceJointe[$i]['dispo'] . "\n\n";
$le_fichier = $entete_fichier.$le_fichier."\n--".$this->boundary; // avec la frontière
$this->attachement .= $le_fichier;
//suppression des fichiers
Unlink($this->pieceJointe[$i]['nom']);
}
}
/**
* @name trouverNom
* trouve le nom du fichier en pièce jointe
*
*
* @return string.
*/
private function trouverNom($aParam) {
$nomFichier = "";
$iParamSize = sizeof($aParam);
for ($i=0;$i<$iParamSize;$i++)
{
if ( ($aParam[$i]->attribute == "filename") || ($aParam[$i]->attribute =="name") )
$nomFichier = $aParam[$i]->value;
}
return $nomFichier;
}
/**
* @name decoder
* decode le texte en 1 paramètre suivant l'encodage passé en second paramètre
*
*
* @return string.
*/
private function decoder( $sTexte, $iEncodage) {
switch ($iEncodage)
{
case 4:
$ret = imap_qprint($sTexte);
break;
case 3:
$ret = imap_base64($sTexte);
break;
default:
$ret = $sTexte;
break;
}
return $ret;
}
/**
* @name BodyToArray
* Mets les parties du message dans un tableau à 2 entrée contenant : 1 le texte - 2 un tableau avec les pièces jointes
*
*
* @return array.
*/
private function BodyToArray( $id_msg, $num_partie, $partie, $niveau, $alternative=0 ) {
//tableau contenant les informations
static $retour = Array('message' => '' );
//si la partie contient des infomrations sru la disposition
//et que la chaine indique "attachment", alors nous avons
//affaire à une pièce jointe
if ( $partie->ifdisposition && strtolower($partie->disposition) == "attachment" )
{
//on récupère le nom et quelques infos
//qu'on ajoute au tableau de résultats.
//on suppose la fonction trouverNom qui parourt
//le tableau parameters jusqu'à trouver le paramètre
//name, et en retourner la valeur
if ($partie->ifdparameters) {
$fichier = array( 'nom' => $this->trouverNom($partie->dparameters),
'numero_partie' => $num_partie,
'encodage' => $partie->encoding,
'taille' => $partie->bytes);
}
if ($partie->ifparameters) {
$fichier = array( 'nom' => $this->trouverNom($partie->parameters),
'numero_partie' => $num_partie,
'encodage' => $partie->encoding,
'taille' => $partie->bytes);
}
$retour['fichiers'][] = $fichier;
}
else
{
switch ($partie->type )
{
case TYPETEXT: // si c'est du texte
if ( $alternative) // et que c'est un texte avec une alternative
{
if ($this->sMailFormat == $partie->subtype) // on fait un test du format à afficher
{
$texte = imap_fetchbody( $this->rFlux, $id_msg, $num_partie);
$retour['message'] = "".nl2br($this->decoder($texte,$partie->encoding))."";
}
}
else // si c'est pas alternatif, on affiche
{
//if( !empty($partie->parts) )
//if ($niveau !=0)
if ($num_partie<>0)
{
// on lit le texte à la partie qui nous interesse.
$texte = imap_fetchbody( $this->rFlux, $id_msg, $num_partie);
$retour['message'] = "".$this->decoder($texte,$partie->encoding)."";
}
else
{
if ($partie->subtype == 'PLAIN') // on lit le texte PLAIN
{
$texte = imap_body( $this->rFlux, $id_msg);
$retour['message'] = "".nl2br($this->decoder($texte,$partie->encoding))."";
}
else if($partie->subtype == 'HTML') // on le texte HTML
{
$texte = imap_body( $this->rFlux, $id_msg);
$retour['message'] = "".$this->decoder($texte,$partie->encoding)."";
}
}
}
break;
case TYPEMULTIPART:// si c'est pas du texte alors on se rappelle
if ($partie->subtype == "ALTERNATIVE")
{
$alternative = 1;
}
//on lit chaque sous parts.
for ( $i=0;$i<count($partie->parts); $i++)
{
if ($niveau != 0 )
{
$pos = strrpos($num_partie, ".");
if ($pos === false) { // si on trouve pas de point, on en ajoute un sinon pas : pas de double point
$num_partie = $num_partie.".";
}
}
else {
$num_partie = "";
}
$this->BodyToArray($id_msg, $num_partie.($i + 1), $partie->parts[$i], 1, $alternative);
}
break;
/*case TYPEMESSAGE:
case TYPEAPPLICATION:
case TYPEAUDIO:
case TYPEIMAGE:
case TYPEVIDEO:
case TYPEMODEL:*/
default:
if ($partie->ifdparameters) {
$fichier = array( 'nom' => $this->trouverNom($partie->dparameters),
'numero_partie' => $num_partie,
'encodage' => $partie->encoding,
'taille' => $partie->bytes);
}
if ($partie->ifparameters) {
$fichier = array( 'nom' => $this->trouverNom($partie->parameters),
'numero_partie' => $num_partie,
'encodage' => $partie->encoding,
'taille' => $partie->bytes);
}
$retour['fichiers'][] = $fichier;
break;
}
}
return $retour;
}
/*~*~*~*~*~*~*~*~*~*~*~*~*~*/
/* 2.1 méthodes publiques */
/*~*~*~*~*~*~*~*~*~*~*~*~*~*/
/**
* @name Attach
* Attache une pièce jointe à l'email
*
* @paramString : nom du fichier joint
* @paramString : type du fichier joint
* @paramString : disposition du fichier joint (attachment | inline)
*
* @return Boolean : Vrai.
*/
public function Attach( $filename, $filetype='application/x-unknown-content-type', $disposition = "attachment" )
{
$piece['nom'] = $filename;
$piece['type'] = $filetype;
$piece['dispo'] = $disposition;
$this->pieceJointe[] = $piece;
return true;
}
/**
* @name Send
* Envoi l'email aux destinataires
*
*
* @return void.
*/
public function Send()
{
// build th headers
$this->_make_headers();
$body = "";
// include attached files
if( sizeof( $this->pieceJointe > 0 ) ) {
$this->_make_attachement();
$body .= $this->entete . $this->message . $this->attachement."--\n";
}
else {
$body .= $this->entete . $this->message . "--\n";
}
// envoie du mail aux destinataires principal
for( $i=0; $i< sizeof($this->sendTo); $i++ ) {
$res = imap_mail($this->sendTo[$i], $this->sujet, '', $body);
}
}
/**
* @name Read
* Lit le contenu d'un email et assignation à la class
*
* @paramRessource : flux imap vers la boîte de l'email
* @paramNumeric : numéro séquentiel de l'email dans la boîte
*
* @return Boolean : Vrai.
*/
public function Read($rFlux, $id_msg=0) {
$this->rFlux = $rFlux;
//lecture des entêtes de l'email
$entetes = imap_headerinfo($rFlux, $id_msg);
// affectation
$this->sujet = utf8_decode(imap_utf8($entetes->subject)); // sujet
$this->de = htmlentities(utf8_decode(imap_utf8($entetes->fromaddress)));// adresse de l'expéditeur
$this->a = htmlentities(utf8_decode(imap_utf8($entetes->toaddress))); // adresse du destinataire
$this->dateEnvoi = strftime("%A, %d %B %Y à %H:%M:%S", $entetes->udate);// date d'envoi
//récupération de la structure du mail
$struct = imap_fetchstructure($rFlux,$id_msg);
$email = $this->BodyToArray($id_msg, 0, $struct, 0);
// mise en forme des liens se trouvant dans le contenu
$body = $email['message'];
$start_link = 0;
$start_link = strpos($body, "http://");
$stop_link = 0;
if ($start_link > 0 && $start_link >100) {
// si on trouve mais pas au début du mail (http://www.w3c.org ...)
$aFinLink = array('<',')','>',' ');
$iLengthBody = (strlen($body)-1);
for ($i=$start_link; !in_array($body{$i}, $aFinLink) && ($i<$iLengthBody);$i++) {
$stop_link = $i;
if ($i == strlen($body)-2) {
$stop_link = $i+1;
}
}
$adresse = substr($body, $start_link, ($stop_link-$start_link) + 1 );
$link = "<a href=\"".$adresse."\">".$adresse."</a>";
$body = str_replace($adresse, $link, $body);
}
$this->message = stripslashes($body); // message
//pièces jointes
if (isset($email['fichiers']) ) {
$this->pieceJointe = $email['fichiers']; // tableau des pièces jointes
}
}
}
?>
Conclusion
Des critiques?
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Envoie d'email [ par Zibou ]
Bonjour,Je voudrai savoir si c'est possible d'envoyer des emails au format HTML en incluent c'est image dans le courierMerci
Inscription et email d'acitvation [ par Elyianha ]
Allo! en gros la, je crée un jeux online multiplayer..Je dois savoir comment, lors de l'inscription, une clé d'activation (un simple link a cliker) es
VOUS VOULEZ DE L'AIDE? J'AI DES RÉPONSES [ par SmallToad ]
Bonjour,Depuis quelque temps, je n'ai pas beaucoup d'email de fan qui me demande des questions sur le MySQL ou sur le PHP. C'est pourquoi que j'ai mis
Test sur présence d'un pseudo dans une base [ par Masterfight ]
Est-ce que j'ai bon ?Sachant que je passe $pseudo et $email.if ($ecrirecookie == "inscrire"){ $table="membres"; $query = "SELECT * from matable where
Récupération d'une partie d'adresse email ? [ par Joez ]
je veux recupérer ce k'il y a avant l'@ dans une adresse email, en php, comment faire ?
Problème de compatibilité de script [ par Chris54 ]
Bonjour,J'ai un problème d'execution d'un script javascript sous netscape alors qu'il fonctionne parfaitement sous IE mais je ne sais pas pourquoi.Que
EMail [ par BSide ]
Bonjour,je construis dynamiquement en PHP un tableau avec des données provenant d'une base Mysql.Parmi ces données se trouve un champ concernant l'ema
Envoyer des coordonnees au membres [ par apz ]
salut,je suis sur multimania.comment envoyer, par mail, au membres de mon site, leurs coordonnées (Login & Mot de passe) dans leurs boites email respe
probleme de classe en php [ par Elkaire ]
Donc voila mon probleme!!dans une premiere page je rensegne les insances de mon objet. Une fois renseigné je peux réutiliser les instances cet objet d
Parametre de ma classe connexion et connexion/deconnexion [ par sebos63 ]
Bonjour, 1. J'ai une classe de connexion et je souhaiterais savoir où il est judicieux de spécifier les paramètres d'une connexion. (Dans mon construc
|
Derniers Blogs
MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|