web-dev-qa-db-fra.com

Comment recevoir des e-mails et les traiter dans une application Web

J'ai configuré un identifiant d'e-mail mon PHP Web. Les utilisateurs enverront des e-mails à cet identifiant.

Je souhaite traiter ces e-mails dans l'application. Comment dois-je procéder?

Merci d'avance.

54
Niyaz

J'ai récemment travaillé sur un projet qui nécessitait l'analyse des e-mails de gmail et la mise à jour de la base de données avec certaines valeurs basées sur le contenu de l'e-mail. J'ai utilisé le ezcMail (maintenant) Zeta Components bibliothèque pour se connecter au serveur de messagerie et analyser les e-mails.

La stratégie que j'ai adoptée était de filtrer tous les courriers entrants intéressants avec une étiquette "non traité". Exécutez le script PHP via un crontab toutes les 15 minutes. Le script se connecte au serveur de messagerie et ouvre le dossier IMAP non traité et analyse chaque e-mail. Après avoir inséré les valeurs intéressantes dans la base de données, le script déplace les fichiers vers un autre dossier IMAP "Proccessed".

J'ai également trouvé IMAP meilleur que POP pour ce type de traitement.

49
Shoan

Récemment, je voulais pouvoir recevoir des e-mails immédiatement dans quelque chose que je faisais, alors j'ai fait des recherches (je suis venu chercher cette question ici aussi) et j'ai fini par trouver que Google App Engine était assez utile. Il possède une API que vous pouvez utiliser pour recevoir et traiter les e-mails envoyés à [email protected]. Je sais que cela ne semble pas vraiment utile, car vous ne voulez probablement pas que votre application sur App Engine et vous souhaitez recevoir des e-mails sur votredomaine.tld, mais avec un peu de configuration, vous pouvez obtenir ce que vous voulez.

Ma configuration de base est la suivante:

  • L'utilisateur envoie un e-mail à [email protected] (une adresse e-mail qui n'existe pas réellement)
  • mydomain.tld a une adresse e-mail catchall qui transmet à la boîte de ré[email protected]
  • GAEapp (une petite application sur le moteur d'application) reçoit l'e-mail, le traite et envoie une demande de publication avec des informations pertinentes à mydomain.tld

Donc, fondamentalement, vous pouvez créer une petite application GAE qui fonctionne comme un intermédiaire pour récupérer les e-mails. Même avec la redirection, cela fonctionnera bien, l'e-mail ira bien.

J'ai également décidé de m'apprendre quelques-uns Django et j'ai créé une application gratuite appelée Emailization qui fera essentiellement cela pour vous. Vous créez un destinataire comme [email protected] et donnez une URL à POST à. Tout ce qui est envoyé à cette adresse est POSTÉ à votre URL. Vous pouvez créer un catchall sur votre domaine qui le transmet à ce destinataire d'e-mailisation et vous recevrez un e-mail à travers le fourre-tout aussi!

ou vous pouvez voir un petite application GAE J'ai fait que vous puissiez vous configurer vous-même qui fait la même chose.

J'espère que cela aide quelqu'un!

15
Capitao

Utilisez procmail s'il est installé sur votre système. Placez ces lignes dans un fichier .procmailrc dans le répertoire personnel de l'utilisateur qui reçoit l'e-mail.

:0
| /path/to/your/script.php

Ou vous pouvez également utiliser un fichier .forward contenant

"|/path/to/your/script.php"

Procmail a l'avantage de vous permettre de gérer un filtrage plus compliqué si votre application en a besoin.

Votre fichier script.php lira les en-têtes et le corps de l'e-mail depuis stdin.

14
bmb

Découvrez fMailbox . Il ne nécessite aucune extension non standard (comme imap) et a été testé avec divers serveurs, pièces jointes, messages en plusieurs parties, SSL, etc.

7
ToughPal

Je suggère d'utiliser Zend_Mail composant de Zend Framework.

6
farzad

Il existe une excellente bibliothèque: essayez ceci: http://code.google.com/p/php-imap

4
barbushin

Vous devez implémenter un client de messagerie dans Php. Ce sera probablement un client POP .

Ce code interrogerait le serveur POP contenant votre courrier électronique, le téléchargerait, puis vous pourriez l'analyser selon vos besoins.

Une recherche rapide sur Google de "POP client php" a révélé un large éventail d'options différentes. Il est difficile de dire s'il y a vraiment "The One True PHP POP Library", sinon je l'inclurais ici. Si vous utilisez un framework préexistant, vous voudrez peut-être vérifier son niveau du support POP, sinon vérifiez les résultats de google ci-dessus et faites votre choix.

3
Doug T.

Il existe un certain nombre de solutions hébergées qui accepteront les e-mails pour votre domaine, puis publieront un script sur votre site Web. La plupart d'entre eux gèrent l'analyse des messages pour vous (en séparant les pièces jointes, "à" "de" et d'autres adresses, etc.).

Vous venez de créer un script qui reçoit un FORM POST et fait tout ce dont vous avez besoin avec.

Vous pouvez également consulter Mandrill (par MailChimp), SendGrid et PostMarkApp.

2
Travis Austin

Les solutions hébergées comme Travis Austin ont suggéré de bien fonctionner.

Si vous en cherchez un auto-hébergé, vous pouvez jeter un œil au module Mailin qui vous permet de recevoir des emails, de les analyser et de les poster sur un webhook de votre choix. Il vérifie également le dkim et le spf, calcule un score de spamassassin et détermine la langue du message.

Je ne sais pas si cela répondra à vos besoins car il est écrit dans node.js, mais plus vous avez d'options, mieux c'est. (Avertissement: je suis le mainteneur de Mailin)

2
Flolagale

Il existe un excellent tutoriel pour cela ici:

http://www.evolt.org/incoming_mail_and_php

qui explique comment transférer les e-mails directement vers votre script, que votre script lit via stdin (fopen, fread, etc.) Le code du didacticiel effectue même une analyse de base de l'en-tête/du corps pour vous.

2
Vern Jensen

Si vous voulez éviter de tendre la main sur POP ou IMAP à un autre serveur pour dérouler l'e-mail, vous pouvez ajouter un `` raccordement '' au processus de réception d'e-mail sur un serveur SMTP que vous avez configuré (éventuellement le même serveur php). Faites ensuite gérer l'e-mail de destination par ce serveur.

Voici un exemple avec postfix, mais des choses similaires sont également possibles avec sendmail.
http://www.adkap.com/autoresponder.html

0
justinb