Envoi d'e-mails en PHP

Apprenez à envoyer des e-mails avec PHP, des options basiques aux fonctionnalités avancées comme les pièces jointes, les e-mails HTML et la sécurité.

Utilisation de la fonction mail()

PHP dispose d'une fonction native mail() qui permet d'envoyer des e-mails de manière simple. Bien que limitée, elle est utile pour des envois basiques sur des environnements correctement configurés.

Comment fonctionne mail() en interne ?

La fonction mail() s'appuie sur la configuration du serveur web pour envoyer des emails :

  • Sur les systèmes Linux/Unix : utilise généralement le programme sendmail ou compatible
  • Sur Windows : nécessite la configuration d'un serveur SMTP dans le fichier php.ini via les directives SMTP et smtp_port

Cette dépendance à la configuration du serveur explique pourquoi la fonction peut fonctionner en production mais pas sur un environnement de développement local.

Syntaxe de base
// Syntaxe de la fonction mail()
bool mail(
    $to,      // Destinataire(s)
    $subject, // Sujet
    $message, // Corps du message
    $headers, // En-têtes additionnels (optionnel)
    $parameters // Paramètres additionnels (optionnel)
);

Retour : La fonction retourne true si l'email a été accepté pour envoi (ce qui ne garantit pas qu'il sera délivré), ou false en cas d'erreur.

Exemple simple
$to = "destinataire@example.com";
$subject = "Sujet de l'e-mail";
$message = "Voici le contenu de l'e-mail.\n\nCordialement,\nLe site";
$headers = "From: expediteur@example.com";

if(mail($to, $subject, $message, $headers)) {
    echo "E-mail envoyé avec succès";
} else {
    echo "Échec de l'envoi de l'e-mail";
}

Note : Pour que mail() fonctionne, un serveur de messagerie (comme Sendmail) doit être configuré sur votre serveur.

Points importants :

  • Plusieurs destinataires peuvent être spécifiés en les séparant par des virgules
  • Le sujet devrait être encodé pour supporter les caractères spéciaux (avec mb_encode_mimeheader())
  • Le message peut contenir des sauts de ligne (\n)

En-têtes additionnels

Les en-têtes permettent de personnaliser vos e-mails avec des informations supplémentaires comme l'expéditeur, les destinataires en copie, ou le format du contenu.

En-têtes courants
$headers = "From: Mon Site <contact@monsite.com>\r\n";
$headers .= "Reply-To: service@monsite.com\r\n";
$headers .= "Cc: copie@example.com\r\n";
$headers .= "Bcc: copiecachee@example.com\r\n";
$headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";

Important : Utilisez \r\n comme séparateur de ligne pour respecter la spécification RFC des e-mails.

Explication des en-têtes :

  • From : Définit l'expéditeur (peut inclure un nom et une adresse)
  • Reply-To : Adresse utilisée quand le destinataire répond
  • Cc : Destinataires en copie visible
  • Bcc : Destinataires en copie cachée (invisibles pour les autres destinataires)
  • X-Mailer : Information sur le logiciel d'envoi (facultatif)
  • MIME-Version : Version du format MIME utilisé

Envoi d'emails au format HTML

Pour envoyer un email au format HTML avec la fonction mail(), vous devez spécifier le type de contenu dans les en-têtes.

Email HTML simple
$to = "destinataire@example.com";
$subject = "Email au format HTML";

// Corps du message au format HTML
$message = "
<html>
<head>
    <title>Email HTML</title>
</head>
<body>
    <h1 style='color: #4CAF50;'>Bonjour!</h1>
    <p>Ceci est un <strong>email HTML</strong> envoyé depuis PHP.</p>
    <p><a href='https://www.example.com'>Visitez notre site</a></p>
</body>
</html>
";

// En-têtes pour spécifier le format HTML
$headers = "From: Mon Site <contact@monsite.com>\r\n";
$headers .= "Reply-To: service@monsite.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

mail($to, $subject, $message, $headers);

Point clé : L'en-tête Content-Type: text/html; charset=UTF-8 est essentiel pour que le client mail interprète correctement le contenu HTML.

Envoi d'emails avec pièces jointes

La fonction mail() ne gère pas nativement les pièces jointes, mais il est possible d'en envoyer en utilisant le format MIME multipart. Cette approche est complexe et sujette aux erreurs, ce qui explique pourquoi des bibliothèques comme PHPMailer sont généralement préférées.

Email avec pièce jointe (méthode manuelle)
// Destinataire et sujet
$to = "destinataire@example.com";
$subject = "Email avec pièce jointe";

// Générer un séparateur de sections unique
$boundary = md5(uniqid(microtime(), true));

// En-têtes pour l'email multipart
$headers = "From: expediteur@example.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $boundary . "\"\r\n";

// Préparer la pièce jointe
$fichier = "document.pdf"; // Chemin vers le fichier
$contenuFichier = file_get_contents($fichier);
$contenuFichier = chunk_split(base64_encode($contenuFichier));
$nomFichier = basename($fichier);

// Corps de l'email avec plusieurs parties
$message = "--" . $boundary . "\r\n";
$message .= "Content-Type: text/plain; charset=UTF-8\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$message .= "Voici votre document en pièce jointe.\r\n\r\n";

// Ajouter la pièce jointe
$message .= "--" . $boundary . "\r\n";
$message .= "Content-Type: application/pdf; name=\"" . $nomFichier . "\"\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n";
$message .= "Content-Disposition: attachment; filename=\"" . $nomFichier . "\"\r\n\r\n";
$message .= $contenuFichier . "\r\n\r\n";
$message .= "--" . $boundary . "--";

mail($to, $subject, $message, $headers);

Explication :

  • Un boundary (séparateur) unique est généré pour délimiter les différentes parties de l'email
  • La pièce jointe est encodée en base64 pour garantir sa transmission
  • Chaque section a son propre Content-Type qui définit son format
  • Le Content-Disposition: attachment indique qu'il s'agit d'une pièce jointe

Note : Cette méthode est complexe et difficile à déboguer, c'est pourquoi les bibliothèques spécialisées sont recommandées.

Limites de la fonction mail()
  • Pas de support natif pour les pièces jointes : requiert une implémentation manuelle du format MIME multipart
  • Configuration complexe pour les e-mails HTML et multipart
  • Gestion limitée des erreurs : difficile d'identifier la cause des échecs d'envoi
  • Dépendance à la configuration serveur : nécessite un serveur SMTP ou sendmail correctement configuré
  • Risque accru de classification comme spam : manque d'authentification avancée (SPF, DKIM, etc.)
  • Pas de file d'attente intégrée : les envois en masse peuvent surcharger le serveur

Pour des fonctionnalités plus avancées et une meilleure délivrabilité, il est fortement recommandé d'utiliser des bibliothèques spécialisées comme PHPMailer ou Symfony Mailer.

Utilisation de PHPMailer

PHPMailer est une bibliothèque PHP populaire et robuste qui résout les limitations de la fonction native mail(). Elle offre des fonctionnalités avancées pour l'envoi d'e-mails, notamment le support SMTP, les pièces jointes et les e-mails HTML.

Pourquoi utiliser PHPMailer ?

PHPMailer est la bibliothèque d'envoi d'emails la plus utilisée dans l'écosystème PHP, et ce pour plusieurs raisons :

  • Compatibilité : Fonctionne avec PHP 5.5 et versions ultérieures
  • Sécurité : Support des connexions sécurisées (TLS/SSL), authentification SMTP
  • Fiabilité : Gestion des erreurs et exceptions détaillées
  • Flexibilité : Compatible avec différents serveurs SMTP (Gmail, Office365, etc.)
  • Fonctionnalités : Pièces jointes, images intégrées, emails HTML/texte, encodages internationaux
  • Communauté active : Plus de 17 000 étoiles sur GitHub et une maintenance continue

Installation via Composer

Installation de PHPMailer
composer require phpmailer/phpmailer

Cette commande va créer ou mettre à jour votre fichier composer.json et installer PHPMailer dans le dossier vendor/. Vous devrez ensuite inclure l'autoloader de Composer dans votre script :

require 'vendor/autoload.php';

Exemple d'envoi d'e-mail avec PHPMailer

Envoi avec SMTP
// Importation des classes nécessaires
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;

// Chargement de l'autoloader
require 'vendor/autoload.php';

// Création d'une instance de PHPMailer
$mail = new PHPMailer(true); // true active les exceptions

