L'appartement

Aller au contenu | Aller au menu | Aller à la recherche

mercredi, avril 8 2009

Quelques conseils pour ne pas voir vos mails finir dans les dossiers Spam

1559606_340_1116081430036-s.jpgSuite à plusieurs questions reçues par mail, voici quelques conseils tirés de mon expérience personnelle pour optimiser vos chances de ne pas voir vos messages finir leur course dans le tant redouté dossier « courrier indésirable » des différents « grands » fournisseurs de services (Yahoo, Gmail, Hotmail et consorts).

  • Avoir un Zonecheck parfait sur son domaine. Ce qui implique notamment - ce point semble important pour Gmail - une adresse postmaster valide et un contact de domaine valide;
  • Signer ses messages sortant avec DKIM et vérifier régulièrement son bon fonctionnement. Cette signature devient réellement essentielle !
  • Configurer correctement SPF (Sender Policy Framework) sur son domaine. Et ne pas oublier les machines qui relaient et autres MX secondaires;
  • Dans la mesure de vos possibilités, demandez à vos correspondant de vous ajouter dans leurs carnets d'adresses et/ou leurs listes blanches. Ceci peux-être particulièrement utile dans le cas d'une lettre d'information. Vous pouvez envisager de glisser dans un de vos mailings une phrase du style « Pour être sur de recevoir nos messages, ajoutez lettre@domain.tld à votre carnet d'adresses »;
  • Pour les newsletters en HTML, n'incluez pas les images dans le message mais linkez sur votre serveur. N'oubliez pas la version alternative pour les webmails qui ne supportent pas HTML;
  • Pour Yahoo et Hotmail, il peux-être intéressant de remplir leurs différents formulaires [1] pour signaler que vos messages sont marqués comme Spam chez eux. La réponse et le résultat ne sont pas garanties. Ils vous préciseront d'ailleurs que ce n'est pas une Whitelist. D'après moi, ça aide quand même;
  • Pour ceux qui ont les moyens et qui aiment se faire racketter, Hotmail utilise également une sorte de whitelist officielle - et bien entendue payante - appelée SenderScore;

Dernière précision, et pas des moindre - ceci est également précisé sur le site de Yahoo - les fournisseurs utilisent également des filtres de réputation. En clair, tant que l'adresse IP de votre serveur n'est pas « connue », le risque de passer à la trappe est plus important.

Pour ce dernier point :

  • oubliez les adresses IP résidentielles
  • louez un serveur sur un réseau « connu »
  • prenez le temps de remplir les formulaires que j'évoquais plus haut

Si vous avez d'autres bonnes pratiques, je suis preneur ;)

Notes

[1] Cherchez sur le site « postmaster » de Yahoo ou sur son équivalent chez Microsoft

vendredi, avril 11 2008

Script minimaliste : nettoyer une boite aux lettres avec une expression rationnelle

Dans la catégorie des scripts minimalistes (mais néanmoins utiles), je vous propose un petit script qui permet d'effacer, en ligne de commande avec PHP CLI, certains messages d'un compte mail en fonction d'une expression régulière précisée en paramètre et qui matche le sujet du mail.

Par exemple, effacer les centaines de messages de spam qui se trouvent dans une de vos nombreuses boites tant inutiles que nécessaires ;) Autre exemple, j'exécute ce script via un cron pour nettoyer tous ce qui traine dans des boites genre postmaster, abuse (encore que cette dernière n'est pas trop pourrie par le SPAM), et autres bal « no-reply » qu'il reste quand même, pour certaines, nécessaires de consulter tous les ans régulièrement.

C'est un script clairement dédié à de la maintenance. Je vous déconseille de laisser trainer ce code n'importe ou accessible via le web.

Utilisation :

cleanmail -u=nom_utilisateur -p=mot_de_passe -s=imap.mondomain.tld:143 -e="/SPAM/i"

Pour être sur que tous le monde a compris :

  • -u= nom d'utilisateur du compte mail
  • -p= mot de passe du compte mail
  • -s= serveur (pop ou imap). Toutes les options disponibles sur la fonction imap_open de PHP sont disponible
  • -e= expression régulière qui sera « passée » à preg_match

Le script :

