Cette section est close pour le moment.
Mais je n'arrête pas la veille, loin de là. Retrouvez mes projets sur Github et sur cette page qui sera à jour plus régulierement


Ressources

Définition de ressource : (nom féminin) Qui peut fournir ce dont on a besoin.
Vous l'aurez compris, sur cette page ce ne sont pas vraiment des tutoriels, c'est plutôt des penses-bêtes plus ou moins fournis mais qui vous permettront d'avoir des bases concernant la programmation.
Recherche par tag

Swiftmailer, une librairie pour envoyer des mails

Swiftmailer, une librairie pour envoyer des mails
Publication : Le 25/11/2012 à 07:20:33

Introduction

Nous avons déjà vu dans une précédente ressource comment envoyer des pièces-jointes par mail. Cette technique est assez simple à mettre en place mais il faut le reconnaitre, il y a mieux.

Ce mieux c'est Swiftmailer, une libraire PHP qui permet de d'envoyer des mails très facilement.

Swiftmailer est utilisé par le framework PHP Symfony, preuve de sa qualité.

Les commandes de base

Il faut commencer par inclure cette librairie dans notre script PHP. Vous le récupérez facilement sur le site officiel de Swiftmailer.

Ensuite il faut créer une instance de Swiftmailer qui aura comme paramètre un mode de transport.

Dans notre cas nous utiliserons le SMTP (vous pouvez utiliser la fonction mail classique ou une sendmail).

Pour passer par le SMTP vous aurez besoin du smtp, du port et des identifiants d'un compte email.

Ensuite on créé l'instance de message.
<?php
 // Librairie
 require_once 'lib/swift_required.php';

 // SMTP
 $smtp_param = Swift_SmtpTransport::newInstance('smtp.nomdedomaine.fr', 587)
 ->setUsername('mail@nomdedomaine.fr')
 ->setPassword('motdepasse_adress_email');

 // Instance Swiftmailer
 $instance_swiftmailer = Swift_Mailer::newInstance($smtp_param);
 
 // Instance message
 $message = Swift_Message::newInstance();
?>
Passons ensuite aux méthodes permettant de paramétrer un mail :

- setSubject(), contient le sujet du mail
- setBody(), contient le message
- setFrom(), setTo(), setCc définissent les adresses mail.
- setPriority(), pour donner une importance au message

Toutes les adresses email (envoi et réception) sont à écrire :
- dans un tableau avec comme clé l'adresse mail et comme valeur le nom.
- dans un tableau, sans clé mais avec comme contenu l'adresse mail
- sous forme de chaine de caractère mais dans ce cas avec une seule adresse.
$message->setSubject(
utf8_encode('Ceci est le sujet SWIFTMAILER'))
->setFrom(array('from@nomdedemaine.fr' => 'Adresse FROM'))
->setTo(array('to@nomdedemaine.fr' => 'Adresse TO'))
->setBody(
 '<html>
 <head></head>
 <body>
 <h1>Test de la librairie SWIFTMAILER</h1>
 Lorem ipsum <em>bla bla bla</em>
 </body>'
, 'text/html')
->setPriority(2);
Si vous souhaitez inclure des documents en pièces-jointes il vous faudra passer par la méthode attach() qui contiendra la class Swift_Attachment.

Vous pourrez inclure l'url du fichier à envoyer et, si vous le souhaitez, changer le nom du document.

Ce qui donnera :
$message->attach(Swift_Attachment::fromPath('file123456789.txt')->setFilename('rapport.txt'))
Pour inclure une image dans votre document il faudra utiliser la méthode embed() qui contiendra une instance de Swift_image :
$message->setBody('Message avec le texte
<img src="' . $message->embed(Swift_Image::fromPath('logo.png')) . '" alt="Logo" />');
Si le client de mail ne lit pas le html ou le bloque vous pouvez écrire un message de substitution avec addPart()
$message->addPart('Ceci est une alternative textuelle au mail, si le client ne lit pas le HTML', 'text/plain');
Il nous reste plus qu'à configurer les dernières informations concernant le header du mail et à l'envoyer :
$type = $message->getHeaders()->get('Content-Type');
$type->setValue('text/html');
$type->setParameter('charset', 'iso-8859-1');

if ($instance_swiftmailer->send($message, $fail)) {
 echo 'Envoyé ';
}else{
 echo 'ERREUR : ';
 print_r($fail);
}

Les plugins pour aller plus loin

Une des forces de Swiftmailer est que l'on peut utiliser facilement des plugins.

Vous trouverez des plugins :

- Dit "antiflood" pour ne pas spammer ou envoyer une quantité trop importante de mail d'un coup.
- De personnalisation de mail où vous n'aurez plus qu'à écrire dans votre mail des variables qui seront remplacées par les données propres au client (nom / prénom / mot de passe par exemple).

Conclusion

Malgré des noms de méthodes un peu 'barbare', la librairie s'impose comme une évidence pour les développeurs qui souhaitent utiliser des scripts légers et fiables.

Sur le même thème

Swiftmailer, une librairie pour envoyer des mails
Publication : Le 25/11/2012 à 07:20:33

Tags

Tags : tutoriel / PHP

Suggestion :

Création d'un bookmarklet simple

Création d'un bookmarklet simple