Envoi d’email avec PHP grâce à Swift Mailer

Auteur(s) de l'article

L’une des tâches les plus rébarbatives dans le développement web, ça doit bien être l’envoi d’email (après la gestion des formulaires, qui pourrait bien faire l’objet d’un futur article).
Certes, il existe la fonction mail() intégrée à PHP, mais celle-ci est très basique et loin d’être pratique. Comment envoyée facilement un mail multi-part ? attacher une pièce jointe ? envoyer le mail à plusieurs destinataire ? etc, etc.
C’est là qu’intervient la librairie Swift Mailer. Cette librairie, entièrement orientée objet, est extrêmement riche en fonctionnalités et est basée sur un système de plugin modulable. Elle a été écrite par Chris Crobyn et est désormais maintenue par Fabien Potencier (lead developer of the symfony framework).
Allez, un peu de code faut mieux qu’un paragraphe:

Création du message

[php gutter="false"]
require_once ‘/path/to/swift-mailer/lib/swift_required.php’;

// create the message
$message = Swift_Message::newInstance();
// hop, on défini le sujet du mail
->setSubject(‘Recherche mangeur de kiri’)
->setFrom(array(‘jean@example.com’ => ‘Jean Bond’))
->setTo(array(‘destinataire1@example.com’))
->setBody(‘Le corps du mail en texte.’, ‘text/plain’)
->addPart("<p>La version HTML.</p>", ‘text/html’)

// Ajout d’une pièce jointe depuis un fichier
->attach(Swift_Attachement::fromPath(‘document.pdf’))
// Ajout d’une pièce jointe crée dynamiquement
->attach(Swift_Attachement::newInstance(
$data, ‘document2.pdf’, ‘application/pdf’
))
;
[/php]

Envoi

[php gutter="false"]
// Création du "moyen de transport"
// (via serveur SMTP, Sendmail ou fonction mail() php)
// Ici, envoi via serveur SMTP
$transport = Swift_SmtpTransport::newInstance(‘smtp.example.com’, 25)
->setUsername(‘user’)
->setPassword(‘PaSswoRd’)
;

$mailer = Swift_Mailer::newInstance($transport);
$result = $mailer->send($message);

if($result)
{
/* … */
}
else
{
/* … */
}
[/php]
Et voilà!
plutôt simple non ?
Et pour finir, je vous invite à lire la doc détaillée de la librairie. Par ailleurs, n'hésitez pas à nous contacter si vous avez des questions spécifiques. 

Références: