Kit de survie : Se lancer avec Sendgrid

Kit de survie : Se lancer avec Sendgrid

L’envoi massif d’emails depuis un projet web est une problématique qui nécessite rapidement d’être externalisée. Les plateformes de routage offrent une puissance et un niveau de délivrabilité importants. Parmi celles-ci, SendGrid se démarque.

Sendgrid est un service d’envoi d’emails largement utilisé par des entreprises renommées comme Pinterest, Spotify ou Uber. Il permet de paramétrer et d’envoyer des emails depuis leur interface web ou à travers des webservices accessibles aux développeurs. Aujourd’hui, nous allons nous concentrer sur cette dernière option. Nous avons développé un service Symfony 2 qui intègre la plupart des fonctionnalités offertes par l’API de Sendgrid.

Pourquoi choisir Sendgrid ?

Avantages :

  • Sendgrid est un acteur connu dans le domaine de l’envoi d’emails, avec plus de 180 000 clients et 14 milliards d’envois mensuels.
  • Il offre une délivrabilité élevée, une plateforme évolutive et des emails fiables.
  • Il décharge les ressources des serveurs de votre site en externalisant les traitements.

Inconvénients :

  • La gestion des templates d’email est peu flexible. Il est par exemple impossible de gérer correctement les images à l’intérieur.
  • Certaines implémentations de fonctionnalités sont mal expliquées malgré une documentation complète.
  • Le service manque d’articles et de tutoriels à son sujet.

Mise en place de l’API

Sendgrid a été utilisé dans le cadre d’un projet web Symfony 2. Vous pouvez donc utiliser Composer pour installer l’API proposée par Sendgrid via Github. Cette bibliothèque permet d’instancier un objet mail en HTML ou en texte brut et de l’envoyer aux destinataires. Il est également possible d’utiliser des substitutions, c’est-à-dire d’avoir une ou plusieurs 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.

À lire aussi  Syndicat national de l’édition

L’utilisation de l’API fournie est très simple. Voici un exemple de code :

$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 SendGridEmail();

    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, cette API ne permet que le routage des emails. Les fonctionnalités de reporting ou de création d’utilisateurs ne sont pas présentes. Je recommande donc de développer un service Symfony 2 (ou autre) pour les implémenter et faciliter l’utilisation du service. La documentation de Sendgrid propose plusieurs fonctions que vous pourrez utiliser : ajout de sous-utilisateurs, ajout de templates, récupération des statistiques globales ou par utilisateur.

La gestion des templates peut poser certains problèmes en fonction de votre utilisation. Si vous souhaitez réaliser des emailings très graphiques avec des images, je vous conseille de les stocker sur votre propre serveur et d’injecter les données textuelles lors de la phase de routage. Les images seront ainsi hébergées par vos soins, ce qui peut avoir un impact sur votre infrastructure serveur en cas d’envois massifs. L’utilisation d’un CDN peut résoudre ce problème.

N’oubliez pas de réaliser une inscription complète au service pour vos sous-utilisateurs (utilisateurs qui ont la capacité d’envoyer des emails). Sans un compte valide, il vous sera impossible d’envoyer des emails. Tous les champs doivent être remplis et valides, avec une adresse IP associée. Je recommande donc d’associer l’adresse IP et le sous-utilisateur au moment de sa création.

À lire aussi  Meilleur comparateur assurance prêt immobilier : Comment bien choisir ?

Voici un exemple de 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 sous-utilisateur. (Impossible d'envoyer des emails sans cela)
    return $this->associateIpToSubuser($subuser['username']);
}

Sendgrid recommande de ne pas réaliser plus de 1000 envois par appel à la fonction send depuis son API.

Conclusion

Si cette solution vous intéresse, n’hésitez plus et testez-la. Vous avez le droit à 200 envois quotidiens gratuits pour tester le service. La documentation est complète et il est rapide de réaliser un premier script de routage au sein de votre application web.