[php5] - simple classe d'envoi d'email

4/5 (63 avis)

Vue 28 306 fois - Téléchargée 3 387 fois

Description

Bonjour à tous,
voici une petite classe d'envoi d'email réalisée en php5 qui permet l'envoi d'email :
_ simple (un texte)
_ alternative (différentes versions d'un texte (plain et html généralement))
_ mixed simple (un texte et n pièces jointes (avec n > 0))
_ mixed alternative (différentes versions d'un texte avec n pièces jointes)

Il est possible d'avoir un accusé de reception de la lecture de l'email par votre correspondant (si son lecteur d'email le permet) et de gêrer tous les en-têtes de l'email.
Les images dans les body en html sont automatiquement join dans l'email lorsqu'ils sont accessibles par le script et il est possible de compresser des documents à la volée lors de l'ajout du document

Pour information, voici ces en-têtes avec l'explication de chacun :
'XPriority' : Priorité, de 1 à 5, généralement 3
'Sender' : Emetteur, par défaut la même valeur que le champs From
'ReplyTo' : Email de réponse (celui indiqué quand on clique sur Répondre), par défaut la même valeur que le champ From
'ReturnPath' : L'adresse email qui sera informée en cas d'erreur, par défaut la valeur de From
'From' : L'emetteur de l'email
'To' : Tableau de destinataires
'Cc' : Tableau de destinataires en Copie Carbone
'Bcc' : Tableau de destinataires en Copie Carbone Cachée
'DispositionNotificationTo' : Email ou envoyer l'accusé de réception
'XMailer' : Le nom de l'application qui à envoyé l'email
'Organisation' : L'organisation émettrice de l'email
'Date' : La date. Automatiquement mise à la date du moment lors de l'envoi
'MimeVersion' : Version des En-têtes MIME, par défaut 1.0. Mieux vaut laisser cela tel quel
'Subject' : Sujet de l'email

Voici le code :

Source / Exemple :


<?php
require_once ('Email/SimpleMail.php');
require_once ('Compression/GzCompression.php');

try {
	$oEmail = new SimpleMail ();
	$oEmail->From = 'moi@example.org';
	$oEmail->To = array ('friend1@example.org', 'friend2@example.org');
	$oEmail->Bcc = array ('secretFriend@example.org');
	
	$oEmail->Subject = 'Nice Message';
	
	$oEmail->addBody ('This message is a plain text message, very simple !');
	$oEmail->addBody ('This message is in <b>html</b> format message, with some <u>special html tags</u>. You can also automatically add some <img src="image.png" alt="images" />. It\'s very simple !', 'text/html');

	$oEmail->addAttachment ('/var/www/myDoc.pdf', MimeType::get ('pdf')); // Basic file !
	$oEmail->addAttachment ('/var/www/myDoc.pdf', MimeType::get ('tgz'), 'myCompressedDoc.tgz', $oGzCompress); // Compressed File

	$oEmail->send ();

	echo 'You\'re message was sent';
}
catch (Exception $oE) {
	var_dump ($oE);
	echo 'An error occured during sending the message.<br />'.$oE->getMessage ();
}
?>

Conclusion :


La classe lance des exceptions basiques (de la classe Exception). Je l'ai laissé volontairement tel quel afin que vous puissiez modifier les exceptions en fonction de vos besoins et de vos classes disponibles.

Pour ce qui est de la compression, c'est vraiment un système simpliste, juste pour montrer la simplicité de l'implémentation. Vous pouvez ensuite gerer vos propres classes de compression, qui doivent implémenter l'interface iCompression ou modifier le code de la classe SimpleMail avec vos Objects (Classe Abstraite ou Interface, etc)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
snoozer Messages postés 1 Date d'inscription mardi 10 septembre 2013 Statut Membre Dernière intervention 10 septembre 2013
10 sept. 2013 à 15:50
j'ai viré la function chunk_split comme conseillé plus haut.

La fonction qui nous met plein de caractere bizarre : quoted_printable_encode()

dans le construct :
$this->_aProperties['Date'] = date("r");

c'est mieux comme ca, ca retourne le bon fuseau horraire plutot que celui qui est sur -0600 .

dans la fonction send j'ai du rajouter une ligne :
$this->_aProperties['Bodies'] = array();

pour reinitialisé le body

autrement si on veut envoyer 2 mail a la suite dans la meme instance, on récupéré le premier body dans le 2 ieme mail, meme en utilisant addBody (qui est censé le rajouté)

et j'ai pas trop fouiller...
JMarcBoutaud Messages postés 1 Date d'inscription dimanche 5 février 2012 Statut Membre Dernière intervention 5 février 2012
5 févr. 2012 à 10:35
Ca paraît génial de simplicité effectivement, merci beaucoup de mettre à disposition ce très beau travail. Par contre, quand je fais le test avec l'exemple fourni : l'email envoyé va direct dans la boîte "Junk EMail" du destinataire...

Il y a moyen d'éviter ça ?
bentom32390 Messages postés 25 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 21 février 2009
13 janv. 2012 à 20:04
je vient de teste ta source marche bien
mais juste que les lien ne affiche pas comme lien
testabc Messages postés 33 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 23 juillet 2014
15 nov. 2011 à 17:40
Testé sur ovh, ça ne fonctionne pas.
j'ai fais le test sans pièce jointe, le mail part bien, mais n'arrive jamais...

Peut-être une petite mise a jour de codefalse serait la bienvenue...
cink4webmister Messages postés 1 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011
14 janv. 2011 à 13:47
Bonjour,
Cette source est excelente mais je retrouve le même soucis sur les pièces jointes, le fichier est non lisible.
Quelqu'un aurait-il une solution ?
Merci
Afficher les 63 commentaires

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.