wiki:WikiStart

Wamailer

Présentation

Qu’est-ce que Wamailer ? Une librairie composée de plusieurs classes écrites en PHP et permettant de générer et envoyer des emails.
Wamailer respecte du mieux possible les différentes RFC décrivant la syntaxe des emails.
Wamailer est distribué sous licence LGPL.

Fonctionnalités

  • Support des emails HTML et multi-formats (texte et HTML)
  • Destinataires multiples directs, en CC ou BCC
  • Support des attachements de fichiers
  • Support des images embarquées (applicable aussi bien à d’autres types de fichier)
  • Support des encodages de transfert 8bit, quoted-printable, base64 et binary
  • Support d’Unicode (avec l’UTF-8 seulement)
  • Ajout et modification d’entêtes d’email
  • Reformatage des messages sur la limite de 78 caractères par ligne (word wrap)
  • Support SMTP basique
  • Support des appels systèmes à Sendmail ou compatible
  • Support expérimental d’OpenPGP/MIME (voir la page OpenPgp)
  • Fonctionne également sur les hébergements Online (fonction email() spécifique)
  • Fonctionnel sur toutes plateformes

La version 4.0 est en cours de stabilisation. Cette version apporte :

  • Compatibilité avec PHP 8
  • Espaces de noms
  • un système de transports de mails extensible
  • Support des signatures DKIM
  • Utilisation de composer
  • Un autoloader (wamailer.php)
  • Support de TLS pour les connexions SMTP
  • Champ X-Mailer modifiable
  • Ajout de plusieurs méthodes sur la classe Email (hasRecipients(), clearRecipients(), removeTextBody(), removeHTMLBody(), removeAttachments(), ...)
  • Mode keepalive pour les envois par SMTP
  • Support des méthodes d'authentification CRAM-MD5 et PLAIN (SMTP)
  • Support du pipelining (SMTP)
  • Le jeu de caractères par défaut est UTF-8

Exemples

<?php
require 'mailer.class.php';

$email = new Email();
$email->addRecipient("bobe <my@address.tld>");
$email->setSubject("Ici, le sujet");
$email->setTextBody("Ici, le message");

Mailer::send($email);
?>

Un autre exemple avec cette fois un message en HTML et un fichier joint:

<?php
require 'mailer.class.php';

$message = "<p>Ici, le <strong>message en HTML</strong>!</p>

<p>Une image&nbsp;:</p>
<img src='http://example.org/path/to/image.png' alt='my text'>
<p>Ciao!</p>";

$email = new Email();
$email->setFrom('one@example.org', 'Aurélien');
$email->addRecipient('my@address.tld', 'bobe');
$email->setSubject("Ici, le sujet");
$email->setHTMLBody($message);
$email->attach('/path/to/file');

Mailer::send($email);
?>

Vous pouvez constater que la méthode addRecipient() peut s’utiliser de deux façons différentes (idem pour les méthodes setFrom() et setReplyTo()). Soit en passant une chaîne valide selon la RFC2822, soit en passant le nom de personnalisation en deuxième argument. Notez que ce nom doit être encodé d’une certaine manière s’il contient certains caractères ascii réservés, ou des caractères non ascii. Cela est fait automatiquement seulement si le nom est passé en deuxième argument de la méthode addRecipient().

Le même exemple, mais en attachant une image que nous allons utiliser dans le code HTML (image embarquée):

<?php
require 'mailer.class.php';

$message = "<p>Ici, le <strong>message en HTML</strong>!</p>

<p>Une image&nbsp;:</p>
<img src='cid:myimage.png' alt='my text'>
<p>Ciao!</p>";

$email = new Email();
$email->setFrom('one@example.org', 'Aurélien');
$email->addRecipient('my@address.tld', 'bobe');
$email->setSubject("Ici, le sujet");
$email->setHTMLBody($message);
$email->attach('/path/to/file.png', 'myimage.png');

Mailer::send($email);
?>

Comme vous le voyez, il suffit d’utiliser le nom de l’image dans la balise <img/> avec le scheme spécial 'cid' (voir la RFC 2111).

Enfin, voici un exemple d’envoi en boucle (utilisation typique d’envoi d’une lettre d’information):

<?php
// $addressList contient un tableau d'adresses destinataires

require 'mailer.class.php';

$message = "Ici, le message!";

$email = new Email();
$email->setFrom('one@example.org', 'Aurélien');
$email->setSubject("Ici, le sujet");
$email->setTextBody($message);

foreach( $addressList as $address ) {
    $email->headers->remove('To');
    $email->addRecipient($address);
    Mailer::send($email);
}

?>

[D’autres exemples ou une page 'exemple' à venir]

Liste des choses à faire

À la date du 30 avril 2016, voici la liste des choses restant à faire:

  • Une documentation sommaire
  • Chargement d’un email avec la méthode Email::load(), pouvoir parser complètement l’email ?
  • Revoir la classe SecureMail (OpenPGP)
  • Ajouter le support pour S/MIME

Dépôt Git et Téléchargement

Le code source de Wamailer a migré de Subversion vers Git et un dépôt public a été ajouté sur Github.com à cette adresse : https://github.com/wascripts/wamailer Pour récupérer le code actuel en développement, indiquez la commande suivante :

git clone https://github.com/wascripts/wamailer.git

N’hésitez pas à tester tout cela et à me faire parvenir vos remarques!

Bobe

Liens

Last modified 3 years ago Last modified on Jan 25, 2021, 9:05:29 PM