2010-10-19 7 views
2

Donc j'essaie de comprendre comment envoyer un email à une adresse par exemple, [email protected] et au lieu de l'envoyer par e-mail il serait plutôt envoyé ou transmis à un script que je crée pour lire le contenu de l'e-mail et stocker le contenu dans une base de données. Des suggestions sur la façon de le faire en PHP?Traitement des e-mails entrants avec PHP Script

Merci!

+0

Cela dépend de ce que votre serveur MTA a et si elle accepte email. En règle générale, vous redirigez l'e-mail vers votre script. Le script lui-même lit juste à partir de STDIN. – Cfreak

Répondre

7

Voici quelques code que vous pouvez utiliser pour vous aller:

// set user to check 
$strUser  = "username"; 
$strPassword = "password"; 

// open 
$hMail = imap_open ("{mail.yourdomain.com:143/notls}INBOX", "$strUser", "$strPassword"); 

// get headers 
$aHeaders = imap_headers($hMail); 

// get message count 
$objMail = imap_mailboxmsginfo($hMail); 

// process messages 
for($idxMsg = 1; $idxMsg <= $objMail->Nmsgs; $idxMsg++ ) 
{ 
    // get header info 
    $objHeader = imap_headerinfo($hMail, $idxMsg); 

    // get from object array 
    $aFrom = $objHeader->from; 

    // process headers 
    for($idx = 0; $idx < count($aFrom); $idx++) 
    { 
     // get object 
     $objData = $aFrom[ $idx ]; 

     // get email from 
     $strEmailFrom = $objData->mailbox . "@" . $objData->host; 

     // do some stuff here 
    } 

    // delete message 
    imap_delete($hMail, $idxMsg); 
} 

// expunge deleted messages 
imap_expunge($hMail); 

// close 
imap_close($hMail); 
+0

Merci! Je devrais être capable de comprendre comment tirer le corps, ça ne semble pas trop dur. J'ai trouvé ceci et je pense que c'est juste: echo imap_body ($ aFrom, $ idx); et qui lirait le corps et l'afficherait pour chaque message pendant la boucle – Bill

+0

Belle bonne chance! –

+0

J'ai aussi réalisé, j'ai accès à la coque. Je n'ai jamais rien fait avec, mais puis-je mettre le code ci-dessus et dire à ce code pour exécuter toutes les quelques secondes à la place? – Bill

2

Deux options:

1) Si vous avez accès au shell sur le serveur de messagerie du destinataire, vous pouvez configurer une règle pour déclencher un script (comme par procmail ou similaire) à chaque fois qu'un nouveau message est reçu .

2) Vous pouvez laisser l'email tomber dans la boîte aux lettres comme d'habitude, puis écrire votre script PHP pour accéder à la boîte aux lettres via IMAP, récupérer les nouveaux messages, les traiter, puis les supprimer. Et puis exécutez la chose par cron toutes les quelques minutes.

+0

La 2ème option peut être plus faisable car je ne suis pas familier avec le shell/comment configurer les règles. Je voudrais que ce soit assez en temps réel, donc si je mettais en place l'IMAP, il faudrait le faire tous les min. Je ne suis pas sûr de combien d'une souche qui serait sur le serveur. Des suggestions sur les tutoriels pour savoir où je peux trouver comment écrire un script PHP pour accéder à la boîte aux lettres via IMAP? – Bill

Questions connexes