web-dev-qa-db-fra.com

Le meilleur moyen de gérer l'analyse/le décodage des e-mails en PHP?

Actuellement, j'utilise le fichier mimeDecode.php de la bibliothèque PEAR pour analyser les courriels entrants. Il semble y avoir beaucoup de problèmes et ne décode pas beaucoup de messages. J'aimerais donc le remplacer par quelque chose de mieux.

Je cherche quelque chose qui puisse séparer correctement les parties du message, telles que le, de, corps, etc. Idéalement, il serait capable de gérer toutes les méthodes de codage courantes telles que base64, uuencode, cité imprimable, etc.

Dans les cas où le même message contient le texte brut et les versions html du même message, j'aimerais bien connaître la différence entre eux afin de pouvoir choisir la partie que je souhaite afficher.

Je ne suis pas inquiet pour les pièces jointes pour le moment, mais il serait bien qu’il en soit informé au cas où je souhaiterais l’appliquer à l’avenir.

J'ai vu que PHP possède un groupe de fonctions qui commencent par Word imap et qui semblent pouvoir faire ce que je veux, mais je ne suis pas sûr de ne pas les essayer.

Actuellement, je suis en train de décoder les messages à la volée en PHP. C'est pourquoi je recherche une solution de remplacement PHP.

Quelqu'un at-il une expérience avec cela qui pourrait me diriger dans la bonne direction? Je détesterais commencer à utiliser quelque chose qui finirait par ne pas faire ce dont j'ai besoin à long terme.

23
Sgraffite

C'est drôle, vous devriez demander ... Je travaille actuellement sur un système de notification simple. Je viens de terminer le gestionnaire de rebond avec i utilise Zend_Mail à mettre en œuvre. Il contient à peu près toutes les fonctionnalités que vous recherchez ... vous pouvez vous connecter à une boîte aux lettres (POP3, IMAP, Mbox et Maildir) pour en extraire des messages et les exploiter.

Il gère les messages en plusieurs parties, mais les parties peuvent être difficiles à manipuler. J'ai eu du mal à déterminer quelle partie correspond au message d'origine joint au rapport de non-remise avec lequel je travaillais, mais j'ai le sentiment que je viens de manquer quelque chose dans la documentation. Je ne suis pas sûr de la manière dont il gère l'encodage, car mon utilisation était assez simple, mais je suis à peu près sûr qu'il contient des dispositions pour tous les encodages que vous avez mentionnés. Consultez la documentation et parcourez l'API.

5
prodigitalson

J'ai récemment développé un analyseur de courrier PHP et je l'utilise en production.
J'en suis très content et certains développeurs l'ont mis au point:

https://github.com/plancake/official-library-php-email-parser

12
dan

Je sais que cette question a quatre ans maintenant ... mais j'ai fini par avoir besoin d'une bibliothèque d'analyse syntaxique et je n'étais pas satisfait des options disponibles. Je voulais quelque chose de fiable, compatible PSR-2, installable via composeur.

composer require zbateson/mail-mime-parser

C'est son propre analyseur, construit à partir de la base pour contourner les problèmes connus et les bugs rencontrés dans d'autres implémentations. Il est largement testé et utilisé assez largement.

La bibliothèque utilise les flux Psr7 qui vous permettent de le transmettre à n’importe quel type de flux. De plus, il ne stocke pas toutes les informations en mémoire - les pièces jointes très volumineuses peuvent être renvoyées sous forme de flux au lieu de chaîne si besoin est, afin que la mémoire ne soit pas épuisée. De même, l'intégralité du message n'est jamais stockée directement en mémoire, il ne s'agit que de références à des flux et les en-têtes sont conservés en mémoire.

https://github.com/zbateson/mail-mime-parser

Consultez le site Web pour obtenir un guide et l’API ... et si vous trouvez des erreurs ou des fautes de frappe ou si vous constatez des améliorations, n'hésitez pas à ouvrir un problème, ou à creuser et à contribuer directement avec une demande d'extraction :)

5
Zaahid

J'ai ajouté le php-mime-mail-parser pour corriger tous les problèmes: Fork de php-mime-mail-parser

Plus de 52 tests et 764 assertions Couverture du code: 100% lignes, 100% fonctions et méthodes, 100% classes et caractéristiques

Vous avez besoin du paquet PECL MailParse pour l'utiliser, mais le wrapper est sans problème et entièrement testé.

4
eXorus

Pour être complet, voici celui que je vais essayer. http://code.google.com/p/php-mime-mail-parser/ - c'est un wrapper autour de PHP MailParse, qui doit être installé.

2
Slawa

Je suis également à la recherche d’une bibliothèque d’analyseurs de courrier électronique MIME robuste et facile à utiliser, et j’examine actuellement sérieusement le composant Mail de eZ Components. Mais si vous cherchez quelque chose qui le rendra aussi simple que echo $email->text; ou echo $email->html;, comme moi, vous serez déçu. En fait, je ne pense pas qu'une telle simplification soit possible, à cause du fonctionnement de MIME. Mais cela semble être la meilleure option dans le monde PHP.

J'ai commencé à travailler sur mon projet actuel avec le composant Zend_Mail, mais lorsque le temps est venu de creuser dans ces parties d'e-mails et ces en-têtes codés, Zend_Mail vous laisse pratiquement dans le froid. Vous devez faire le plus de décodage vous-même, ce qui n'est pas amusant du tout.

En ce qui concerne IMAP PHP extension, il s’agit de récupérer les messages de votre boîte aux lettres et non de les décoder MIME. Cependant, il possède une fonction de décodage pratique dont vous pourriez avoir besoin. Mailparse extension PECL, d’autre part, traite exactement de cet ensemble de problèmes. Je ne l'ai pas encore essayé, mais il semble que vous ayez besoin d'écrire beaucoup de code pour obtenir les données souhaitées.

1
nnc