try {
    // Configuration du serveur
    $mail->isSMTP();
    $mail->Host       = 'smtp.example.com';
    $mail->SMTPAuth   = true;
    $mail->Username   = 'utilisateur@example.com';
    $mail->Password   = 'motdepasse';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // ou ENCRYPTION_STARTTLS
    $mail->Port       = 465; // ou 587 pour TLS
    
    // Pour le débogage (facultatif)
    $mail->SMTPDebug = SMTP::DEBUG_OFF; // 0 = off, 1 = messages client, 2 = messages client/serveur
    
    // Destinataires
    $mail->setFrom('expediteur@example.com', 'Nom Expéditeur');
    $mail->addAddress('destinataire@example.com', 'Nom Destinataire');
    $mail->addReplyTo('repondre@example.com', 'Service client');
    $mail->addCC('cc@example.com');
    $mail->addBCC('bcc@example.com');
    
    // Contenu
    $mail->isHTML(true);
    $mail->Subject = 'Sujet de l\'e-mail';
    $mail->Body    = 'Contenu de l\'e-mail en HTML';
    $mail->AltBody = 'Contenu de l\'e-mail en texte brut';
    
    $mail->send();
    echo 'E-mail envoyé avec succès';
} catch (Exception $e) {
    echo "Échec de l'envoi. Erreur: {$mail->ErrorInfo}";
}

Avantages de PHPMailer par rapport à mail() :

  • Support complet du protocole SMTP
  • Gestion des authentifications
  • Meilleur débogage et gestion des erreurs
  • Moins susceptible d'être marqué comme spam
Envoi avec pièce jointe
// À ajouter dans le bloc try

// Ajouter une pièce jointe
$mail->addAttachment('/chemin/vers/fichier.pdf', 'nouveau-nom.pdf');

// Ajouter une image intégrée dans le HTML
$mail->addEmbeddedImage('logo.png', 'logo_id');

// Référencer l'image dans le HTML
$mail->Body = '<p>Voici notre logo:</p> 
<img src="cid:logo_id" alt="Logo">
<p>Message suite...</p>';

Utilisation de Symfony Mailer

Symfony Mailer est une bibliothèque moderne et puissante pour l'envoi d'e-mails, créée par l'équipe Symfony. Elle est particulièrement adaptée aux projets Symfony mais parfaitement utilisable dans tout projet PHP indépendant grâce à son architecture découplée.

Avantages de Symfony Mailer

Symfony Mailer se distingue par plusieurs caractéristiques qui en font une excellente alternative à PHPMailer :

  • Architecture moderne : Conçue selon les standards PHP modernes (namespaces, typage strict)
  • API fluide : Interface intuitive pour construire des emails
  • Transports modulaires : Supports pour divers services (SMTP, API Mailgun, SendGrid, etc.)
  • Système de templates : Intégration parfaite avec Twig pour des emails dynamiques
  • File d'attente intégrée : Fonctionne avec Symfony Messenger pour l'envoi asynchrone
  • Rapidité et performances : Optimisée pour les applications à fort trafic
PHPMailer vs Symfony Mailer
Caractéristique PHPMailer Symfony Mailer
Courbe d'apprentissage Plus simple pour débutants Plus avancé, orienté objet
Intégration Universelle Idéale avec Symfony
Performances Bonnes Excellentes
File d'attente Non intégrée Via Symfony Messenger
Documentation Complète, nombreux exemples Excellente mais plus technique

Choisissez PHPMailer pour des projets simples ou si vous êtes débutant. Préférez Symfony Mailer pour les projets d'entreprise ou si vous utilisez déjà l'écosystème Symfony.

Installation via Composer

Installation de Symfony Mailer
composer require symfony/mailer

Pour les transports spécifiques (comme Gmail), installez le package correspondant :

composer require symfony/google-mailer  # Pour Gmail
composer require symfony/amazon-mailer # Pour Amazon SES
composer require symfony/mailgun-mailer # Pour Mailgun
composer require symfony/sendgrid-mailer # Pour SendGrid

Exemple d'envoi avec Symfony Mailer

Envoi d'e-mail basique
require 'vendor/autoload.php';

use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mime\Email;

// Créer le transport
$transport = Transport::fromDsn('smtp://utilisateur:motdepasse@smtp.example.com:465');

// Créer le mailer avec ce transport
$mailer = new Mailer($transport);

