Envoyer des emails en PHP avec Symfony Mailer

Dans cet article, nous allons explorer la bibliothèque Symfony Mailer, qui vous permet d’envoyer des e-mails à partir d’applications PHP. En commençant par l’installation et la configuration, nous allons passer par un exemple concret qui démontre les différents aspects de l’envoi d’e-mails en utilisant la bibliothèque Symfony Mailer.

Qu’est-ce que Symfony Mailer ?

Quand il s’agit d’envoyer des e-mails dans des applications PHP, vous avez une pléthore d’options à choisir. Vous pourriez même finir par créer votre propre wrapper pour mettre en place rapidement les fonctionnalités de messagerie. Cependant, vous avez toujours de la chance si vous utilisez une bibliothèque bien maintenue et riche en fonctionnalités.

Symfony Mailer est une bibliothèque populaire pour l’envoi d’e-mails à partir d’applications PHP, et elle est largement acceptée par la communauté PHP. C’est une bibliothèque riche en fonctionnalités dans le sens où elle couvre presque tous les aspects de l’envoi d’e-mails, de la configuration de différents transports à la personnalisation du message envoyé. De plus, si vous avez entendu parler de la bibliothèque Swift Mailer, c’est le prédécesseur de la bibliothèque Symfony Mailer – Symfony Mailer est la nouvelle version améliorée.

En fait, l’envoi d’e-mails à l’aide de la bibliothèque Symfony Mailer est un processus assez simple.

  • initialiser l’objet transport (SMTP ou sendmail)
  • initialiser l’objet mailer avec ce transport
  • initialiser l’objet email
  • formater et envoyer le message

Dans la section suivante, nous allons examiner un exemple concret pour démontrer chacune des étapes susmentionnées.

Installation et configuration

Dans cette section, je vais vous montrer comment installer et configurer la bibliothèque Symfony Mailer. L’installation est assez simple, car elle est déjà disponible sous forme de package Composer. Avant de continuer, assurez-vous que vous avez installé Composer car nous en aurons besoin pour installer la bibliothèque Symfony Mailer.

Une fois que vous avez installé Composer, récupérez la bibliothèque Symfony Mailer en utilisant la commande suivante.

composer require symfony/mailer

Avec cela, la bibliothèque Symfony Mailer devrait être installée, ainsi que les dépendances nécessaires dans le répertoire vendor. Et le contenu du composer.json nouvellement créé devrait ressembler à ceci :

{
    "require": {
        "symfony/mailer": "^5.4"
    }
}

Voilà pour l’installation, mais comment l’utiliser ? Il s’agit simplement d’inclure le fichier autoload.php créé par Composer dans votre application, comme le montre l’extrait suivant.

<?php
require_once './vendor/autoload.php';
  
// your application code...
?>

2. Le code pour l’envoi d’email

Nous avons vu comment installer la bibliothèque Symfony Mailer à l’aide de Composer. Maintenant, nous allons commencer à mettre en œuvre un exemple concret.

Allez-y et créez le fichier email.php avec le contenu suivant.

<?php
require_once './vendor/autoload.php';
 
use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mime\Email;
 
// Create a Transport object
$transport = Transport::fromDsn('smtp://username:password@hostname:port');
 
// Create a Mailer object
$mailer = new Mailer($transport); 
 
// Create an Email object
$email = (new Email());
 
// Set the "From address"
$email->from('sender@example.test');
 
// Set the "From address"
$email->to('recepient@example.test');
 
// Set a "subject"
$email->subject('Demo message using the Symfony Mailer library.');
 
// Set the plain-text "Body"
$email->text('This is the plain text body of the message.\nThanks,\nAdmin');
 
// Set HTML "Body"
$email->html('This is the HTML version of the message.<br>Example of inline image:<br><img src="cid:nature" width="200" height="200"><br>Thanks,<br>Admin');
 
// Add an "Attachment"
$email->attachFromPath('/path/to/example.txt');
 
// Add an "Image"
$email->embed(fopen('/path/to/mailor.jpg', 'r'), 'nature');
 
// Send the message
$mailer->send($email);

Étape 1 : Initialiser Symfony Mailer

La bibliothèque Symfony Mailer supporte différents transports comme SMTP et Sendmail lors de l’envoi d’un email. Donc la première chose que vous devez faire est d’initialiser l’objet Transport.

Dans l’exemple ci-dessus, j’ai utilisé le transport SMTP pour envoyer des emails.

$transport = Transport::fromDsn('smtp://sajal@aum.bz:aumaspl123@smtp.gmail.com:587');

Bien entendu, si vous souhaitez utiliser le protocole Sendmail, vous devrez initialiser l’objet SendmailTransport correspondant.

$transport = new SendmailTransport();

Une fois le transport créé, nous devons initialiser un objet Mailer et lui passer le transport que nous avons déjà créé.

$mailer = new Mailer($transport);

Étape 2 : Créez un message

Après avoir créé les objets transport et mailer, il ne reste plus qu’à instancier l’objet Email et à le décorer avec les attributs nécessaires.

$email = (new Email());

Maintenant, nous allons utiliser l’objet $email pour préparer le contenu de notre message. Pour commencer, la méthode setSubject permet de définir le sujet de l’e-mail.

$email->setSubject('Demo message using the Symfony Mailer library.');

La méthode from est utilisée pour définir l’adresse « From » de l’e-mail.

$email->from('sender@example.test');

Continuons, définissons l’adresse « To » de l’email.

$email->to('recepient@example.test');

Étape 3 : joindre des fichiers

Voyons maintenant comment vous pouvez joindre un fichier à un courriel.

Vous pouvez utiliser la méthode attachFromPath pour joindre un fichier. Il est recommandé d’utiliser le chemin absolu du fichier pour s’assurer que le fichier est disponible en toutes circonstances.

$email->attachFromPath('/home/sajal/project/ajaydave/training-project/symfonymailer/example.txt');

Outre les pièces jointes classiques, vous souhaitez parfois intégrer des images dans le texte du message. Pour ce faire, vous pouvez utiliser la méthode embed, comme le montre l’extrait suivant. La méthode embed vous permet de joindre l’ID unique de l’objet incorporé, que vous pouvez utiliser plus tard dans le message lorsque vous faites référence à l’image via la propriété src.

Étape 4 : Créer le corps du message

Ensuite, définissons le corps du message en utilisant la méthode textuelle.

	
$email->text('This is an important message!');

Si vous souhaitez définir la version HTML du message, vous pouvez utiliser la méthode html, comme le montre l’extrait suivant. Comme vous pouvez le voir, nous utilisons cid pour faire référence à l’image que nous avons intégrée précédemment.

$email->html('This is the HTML version of the message.<br>Example of inline image:<br><img src="cid:nature" width="200" height="200"><br>Thanks,<br>Admin');

Étape 5 : Envoyer le message !

Enfin, nous allons utiliser la méthode d’envoi de l’objet Mailer pour envoyer le courriel.

$mailer->send($email);

Essayez d’exécuter le script, et vous devriez recevoir un email