Vous souhaitez envoyer un email avec PHP et vous ne savez pas comment faire ? Vous avez peut-être utilisé la fonction mail de PHP mais vous trouvez ça peu pratique à utiliser ?
En suivant cet article, vous allez pouvoir envoyer des mails simplement, en utilisant SwiftMailer.
Voyons comment envoyer un email avec SwiftMailer.
Commencer par installer la dépendance :
composer require swiftmailer/swiftmailer
Créons un fichier PHP avec le contenu suivant :
<?php
echo 'Envoi de mail avec Swift Mailer';
Ajoutons le code fourni par la documentation de Swift Mailer dans notre fichier :
<?php
require_once './vendor/autoload.php';
// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.example.org', 25))
->setUsername('your username')
->setPassword('your password')
;
// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);
// Create a message
$message = (new Swift_Message('Wonderful Subject'))
->setFrom(['john@doe.com' => 'John Doe'])
->setTo(['receiver@domain.org', 'other@domain.org' => 'A name'])
->setBody('Here is the message itself')
;
// Send the message
$result = $mailer->send($message);
Ici rien de compliqué, on fait appel à l'autoload de Composer. Le reste étant chargé de configurer notre envoi d'email.
Juste avant de mettre notre propre configuration, créons un nouveau fichier qui va contenir notre configuration, pour éviter de noyer des données dans le code.
Pour cela, je vais ici utiliser des constantes, mais libre à vous de faire comme vous le souhaitez.
Voici notre fichier de configuration :
<?php
const EMAIL_HOST = 'smtp.gmail.com';
const EMAIL_PORT = 587;
const EMAIL_USERNAME = 'votre email';
const EMAIL_PASSWORD = 'votre mot de passe';
const EMAIL_ENCRYPTION = 'tls';
Modifions maintenant notre fichier original pour y ajouter notre configuration.
<?php
require './vendor/autoload.php';
require './dev.php'; //Don't forget to add your configuration file
echo 'Envoi de mail avec Swift Mailer';
$transport = (new Swift_SmtpTransport(EMAIL_HOST, EMAIL_PORT))
->setUsername(EMAIL_USERNAME)
->setPassword(EMAIL_PASSWORD)
->setEncryption(EMAIL_ENCRYPTION) //For Gmail
;
// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);
// Create a message
$message = (new Swift_Message('Wonderful Subject'))
->setFrom(['john@doe.com' => 'John Doe'])
->setTo(['receiver@domain.org', 'other@domain.org' => 'A name'])
->setBody('Here is the message itself')
;
// Send the message
$result = $mailer->send($message);
Renseignons maintenant quelques donnés concernant le contenu du message, comme ici :
<?php
require './vendor/autoload.php';
require './dev.php'; //Don't forget to add your configuration file
echo 'Envoi de mail avec Swift Mailer';
$subject = 'Mon premier email avec Swift Mailer';
$fromEmail = 'toto@toto.com';
$fromUser = 'Toto';
$body = '<!DOCTYPE html>
<html>
<head>
<title>Mon premier mail</title>
</head>
<body>
<h1>Hello SwiftMailer</h1>
</body>
</html>';
$transport = (new Swift_SmtpTransport(EMAIL_HOST, EMAIL_PORT))
->setUsername(EMAIL_USERNAME)
->setPassword(EMAIL_PASSWORD)
->setEncryption(EMAIL_ENCRYPTION) //For Gmail
;
// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);
// Create a message
$message = (new Swift_Message($subject))
->setFrom([$fromEmail => $fromUser])
->setTo([EMAIL_USERNAME])
->setBody($body)
;
// Send the message
$result = $mailer->send($message);
Si vous essayez d'accéder à votre page web, vous devriez avoir un message vous indiquant :
Envoi de mail avec Swift Mailer
Ouvrez votre boîte mail, vous devriez avoir un nouveau petit courrier 😊
Si vous ouvrez l'email reçu 😱
Si, il peut le faire, à nous de lui dire :
<?php
require './vendor/autoload.php';
require './dev.php'; //Don't forget to add your configuration file
echo 'Envoi de mail avec Swift Mailer';
$subject = 'Mon premier email avec Swift Mailer';
$fromEmail = 'toto@toto.com';
$fromUser = 'Toto';
$body = '<!DOCTYPE html>
<html>
<head>
<title>Mon premier mail</title>
</head>
<body>
<h1>Hello SwiftMailer</h1>
</body>
</html>';
$transport = (new Swift_SmtpTransport(EMAIL_HOST, EMAIL_PORT))
->setUsername(EMAIL_USERNAME)
->setPassword(EMAIL_PASSWORD)
->setEncryption(EMAIL_ENCRYPTION) //For Gmail
;
// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);
// Create a message
$message = (new Swift_Message($subject))
->setFrom([$fromEmail => $fromUser])
->setTo([EMAIL_USERNAME])
->setBody($body, 'text/html')
;
// Send the message
$result = $mailer->send($message);
Réessayez d'envoyer un email, et le tour est joué.
Je n'ai pas mis les informations qui concernent la personne qui envoie l'email, comme ici l'email, l'utilisateur...
De manière générale, ces données sont récupérées par un formulaire, et vous savez ensuite comment les gérer.
Si vous rencontrez des problèmes avec le SSL, je vous invite à ajouter les lignes suivantes avant tout appel à la classe Swift_SmtpTransport :
$https['ssl']['verify_peer'] = FALSE;
$https['ssl']['verify_peer_name'] = FALSE;
Pour ceux qui n'utilisent pas le SMTP, je vous invite à regarder la documentation de SwiftMailer pour que l'envoi d'email fonctionne.
Allez spammer à tout va 😝
Ajouté le : 24/01/2019 par Karim
Suggestion d'articles et de cours dans les mêmes catégories que "Envoyer un mail avec Swift Mailer" :