// Créer l'e-mail
$email = (new Email())
    ->from('expediteur@example.com')
    ->to('destinataire@example.com')
    ->cc('cc@example.com')
    ->bcc('bcc@example.com')
    ->replyTo('reply@example.com')
    ->subject('Sujet de l\'e-mail')
    ->text('Contenu en texte brut')
    ->html('<p>Contenu en <b>HTML</b></p>');

// Envoyer l'e-mail
try {
    $mailer->send($email);
    echo 'E-mail envoyé avec succès!';
} catch (\Exception $e) {
    echo 'Erreur lors de l\'envoi : ' . $e->getMessage();
}

Explication des éléments clés :

  • La chaîne DSN (Data Source Name) définit la configuration complète du transport
  • L'API fluide (méthode chaînée) permet de configurer l'email de manière intuitive
  • La méthode html() spécifie automatiquement le bon Content-Type
  • La version texte et HTML sont envoyées pour assurer la compatibilité avec tous les clients mail
Configuration des transports
// SMTP standard
$transport = Transport::fromDsn('smtp://user:pass@smtp.example.com:587');

// SMTP avec chiffrement explicite
$transport = Transport::fromDsn('smtp://user:pass@smtp.example.com:587?encryption=tls');

// Gmail (nécessite symfony/google-mailer)
$transport = Transport::fromDsn('gmail://user:app_password@default');

// Amazon SES (nécessite symfony/amazon-mailer)
$transport = Transport::fromDsn('ses://ACCESS_KEY:SECRET_KEY@default?region=eu-west-1');

// Mailgun API (nécessite symfony/mailgun-mailer)
$transport = Transport::fromDsn('mailgun://KEY:DOMAIN@default');

// Serveur SMTP local (pour développement)
$transport = Transport::fromDsn('smtp://localhost:1025'); // Ex: MailHog

// Email envoyé à un fichier de log (pour tests)
$transport = Transport::fromDsn('smtp://null');

La syntaxe DSN de Symfony Mailer permet de configurer facilement différents types de transport sans changer le reste de votre code d'envoi d'emails.

Utilisation avancée avec pièces jointes

Ajout de pièces jointes avec Symfony Mailer
use Symfony\Component\Mime\Part\DataPart;
use Symfony\Component\Mime\Part\File;

// Ajouter un fichier en pièce jointe
$email->addPart(
    new DataPart(
        new File('/chemin/vers/document.pdf'),
        'rapport.pdf',
        'application/pdf'
    )
);

// Ajouter une image intégrée dans le contenu HTML
$imagePath = '/chemin/vers/image.jpg';
$imageData = file_get_contents($imagePath);
$imageBase64 = base64_encode($imageData);
$imageType = mime_content_type($imagePath);

