101 votes

Comment envoyer des e-mails et éviter qu'ils ne soient classés comme spam?

Ceci est une question canonique sur la manière de gérer les e-mails envoyés depuis votre serveur qui sont classés comme spam. Pour des informations supplémentaires, vous trouverez peut-être ces questions similaires utiles :

Parfois, je veux envoyer des bulletins d'information à mes clients. Le problème est que certains des e-mails sont capturés comme des messages indésirables. Surtout par Outlook chez le client (même dans mon propre Outlook 2007).

Maintenant je veux savoir ce qu'il faut faire pour créer des e-mails "bons". Je connais le reverse lookup, etc., mais (par exemple), que dire d'un lien de désinscription avec un identifiant unique ? Est-ce que cela augmente un taux de spam ?

0 votes

Un checklist étape par étape ainsi que des directives de dépannage peuvent être trouvés dans une bonne réponse à une question similaire sur superuser.com.

8voto

Basj Points 479

Solution détaillée pour éviter que les courriels soient identifiés comme spam et/ou n'arrivent pas aux destinataires

Exemple de situation : Vous avez un serveur qui exécute un site web PHP pour example.com qui doit envoyer des e-mails . Et vous remarquez que vos courriels ne sont pas toujours délivrés. (Gros problème si vous êtes propriétaire d'une boutique, et que les clients ne reçoivent pas les emails après un achat !)

Si vous suivez toutes les étapes suivantes, il devrait résoudre 99,9% des problèmes. (J'ai d'abord pensé qu'il était possible de ne faire que quelques-uns d'entre eux, et de sauter DKIM par exemple, mais finalement tous étaient nécessaires pour résoudre tous les problèmes que j'avais).

  1. Tout d'abord, qui envoie les e-mails ?

    Lorsque votre code PHP envoie des emails, c'est souvent avec la célèbre fonction PHP mail(...) . Mais que fait cette fonction, sous le capot ? Exécutons un test.php page contenant <?php echo ini_get('sendmail_path'); ?> . Vous obtiendrez par exemple : /usr/sbin/sendmail -t -i . Bonne nouvelle, maintenant nous savons quel programme gère vraiment les emails !
    Maintenant une info délicate : le nom sendmail peut être divers programmes . Même si vous voyez sendmail à l'étape précédente, vous avez peut-être sendmail o postfix o exim ou qmail, etc. installés. Faisons dpkg -S /usr/sbin/sendmail . La réponse est postfix: /usr/sbin/sendmail ok, cela signifie nous avons postfix installé .

  2. Regardez dans le fichier journal /var/mail/www-data pour savoir quels e-mails n'ont pas été correctement envoyés, et pourquoi. Cela pourrait être utile pour les prochaines étapes.

  3. Comme mentionné sur Le blog de Jeff Atwood il est temps d'examiner les enregistrements PTR inversés. (Plus de détails seront ajoutés ici).

  4. Ajoutez la ligne suivante dans le fichier de configuration de postfix /etc/postfix/main.cf fichier :

    inet_protocols=ipv4

    Puis redémarrez postfix avec service restart postfix . Pourquoi ? Parce que j'ai eu des problèmes de ce genre lorsque le destinataire est gmail :

    Notre système a détecté que ce message ne respecte pas les directives d'envoi IPv6 concernant les enregistrements PTR et l'authentification 550-5.7.1. Veuillez revoir 550-5.7.1 https://support.google.com/mail/?p=ipv6_authentication_error pour plus d'informations sur 550 5.7.1.

    El solution la plus facile était alors de passer postfix en ipv4 uniquement, d'où cette étape 4 (qui pourrait être inutile pour vous ?).

  5. Enregistrements DNS SPF . Afin de prouver que vous êtes autorisé à envoyer des e-mails à partir de @example.com vous pouvez ajouter un enregistrement SPF dans les enregistrements DNS du domaine. example.com . J'ai trouvé quelque part que The DNS record type 99 (SPF) has been deprecated Nous utilisons donc un enregistrement TXT à la place. Ajoutons ceci comme un enregistrement DNS TXT (voir également la note 1) :

    v=spf1 a mx include:_spf.google.com include:sendgrid.net ~all

    Pourquoi ces inclusions ? Parce que mon serveur ne sera pas le seul à envoyer des e-mails à partir de @example.com ! J'ai configuré Gmail pour Envoyer le courrier en tant que contact@example.com ( voir la capture d'écran ici ), en utilisant le fournisseur SMTP de confiance Sendgrid . Si je n'ajoute pas ces include: Gmail ne serait pas autorisé à envoyer des e-mails à partir de @example.com .

  6. DKIM la signature numérique. Comme indiqué aquí L'objectif de DKIM est de garantir que le contenu du courrier n'a pas été altéré pendant sa transmission. Voici le processus d'installation dans Ubuntu (guide utile aquí aussi) :

    • apt-get install opendkim opendkim-tools

    • Créez les clés (vous pouvez également générer les clés et l'enregistrement TXT DNS correspondant à l'aide de la commande http://dkimcore.org/tools/ ):

      mkdir /etc/opendkim
      cd /etc/opendkim
      opendkim-genkey -t -s mail -d example.com
    • Mettons ça dans /etc/opendkim.conf :

      Syslog                 yes
      Domain                 *
      KeyFile                /etc/opendkim/mail.private
      Selector               mail
      AutoRestart            yes
      Background             yes
      Canonicalization       relaxed/relaxed
      DNSTimeout             5
      Mode                   sv
      SubDomains             no

      ceci dans /etc/default/opendkim :

      SOCKET="inet:8891@localhost" # Ubuntu default - listen on loopback on port 8891

      et enfin ajouter ceci à la fin du fichier de configuration de postfix /etc/postfix/main.cf :

      # DKIM
      milter_default_action = accept
      milter_protocol = 2
      smtpd_milters = inet:localhost:8891
      non_smtpd_milters = inet:localhost:8891
    • Maintenant, ajoutons la clé publique (trouvée dans /etc/opendkim/mail.txt ) aux enregistrements DNS de votre domaine :

      mail._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=OqYHd...waPaQAX"

      Voici à quoi cela ressemble avec mon registrar Namelynx :

    • Dernière étape pour DKIM : redémarrer les services de messagerie avec service restart opendkim ; service restart postfix .

  7. Vérifiez si tout fonctionne. La méthode la plus simple consiste à envoyer un courrier électronique via PHP à l'adresse suivante auth-results@verifier.port25.com (cet outil très utile est mis à disposition par Port25 Solutions) :

    $emailfrom = "Example <contact@example.com>";
    $headers  = "MIME-Version: 1.0 \n";
    $headers .= "Content-Transfer-Encoding: 8bit \n";
    $headers .= "Content-type: text/plain; charset=utf-8\n";
    $headers .= "Reply-To: " . $emailfrom . "\n";
    $headers .= "From: " . $emailfrom . "\n";
    $headers .= "Bcc: example@gmail.com\n";
    mail("check-auth@verifier.port25.com", "Hello", "Hello!", $headers);

    Ensuite, voyez la réponse de cet outil, elle devrait ressembler à ceci :

    ==========================================================
    Summary of Results
    ==========================================================
    SPF check:          pass
    DKIM check:         pass
    SpamAssassin check: ham

    Le service mail-tester.com est également utile.

  8. (Facultatif) Essayez postmaster.google.com. Je l'ai utilisé mais je ne me souviens pas si ça a aidé ou pas.

  9. Si cela ne fonctionne toujours pas Pour éviter les jours et les nuits de débogage (infructueux), une solution pourrait consister à externaliser le courrier électronique auprès d'une solution professionnelle. Ici est un bon article à ce sujet. En voici une citation : "L'envoi d'emails depuis votre application peut s***. La moitié du temps, les messages qui sont envoyés depuis votre propre serveur se retrouvent simplement dans le dossier de courrier indésirable du destinataire." que j'ai malheureusement découvert vrai, après des semaines d'ajustements.


Notes supplémentaires :

(1)

-all : Fail: All mail servers not listed in the SPF record are explicitly not authorized to send mail using the sender’s domain.
~all : Soft Fail: All mail servers not listed in the SPF record are not authorized to send mail using the sender’s domain, but the owner of the domain is unwilling to make a strong assertion to that effect.
?all : Neutral: The domain controller cannot or does not want to assert whether or not all mail servers not listed in the SPF record are authorized to send mail using the sender’s domain.
+all : Pass: All mail servers are authorized to send mail on behalf of the sender’s domain.

7voto

wonderer Points 963

Mon entreprise en ligne avait des problèmes avec les e-mails de confirmation de commande envoyés dans les spams ou même pas livrés du tout (rejetés par les serveurs de messagerie). Il s'agissait de simples e-mails "voici un résumé de votre commande" avec un lien vers le domaine de notre site. Nous avons fini par acheter quelques comptes Google Apps pour mon entreprise. Vous pouvez en configurer un pour qu'il agisse en tant que serveur SMTP. Avoir Google comme notre expéditeur d'e-mails a résolu tous ces problèmes.

En ce qui concerne les newsletters par e-mail, utilisez certainement un service qui gère les options d'inscription/désinscription pour vous. Utiliser quelqu'un d'autre que ce service pour envoyer des mails en masse vous conduira probablement à être banni.

0 votes

C'est une solution de contournement. Une solution appropriée serait de corriger votre système défectueux et de vous assurer d'avoir au moins un enregistrement SPF valide dans le DNS.

3 votes

En réalité, si le FAI sur lequel se trouve votre serveur de messagerie est blacklisté comme spam, bon courage. Nous étions sur Rackspace à l'époque. Utiliser Google en tant que SMTP a aidé car Google s'assure qu'il n'est pas sur liste noire.

3voto

Henry Points 880

Il y a un nouveau guide qui a été publié sur l'Inboxing par e-mail

Le plus complet que j'ai jamais vu. Une liste de contrôle de 43 points différents qui couvrent chaque aspect de la manière d'éviter d'être marqué comme spam. C'est constamment mis à jour.

De la configuration des DNS, la configuration de l'authentification, la mise en place de la surveillance de la réputation, la réduction de votre taux de rebond, les tests de votre contenu e-mail, etc.

Couverture de bout en bout de tout par ZeroBounce.NET

https://www.zerobounce.net/email-deliverability/

Il y a aussi une nouvelle plateforme pour tester et optimiser complètement le contenu des e-mails, qui est assez incroyable.

Optimisation du contenu e-mail de Campaign Cleaner

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X