Classe php permettant d'envoyer un mail à partir d'un texte html au format mime.

Soyez le premier à donner votre avis sur cette source.

Vue 12 846 fois - Téléchargée 1 185 fois

Description

  • Classe permet de créer un message (mail)
  • à partir d'un fichier HTML et respectant les standards MIME.
  • Cette classe est largement inspirée des exemples fournit par Richard Heyes, après
  • correction de quelques erreurs et simplifications.
  • Le logiciel peut remplacer chacune des urls des images cités dans le source HTML
  • par un segment image associé au message. Ceci permet d'associer dans le corps du
  • message les images utilisées par celui-ci. En effet, si ces images ne sont pas
  • disponibles sur un serveur HTTP, ou si les connexions Internet ne sont pas ouvertes
  • alors les images ne pourront pas être affichées.
  • On peut également ajouter des pièces jointes.
  • Exemple (1) de mise en oeuvre :
  • -----------------------------------
  • $myMail = new html_mime_mail(); //Instanciation de la classe
  • $myMail->add_header('Reply-To: "Daniel Touzeau" <dtouzeau@wanadoo.fr>'); //Ajout d'un header spécial
  • //Définition des images à remplacer
  • $myMail->add_html_image('../images/ASM_top.gif', 'images/ASM_top.gif', 'ASM_top', 'image/gif');
  • $myMail->add_html_image('../images/Book.jpg', 'images/Book.jpg', 'Book', 'image/jpeg');
  • //Ajout du code HTML à rechercher dans un fichier (du serveur HTTP)
  • $myMail->add_file_html('../test_envoi_mail.html');
  • $myMail->add_attachment('../statistiques.xls', 'Fichier_Statistiques.xls');//Ajout d'une pièce jointe
  • $myMail->build_message(); //Demander à construire le message au format MIME
  • $myMail->send("daniel", "dtouzeau@asmtennis.net",
  • "daniel du tennis", "dtouzeau@wanadoo.fr",
  • "test avec test_envoi_mail et pieces jointes");
  • Exemple (2) avec utilisation du mode auto
  • -----------------------------------
  • $myMail = new html_mime_mail(); //Instanciation de la classe
  • $myMail->add_header('Reply-To: "Daniel Touzeau" <dtouzeau@wanadoo.fr>'); //Ajout d'un header spécial
  • $myMail->add_file_html('../test_envoi_mail.html'); //---------A placer AVANT add_auto_images ---
  • $myMail->add_auto_images('http://www.monsite.fr/application_1'); //URL Absolue du repertoire en cours
  • $myMail->add_attachment('../statistiques.xls', 'Fichier_Statistiques.xls');//Ajout d'une pièce jointe
  • $myMail->build_message(); //Demander à construire le message au format MIME
  • $myMail->send("daniel", "dtouzeau@asmtennis.net",
  • "daniel du tennis", "dtouzeau@wanadoo.fr",
  • "test avec test_envoi_mail et pieces jointes");
  • -----------------------------------
  • Exemple (3) de l'envoi de plusieurs mails avec des paramètres variables inclus dans le corps du HTML sous
  • la forme $paramXX
  • -----------------------------------
  • $body = file_get_contents("message_init.html"); //Corps du message contenant des $paramXX
  • $myMail= new html_mime_mail('');
  • Boucle d'accès à une base de données avec récupération des valeurs des paramètres
  • begin{
  • .....
  • ....
  • $body = replace_value("\$paramXX, $texte_param); //Remplacement de(s) valeur(s)
  • $myMail->add_html($body, '');
  • $myMail->add_auto_images('http://www.monsite.fr/application_1');
  • $myMail->build_message(); //Demander à construire le message au format MIME
  • $myMail->send("daniel", "dtouzeau@asmtennis.net",
  • "daniel du tennis", "dtouzeau@wanadoo.fr",
  • "test avec test_envoi_mails et pieces jointes");
  • fin de boucle
  • }
  • Copyright Daniel Touzeau. Librement utilisable.
  • /

Source / Exemple :


Source fournit avec documentation PHP dans fichier ZIP

Attention utilisatin de PHP5 !!!!

Conclusion :


Testé avec Outlook, incredimail, thunderbird

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

FhX
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3 -
$myMail->add_html_image('../images/ASM_top.gif', 'images/ASM_top.gif', 'ASM_top', 'image/gif');

Ta classe aurait du permettre le fait de reconnaitre le format d'une image en fonction de son extension. Ca évite de le préciser en argument.

Après c'est pareil, tes 2 arguments dans add_html_image ne servent à rien, ce sont les mêmes à peu de choses près. Un peu de traitement en PHP (genre un substr()) aurait permis d'éviter ca.

Maintenant, j'attaque la classe en elle même :
"Sans argument => créer un $headers vide
* Si argument string> découpage du string
"public function html_mime_mail($headers = ''){"
Pas la peine de faire ca... autant faire quelque chose dans le genre :
public function __construct( $headers = NULL ) {
if ( !isset($headers) ) return; // Et encore, je trouve ca pas super bien codé, mais bon.

" if(is_string($headers)) {
$headers = explode("\r\n", trim($headers));
}
foreach($headers as $val) {
if(is_array($val)) {
foreach($val as $subval) {
if(!empty($subval) && is_string($subval)){
$this->headers[] = $subval;
}
}
}else {
$this->headers = $headers;
}
}
" Ca aussi, mal codé ce truc :
if ( is_array($headers) ) {
foreach ($headers as $key=>$val) {
if ( is_string($val) !empty($val) ) $this->headers[] = $val;
}
} else {
$this->headers = explode("\r\n", trim($headers));
}

La suite :
" public function set_body($text = ''){
if(is_string($text)){
" Condition ne servant à rien ici, tu déclare $text comme étant une chaine vide :o
public function set_body( string $text ) {
$this->body = $text;
}

Je ne parle pas de add_header() qui est une méthode un peu trop fouilli à mon gout !

" if(strtolower(substr($file, -4, 4))=='.gif' && $c_type=='application/octet-stream')
$c_type='image/gif';
if(strtolower(substr($file, -4, 4))=='.jpg' && $c_type=='application/octet-stream')
$c_type='image/jpeg';
" La c'est pareil, un peu de rangement ne fait pas de mal :p
if ( $c_type === 'application/octet-stream ) {
$file = strtolower(substr($file, -4,4));
if ( $file === '.gif' ) {
$c_type = 'image/gif';
} elseif ( $file === '.jpg' ) {
$c_type = 'image/jpg';
}
}

J'ai pas eu le temps de voir plus loin les méthodes privées, mais voici ce que je pense de celle qui sont public !
franc666
Messages postés
3
Date d'inscription
mercredi 26 novembre 2003
Statut
Membre
Dernière intervention
26 janvier 2006
-
Moi je dis :

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/soluceq/www/news/newsletter/class_html_mime_mail_V1.php on line 132
cs_Dharius
Messages postés
1
Date d'inscription
mercredi 5 janvier 2005
Statut
Membre
Dernière intervention
28 février 2008
-
Domamge pas compatible avec Gmail ou Hotmail par exemple qui ne sont pas des clienst MIME....

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.