$email->html('
<p>Bonjour,</p>
<p>Voici l\'image intégrée :</p>
<img src="data:' . $imageType . ';base64,' . $imageBase64 . '" alt="Image intégrée" />
<p>Cordialement,</p>
');

Note : Symfony Mailer gère automatiquement les e-mails multipart (HTML + texte), ce qui améliore la compatibilité avec tous les clients de messagerie.

Envoi d'e-mails HTML et bonnes pratiques

Les défis de l'email HTML

Créer des emails HTML qui s'affichent correctement partout est l'un des plus grands défis du développement web pour plusieurs raisons :

  • Moteurs de rendu variés : Chaque client mail (Outlook, Gmail, iOS Mail, etc.) utilise son propre moteur de rendu
  • Support limité des CSS : De nombreuses propriétés CSS modernes sont ignorées
  • Manque de standardisation : Les emails n'ont pas évolué comme le web
  • Suppression des styles : Certains clients ignorent les balises style et les feuilles CSS externes
  • Filtres anti-spam : Les structures complexes peuvent être perçues comme suspectes

Structure d'un e-mail HTML

La création d'e-mails HTML nécessite une approche différente du développement web traditionnel. Pour garantir une compatibilité maximale, il est recommandé de revenir aux bases avec des tableaux pour la mise en page et des styles en ligne.

Structure recommandée d'un e-mail HTML
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Titre de l'e-mail</title>
    <!-- Styles en ligne uniquement, pas de fichiers CSS externes -->
    <style type="text/css">
        body {
            margin: 0;
            padding: 0;
            font-family: Arial, sans-serif;
            font-size: 14px;
            line-height: 1.6;
        }
        .container {
            width: 100%;
            max-width: 600px;
            margin: 0 auto;
        }
        /* Autres styles basiques */
    </style>
</head>
<body>
    <table class="container" border="0" cellpadding="0" cellspacing="0" width="100%">
        <tr>
            <td align="center">                <!-- En-tête de l'e-mail -->
                <table border="0" cellpadding="0" cellspacing="0" width="100%">
                    <tr>
                        <td align="center" style="padding: 20px;">
                            <img src="https://example.com/logo.png" alt="Logo" style="max-width: 200px;">                        </td>
                    </tr>
                </table>
                
                <!-- Contenu principal -->
                <table border="0" cellpadding="0" cellspacing="0" width="100%">
                    <tr>
                        <td style="padding: 20px; background-color: #ffffff;">
                            <h1 style="color: #333333;">Bonjour !</h1>
                            <p>Contenu de votre message...</p>
                            <p><a href="https://example.com" style="background-color: #4CAF50; color: white; padding: 10px 15px; text-decoration: none; border-radius: 4px;">Bouton d'action</a></p>                        </td>
                    </tr>
                </table>
                
                <!-- Pied de page -->
                <table border="0" cellpadding="0" cellspacing="0" width="100%">
                    <tr>
                        <td align="center" style="padding: 20px; font-size: 12px; color: #666;">
                            <p>© 2025 Mon Site. Tous droits réservés.</p>
                            <p>
                                Si vous ne souhaitez plus recevoir nos e-mails, <a href="https://example.com/unsubscribe">cliquez ici pour vous désabonner</a>.                            </p>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
</body>
</html>

Conseils pour les e-mails HTML :

  • Utilisez des tableaux pour la mise en page (et non des divs/flexbox/grid)
  • Appliquez les styles directement aux éléments (inline CSS)
  • Évitez JavaScript (ignoré par la plupart des clients mail)
  • Limitez l'utilisation des CSS modernes
  • Testez sur plusieurs clients de messagerie

Sécurité et bonnes pratiques

Risques de sécurité lors de l'envoi d'e-mails
  • Injection de code : Ne jamais utiliser de données utilisateur non filtrées dans les en-têtes ou le corps de l'email
  • Usurpation d'identité : Configurer SPF, DKIM et DMARC pour authentifier vos emails
  • Exposition de données sensibles : Ne jamais inclure d'informations confidentielles dans les emails (mots de passe, données sensibles)
  • Cross-Site Request Forgery (CSRF) : Protéger les liens dans vos emails avec des tokens uniques
  • Classification comme spam : Suivre les bonnes pratiques d'envoi pour éviter les filtres anti-spam
  • Hameçonnage (phishing) : Éduquer vos utilisateurs sur la façon de reconnaître vos emails légitimes
Protection contre l'injection de code
// MAUVAIS : Données utilisateur non filtrées
$userInput = $_POST['message'];
$headers = "From: " . $_POST['name'] . " <" . $_POST['email'] . ">\r\n";
mail("admin@example.com", "Contact", $userInput, $headers);

// BON : Filtrage et validation des données
$userInput = htmlspecialchars(strip_tags(trim($_POST['message'])));
$name = filter_var(trim($_POST['name']), FILTER_SANITIZE_STRING);
$email = filter_var(trim($_POST['email']), FILTER_VALIDATE_EMAIL);

if ($email === false) {
    die("Email non valide");
}

$headers = "From: " . $name . " <" . $email . ">\r\n";
mail("admin@example.com", "Contact", $userInput, $headers);

Explication : Sans filtrage, les attaquants pourraient injecter des en-têtes supplémentaires comme Bcc: pour envoyer des copies cachées à d'autres destinataires, ou même ajouter des pièces jointes malveillantes.

Bonnes pratiques pour l'envoi d'e-mails
  1. Obtenir le consentement explicite avant d'envoyer des e-mails (conformité RGPD)
  2. Offrir un moyen de se désabonner dans chaque e-mail
  3. Utiliser des adresses d'expédition valides et des domaines vérifiés
  4. Éviter les pièces jointes volumineuses : préférer des liens vers des téléchargements
  5. Vérifier le score spam de vos e-mails (avec des outils comme mail-tester.com)
  6. Configurer les enregistrements DNS appropriés :
    • SPF (Sender Policy Framework) : authentifie les serveurs autorisés à envoyer des e-mails
    • DKIM (DomainKeys Identified Mail) : signe cryptographiquement les e-mails
    • DMARC (Domain-based Message Authentication) : définit la politique en cas d'échec SPF/DKIM
  7. Surveiller les taux de rebond et de plaintes pour améliorer la délivrabilité

Services d'envoi d'e-mails tiers

Pour les projets nécessitant des envois en masse ou une meilleure délivrabilité, envisagez d'utiliser un service d'envoi d'e-mails spécialisé :

Services populaires
  • SendGrid : API robuste, bonne délivrabilité
  • Mailjet : Populaire en Europe, conformité RGPD
  • Amazon SES : Économique pour les grands volumes
  • Mailgun : Excellente API pour les développeurs
  • Brevo (ex-Sendinblue) : Solution complète avec CRM
Exemple avec SendGrid et PHPMailer
use PHPMailer\PHPMailer\PHPMailer;

$mail = new PHPMailer(true);

$mail->isSMTP();
$mail->Host       = 'smtp.sendgrid.net';
$mail->SMTPAuth   = true;
$mail->Username   = 'apikey';  // Utilisateur spécial pour SendGrid
$mail->Password   = 'votre_cle_api_sendgrid';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port       = 587;

Ces services offrent souvent des fonctionnalités supplémentaires comme :

  • Suivi d'ouverture et de clics
  • Gestion des rebonds et désinscriptions
  • Templates d'e-mails
  • Analyses et statistiques

Tests et débogage des emails

L'envoi d'emails est un processus complexe qui implique de nombreux acteurs (votre code, serveur SMTP, filtres anti-spam, client mail). Un bon processus de test est essentiel pour garantir la délivrabilité et l'affichage correct.

Outils de test d'emails
Outil Utilisation Avantages
MailHog Serveur SMTP local pour développement Capture tous les emails en environnement local sans rien envoyer réellement
Mailtrap Boîte de réception de test en ligne Interface web, analyse spam, rendu HTML/texte, outils d'analyse
Litmus / Email on Acid Test de compatibilité client mail Prévisualisations sur différents clients mail et appareils
mail-tester.com Test de délivrabilité Score de spam, vérification SPF/DKIM, conseils d'optimisation
Installation de MailHog pour le développement local

MailHog est un outil idéal pour tester les emails en local sans risquer d'envoyer des messages de test à de vrais destinataires.

  1. Installez MailHog (via Docker ou téléchargement direct)
  2. Configurez votre application pour utiliser SMTP sur localhost:1025
  3. Accédez à l'interface web sur http://localhost:8025
  4. Tous les emails envoyés seront interceptés et affichés dans l'interface

Exemple de configuration PHPMailer avec MailHog :

$mail->isSMTP();
$mail->Host = 'localhost';
$mail->Port = 1025;
$mail->SMTPAuth = false; // Pas d'authentification nécessaire pour MailHog

Conseils pour une meilleure délivrabilité

L'envoi d'emails réussi ne concerne pas seulement le code, mais aussi la configuration et les bonnes pratiques.

Configuration des enregistrements DNS
  • SPF (Sender Policy Framework) : Autorise certains serveurs à envoyer des emails pour votre domaine
    TXT @ "v=spf1 ip4:192.0.2.0/24 include:_spf.example.com ~all"
  • DKIM (DomainKeys Identified Mail) : Signe numériquement les emails
    TXT mail._domainkey "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA..."
  • DMARC (Domain-based Message Authentication) : Définit la politique en cas d'échec SPF/DKIM
    TXT _dmarc "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
  • MX : Configurez correctement vos enregistrements MX
Liste de vérification délivrabilité
  • ✓ Authentification du domaine (SPF, DKIM, DMARC)
  • ✓ Contenu équilibré (texte/images, pas de mots "spam")
  • ✓ Éviter les pièces jointes volumineuses
  • ✓ Sender reputation: envoi progressif pour nouveaux domaines
  • ✓ Nettoyer régulièrement vos listes (hard bounces)
  • ✓ IP dédiée pour grands volumes
  • ✓ Tests réguliers avec des outils comme mail-tester.com
  • ✓ Respecter les règles RGPD/CAN-SPAM (consentement, désinscription)