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

Soyez le premier à donner votre avis sur cette source.

Vue 27 087 fois - Téléchargée 3 222 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

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

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

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

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

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

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.