Lorsque l'on parle d'un bounce, c'est un terme utilisé pour définir un DSN (Delivery Status Notification). C'est un e-mail envoyé automatiquement par le système de messagerie à l'émetteur original de l'e-mail pour lui signaler qu'un problème est survenu lors de l'envoi.
Il existe deux types de bounces. Le bounce hard est considéré comme un échec permanent (adresse e-mail inexistante par exemple), tandis que le bounce soft est une défaillance passagère (boîte mail pleine par exemple).
L'objectif de cette classe PHP est de pouvoir aider les webmasters à manipuler les bounces via la norme DSN (RFC-1894) afin de les supprimer ou de les déplacer mais aussi par exemple de pouvoir désactiver certaines adresses qui ne sont plus valides en post-traitement dans votre base de données si vous utilisez une newsletter ou un système de mass-mailing comme moi :
Via la classe CwsMailBounceHandler, vous pourrez vous connecter en local ou en remote sur votre boîte mail POP3/IMAP ou bien simplement ouvrir un fichier .eml ou un répertoire contenant des fichiers .eml sur votre système.
En plus de la détection des bounces, la classe détectera également les Feedback loop ayant un standard ARF (Abuse Reporting Format) qui a désormais évolué vers la norme RFC 5965 ce qui est très pratique pour lutter contre le spam.
Si plusieurs recipients sont présents dans l'e-mail ils seront détectés automatiquement. Si vous souhaitez des explications sur le status code trouvé, j'ai créé une méthode appelée findStatusExplanationsByCode qui vous permettra d'avoir en retour un text explicatif de chaque classe de code et sous-code via la norme RFC 1893.
Pour utiliser cette classe, vous devrez activer l'extension PHP php_imap si vous souhaitez vous connecter en local ou en remote sur votre boîte mail (pas nécessaire pour l'ouverture de simples fichiers).
Un fichier index.php est disponible pour vous donner quelques exemples d'utilisation de la classe ainsi que des samples dans le dossier emls afin de tester les différentes règles présentes dans la classe.
Il existe des cas particuliers pour certains MTA (Mail Transfer Agent) comme par exemple Hotmail qui est ici pris en compte. Il se pourrait et il est même certains qu'il manque certaines règles. Si vous avez des bounces qui ne sont pas détectés, je vous invite à créer une issue sur GitHub et à attacher en pièce jointe l'e-mail en question.
CwsMailBounceHandler est disponible gratuitement sur GitHub. N'hésitez pas à fork si vous avez des idées d'amélioration.