#!/usr/bin/php
<?php
// on supprime la limite d'éxecution d'un script php
set_time_limit(0);

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * cleanmail supprimer des mails d'une boite imap avec une pattern définie
 *
 * PHP versions 5
 *
 * LICENSE: Ce programme est un logiciel libre distribue sous licence GNU/GPL
 *
 * @author     Yves Tannier <yvesSANSPAM grafactory.net>
 * @copyright  2008 Yves Tannier
 * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
 * @version    0.1.0
 * @link       http://www.grafactory.net
 */


// aide contextuelle
$help_string = "Parametres :
                -u : utilisateur
                -p : mot de passe
                -s : serveur et port (localhost:143, localhost:110, localhost:143/novalidate-cert...)
                -e : expression régulière
                -h, --help : afficher cette aide...\n\n"
;

// recuperer les parametres passe en CLI
foreach($_SERVER['argv'] as $param) {
    // utilisateur
    if(strpos($param,"u=")) {
        $login_imap = str_replace("-u=","",$param);
        continue;
    }
    // mot de passe
    if(strpos($param,"p=")) {
        $passwd_imap = str_replace("-p=","",$param);
        continue;
    }
    // serveur et port
    if(strpos($param,"s=")) {
        $server_imap = str_replace("-s=","",$param);
        continue;
    }
    // expression reguliere
    if(strpos($param,"e=")) {
        $pattern = str_replace('-e=','',$param);
        continue;
    }
    switch($param) {
      case '-h' :
      case '--help' :
        echo $help_string;
        exit();
      case $_SERVER['SCRIPT_NAME'] :
        unset ($_SERVER['argv'][0]);
        break;
      default :
        echo "\nParamètre inconnu : ".$param."\n\n";
        exit();
    }
}

// pas d'argument
if (empty($_SERVER['argv'])) {
    echo "\nVeuillez preciser au moins un paramètre !\n\n";
    echo $help_string;
    exit();
}

// connexion
$mbox = imap_open("{".$server_imap."}INBOX", $login_imap, $passwd_imap)
            or die("Impossible de se connecter : ".imap_last_error());

echo "Connexion...\n";

// recup des headers
$headers = imap_headers($mbox);

// parcourir les messages
if(!empty($headers)) {
    echo "Recherche avec l'expression : ".$pattern."\n";
        $msgnum = 0;
        foreach ($headers as $val) {
            $msgnum = $msgnum + 1;
            $header = imap_headerinfo($mbox, $msgnum);
            $subject = $header->subject;
            if (preg_match($pattern, $subject)) {
                $mailmarked = imap_delete($mbox, $msgnum);
                echo "Message ".$msgnum." supprimé\n";
            }
        }
} else {
    echo "Aucun message dans la boite\n";
}

echo "Fin de la transaction\n";

// quitter et vider en meme temps
imap_close($mbox,CL_EXPUNGE);
?>

Bientôt le même mais en perl ;)

dimanche, novembre 4 2007

Installer DomainKeys sur Postfix (Debian Etch, Amavisd-new...)

Mise à jour le 12 mars 2008 : le même billet adapté pour DKIM est disponible : Installer la signature DKIM sur Postfix avec DKIMproxy.

Dans ma lutte incessante pour que mes messages n'aient pas comme destination finale les dossiers "courrier indésirable" des "grands" fournisseurs tels que Yahoo!, Hotmail/MSN, Gmail ect... Je vous propose aujourd'hui l'installation de la signature Domainkeys sur vos mails.

DomainKeys est un protocole de communication créé par Yahoo! (et défini par une RFC 4870). Wikipedia vous donnera un plus d'informations sur le sujet : DomainKeys sur Wikipedia

Même s'il fonctionne totalement et est déployé sur de nombreux serveurs, sachez qu'il est maintenant remplacé par une RFC plus "globale" : DKIM (Domain Keys Identified Mail). J'aborderais les différences et l'implémentation de DKIM dans un autre post.

D'autres liens :

DomainKeys bien reconnu chez Yahoo! (forcément ;)) DomainKeys

Voici la configuration du serveur de messagerie sur lequel se base ce tutoriel :

Nous allons mettre en place la configuration suivante :

postfix -> dkfilter -> postfix -> amavis -> postfix

Dkfilter est un proxy de signature et de vérification des signatures pour DomainKeys.

Ceci peut paraitre un peu lourd en regardant le schéma, mais postfix gère ce type de configuration très bien via les content filter

Comme je suis gentil et que l'informaticien est souvent fainéant, j'ai écris ce howto avec plein de copier/coller ;)

Lire la suite...