L'agence
WanadevStudio
Kit de survie : Premiers pas avec Sendgrid
L'envoi en masse d'emails depuis un projet web est une problématique qui demande très rapidement d'être externalisée. Les plateformes de routage offrent une puissance et un niveau de délivrabilité importante, parmi celle-ci, SendGrid.
Sendgrid est un service d'envoi d'emails utilisé par de nombreuses entreprises telles que Pinterest, Spotify ou Uber. Il est aussi possible de paramétrer et d'envoyer un emailing depuis leur interface web, ou depuis des webservices accessibles aux développeurs tiers. C'est sur cette partie que nous allons nous pencher aujourd'hui. Nous avons développé un service Symfony 2 qui implémente une grande partie des fonctionnalités proposées par l'api de Sendgrid.
Pourquoi utiliser Sendgrid ?
Avantages :
- Sendgrid est un acteur connu pour l'envoi d'emails, avec plus de 180 000 clients et 14 milliards d'envois mensuelle;
- Délivrabilité augmentée, évolutivité de la plateforme et fiabilité des mails;
- Ne consomme pas les ressources des serveurs de votre site en déportant les traitements.
Inconvénients :
- La gestion des templates d'email est peu flexible. Il est par exemple impossible de gérer convenablement les images dans ceux-ci;
- Certaines implémentations de fonctionnalités sont mal expliquées malgré une documentation complète;
- Le service manque d'articles ainsi que de tutoriaux à son sujet.
Mise en place de l'API
Sendgrid a été utilisé au sein d'un projet projet web Symfony 2. Vous pouvez donc passer par composer pour installer l'api proposé par Sendgrid via github. Cette librairie offre la possibilité d'instancier un objet mail en HTML ou en plain text et de l'envoyer aux destinataires. On peut aussi utiliser des substitutions, c'est-à-dire avoir une ou des variables qui seront modifiées en fonction du destinataire. Cette fonctionnalité de l'outil est très intéressante, notamment pour l'envoi d'emails personnalisés par utilisateur.
L'utilisation de l'api fourni est très simple :
$this->sendgrid = new SendGrid($this->username, $this->password, array("turn_off_ssl_verification" => true)); public function sendMailHtml(array $mailAddress, $from, $subject, $body, $templateId=null, array $substitutions=null) { $email = new SendGrid\Email(); for ($i = 0; $i < sizeof($mailAddress); $i++) { $email->addTo($mailAddress[$i]); } if ($substitutions != null) { for ($j = 0; $j < sizeof($substitutions); $j++) { $email->addSubstitution($substitutions[$j]['key'], $substitutions[$j]['values']); } } $email->setFrom($from)->setSubject($subject)->setHtml($body); if ($templateId != null) { $email->addFilter('templates', 'enable', 1); $email->addFilter('templates', 'template_id', $templateId); } return $this->sendgrid->send($email); }
Malheureusement cet api n'implémente que le routage des emails, les fonctionnalités de reporting ou de création d’utilisateur ne sont pas présents. Je préconise donc de développer un service Symfony 2 (ou autre) pour les implémenter et faciliter l'utilisation du service. Avec la documentation de Sendgrid, voici quelques fonctions que vous pourrez utiliser :
- ajout de sous-utilisateurs;
- ajout des templates;
- récupération des statistiques globales ou par utilisateurs.
La partie de gestion des templates peut poser certains problèmes en fonction de l'utilisation que vous en aurez. Si vous souhaitez réaliser des emailings très graphique avec des images, je vous conseil de les stocker sur votre propre serveur et d"injecter les données texte lors de la phase de routage. Les images seront donc hébergées par vos soins, ce qui pourra sur des envois massifs avoir des impacts sur votre infrastructure serveur. L'utilisation d'un CDN peut pallier ce problème.
Pensez à réaliser une inscription complète au service pour vos sous-utilisateurs (utilisateur qui ont la capacité à envoyer des emails). Sans un compte valide, il vous sera impossible d'envoyer. Tous les champs doivent être remplis et valides avec une adresse IP associée. Je préconise donc de réaliser l'association adresse IP et sous-utilisateur au moment de sa création.
Voici donc un exemple du code pour la création d'un sous-utilisateur et son activation IP.
public function createSubUser(array $subuser) { $postFields = array( 'api_user' => $this->username, 'api_key' => $this->password ); $postFields2 = array_merge($postFields, $subuser); $link= "https://api.sendgrid.com/apiv2/customer.add.json"; $this->curlPost($link, $postFields2); // Appel de la fonction associateIpToSubuser() pour associer l'ip du compte au subuser. (Impossibilité d'envoyer d'email sans cela) return $this->associateIpToSubuser($subuser['username']); }
Sendgrid dans la documentation conseille de ne pas réaliser plus de 1000 envois par appel de la fonction send depuis son api.
Conclusion
Si cette solution vous intéresse, n’hésitez plus et testez là. Vous avez le droit à 200 envois journaliers avec un compte gratuit pour tester le service. La documentation est importante et il est rapide de réaliser un premier script de routage au sein de votre application web.
Corentin Baur
Commentaires
Il n'y a actuellement aucun commentaire. Soyez le premier !