Envoi de mail avec BowPHP
Introduction​
Envoyer des emails dans une application est monnaie courante. BowPHP intègre un système d'envoi d'email facile à utiliser. Vous pouvez utiliser ce système à travers plusieurs pilotes communément appelés drivers :
- smtp — Envoi direct via un serveur SMTP
- ses — Envoi via Amazon SES
- mail — Utilise la fonction
mail()native de PHP - log — Écrit le mail dans les logs (pratique en développement)
Configuration​
Vous trouverez la configuration dans le fichier config/mail.php qui est relativement simple. Les options sont toutes commentées.
Installez le package aws/aws-sdk-php si vous voulez utiliser ses comme driver de mail.
composer require aws/aws-sdk-php
Changer de driver à l'exécution​
use Bow\Mail\Mail;
Mail::setDriver('log'); // bascule tous les envois sur le log
Mail::setDriver('smtp'); // retour au driver configuré
Utilisation​
Pour utiliser le service, appelez la classe Bow\Mail\Mail. Elle expose les
méthodes statiques suivantes :
| Méthode | Usage |
|---|---|
send($view, $data, $cb) | Envoie un email basé sur une vue |
raw($to, $subject, $message, $headers = []) | Envoie un texte brut |
queue($view, $data, $cb) | Met l'envoi en file d'attente |
queueOn($queue, $view, $data, $cb) | File d'attente nommée |
later($delay, $view, $data, $cb) | Envoi différé (en secondes) |
laterOn($delay, $queue, $view, $data, $cb) | Différé sur file nommée |
setDriver($driver) | Bascule de driver à la volée |
La méthode send​
send permet d'envoyer des emails basés sur une vue.
Prototype​
Mail::send(string $view, array|callable $data, ?callable $cb = null): bool
| Paramètre | Type | Description |
|---|---|---|
$view | string | Le nom de la vue Ă utiliser |
$data | array ou callable | Données passées à la vue. Si vous l'omettez et passez le constructeur directement en 2e argument, c'est aussi valable. |
$cb | ?callable | Constructeur de l'enveloppe (voir Envelop ci-dessous) |
Le callback reçoit une instance de Bow\Mail\Envelop qui permet d'ajouter le destinataire, l'objet, les pièces jointes, l'expéditeur, etc.
Exemple​
Considérons la vue email-view.tintin.php :
Bonjour {{ $name }},
Nous vous informons que votre compte vient d'être crédité de 100.000.000 F.
Cordialement,
Le code qui envoie le mail :
use Bow\Mail\Mail;
use Bow\Mail\Envelop;
$data = ['name' => 'Franck'];
Mail::send('email-view', $data, function (Envelop $envelop) {
$envelop->to('info@exemple.com');
$envelop->subject('Paiement !');
$envelop->from('info@exemple.com', 'Bow');
});
Forme courte (sans données pour la vue) :
Mail::send('email-view', function (Envelop $envelop) {
$envelop->to('info@exemple.com')
->subject('Bonjour')
->from('info@exemple.com', 'Bow');
});
API de Envelop​
L'objet Bow\Mail\Envelop accumule les destinataires, en-tĂŞtes et le corps
du message. Toutes ses méthodes retournent $this, ce qui permet le chaînage.
Destinataires​
$envelop->to('info@exemple.com'); // un destinataire
$envelop->to(['a@x.com', 'b@x.com']); // plusieurs destinataires
$envelop->addCc('cc@x.com', 'Nom CC');
$envelop->addBcc('bcc@x.com');
$envelop->addReplyTo('reply@x.com');
$envelop->addReturnPath('bounces@x.com');
Les méthodes courtes cc(), bcc(), replyTo(), returnPath() sont des
alias de leurs versions addCc/addBcc/addReplyTo/addReturnPath et ont
la mĂŞme signature.