Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
887 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Analyse des emails entrants

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Analyse des emails entrants

n°1969138
webPx
Posté le 25-02-2010 à 10:22:23  profilanswer
 

Bonjour,
 
Je viens vous consulter aujourd'hui pour un problème :
 
Il y a une adresse e-mail (toto@toto.fr) qui provient d'OVH et qui entre directement dans deux boites e-mails différentes. Jusque là, facile.
Mon soucis c'est que j'aimerais pouvoir capter le contenu des e-mails entrant afin d'effectuer un tri et ensuite les faire parvenir aux deux destinataires.
J'avais pensé mettre en place une redirection automatique de toto vers tata et ensuite renvoyé vers toto mais toto ne recevrait jamais les e-mails...
Je précise également que les deux personnes qui reçoivent toto actuellement doivent pouvoir répondre aux e-mails avec l'adresse toto@toto.fr OBLIGATOIREMENT.
 
Auriez vous des pistes de solutions, idéalement avec du PHP ?
 
Merci d'avance.

mood
Publicité
Posté le 25-02-2010 à 10:22:23  profilanswer
 

n°1971276
the_bigboo
Posté le 04-03-2010 à 21:57:46  profilanswer
 

a mon avis pas faisable avec php... ce qu'il te faut c'est vérifier à la réception du courriel, s'il correspond a ce que tu recherche.
 
Je serais dans ton cas plus tenté de faire un petit script en bash qui pourrait peut etre se glisser en callback à la réception d'un mail, ou bien faire un cron, mais après ca ne me semble pas très propre...

n°1971324
rufo
Pas me confondre avec Lycos!
Posté le 05-03-2010 à 09:48:06  profilanswer
 

Normalement, si c'est possible, il suffit d'activer la lib imap pour PHP. Après, PHP se connecte au contenu de la boîte mail et analyse le contenu des mails qui l'intéresse (filtrage par des critères de recherche possible).
 
Pour la réponse, pense à mettre une "clause "reply" dans le header du mail envoyé. Tu peux regarder le fichier /Astres/Common/EmailLibrary.php de mon soft Astres (cf ma signature).
 
Et tiens, voici un bout de code fait un peu à l'arrache qui permet d'accéder à une boîte mail en pop3

Code :
  1. <?php
  2. function getmsg($mbox,$mid) {
  3.     // input $mbox = IMAP stream, $mid = message id
  4.     // output all the following:
  5.     global $htmlmsg,$plainmsg,$charset,$attachments;
  6.     // the message may in $htmlmsg, $plainmsg, or both
  7.     $htmlmsg = $plainmsg = $charset = '';
  8.     $attachments = array();
  9.     // HEADER
  10.     $h = imap_header($mbox,$mid);
  11.     // add code here to get date, from, to, cc, subject...
  12.     // BODY
  13.     $s = imap_fetchstructure($mbox,$mid);
  14.     if (!$s->parts)  // not multipart
  15.         getpart($mbox,$mid,$s,0);  // no part-number, so pass 0
  16.     else// multipart: iterate through each part
  17.         foreach ($s->parts as $partno0=>$p)
  18.             getpart($mbox,$mid,$p,$partno0+1);
  19.     }
  20. }
  21. function getpart($mbox,$mid,$p,$partno) {
  22.     // $partno = '1', '2', '2.1', '2.1.3', etc if multipart, 0 if not multipart
  23.     global $htmlmsg,$plainmsg,$charset,$attachments;
  24.     // DECODE DATA
  25.     $data = ($partno)?
  26.         imap_fetchbody($mbox,$mid,$partno):  // multipart
  27.         imap_body($mbox,$mid);  // not multipart
  28.     // Any part may be encoded, even plain text messages, so check everything.
  29.     if ($p->encoding==4)
  30.         $data = quoted_printable_decode($data);
  31.     elseif ($p->encoding==3)
  32.         $data = base64_decode($data);
  33.     // no need to decode 7-bit, 8-bit, or binary
  34.     // PARAMETERS
  35.     // get all parameters, like charset, filenames of attachments, etc.
  36.     $params = array();
  37.     if ($p->parameters)
  38.         foreach ($p->parameters as $x)
  39.             $params[ strtolower( $x->attribute ) ] = $x->value;
  40.     if ($p->dparameters)
  41.         foreach ($p->dparameters as $x)
  42.             $params[ strtolower( $x->attribute ) ] = $x->value;
  43.     // ATTACHMENT
  44.     // Any part with a filename is an attachment,
  45.     // so an attached text file (type 0) is not mistaken as the message.
  46.     if ($params['filename'] || $params['name']) {
  47.         // filename may be given as 'Filename' or 'Name' or both
  48.         $filename = ($params['filename'])? $params['filename'] : $params['name'];
  49.         // filename may be encoded, so see imap_mime_header_decode()
  50.         $attachments[$filename] = $data;  // this is a problem if two files have same name
  51.     }
  52.     // TEXT
  53.     elseif ($p->type==0 && $data) {
  54.         // Messages may be split in different parts because of inline attachments,
  55.         // so append parts together with blank row.
  56.         if (strtolower($p->subtype)=='plain')
  57.             $plainmsg .= trim($data) ."\n\n";
  58.         else
  59.             $htmlmsg .= $data ."<br><br>";
  60.         $charset = $params['charset'];  // assume all parts are same charset
  61.     }
  62.     // EMBEDDED MESSAGE
  63.     // Many bounce notifications embed the original message as type 2,
  64.     // but AOL uses type 1 (multipart), which is not handled here.
  65.     // There are no PHP functions to parse embedded messages,
  66.     // so this just appends the raw source to the main message.
  67.     elseif ($p->type==2 && $data) {
  68.         $plainmsg .= trim($data) ."\n\n";
  69.     }
  70.     // SUBPART RECURSION
  71.     if ($p->parts) {
  72.         foreach ($p->parts as $partno0=>$p2)
  73.             getpart($mbox,$mid,$p2,$partno.'.'.($partno0+1));  // 1.2, 1.2.1, etc.
  74.     }
  75. }
  76. echo "Test IMAP<br />\n";
  77. $mbox = imap_open("{NomServeur:110/pop3}INBOX", "Login", "MotDePasse" );
  78. echo "<h1>en-têtes dans INBOX</h1>\n";
  79. $MC = imap_check($mbox);
  80. // Récupère le sommaire pour tous les messages contenus dans INBOX
  81. $result = imap_fetch_overview($mbox, "1:{$MC->Nmsgs}", 0);
  82. $ArrayMsgFound = imap_search($mbox, "UNSEEN SUBJECT \"[[FOR_ASTRES]]\"" );
  83. if (!empty($ArrayMsgFound))
  84. {
  85.      foreach ($result as $overview) {
  86.          if (in_array($overview->msgno, $ArrayMsgFound))
  87.          {
  88.              echo "---------------------------------------------------------<br />\n";
  89.              $objHeader = imap_headerinfo($mbox, $overview->msgno);
  90.              echo "<b>[From: {$objHeader->fromaddress}] {$objHeader->subject}</b><br />\n";
  91.              getmsg($mbox, $overview->msgno);
  92.            
  93.              if (!empty($htmlmsg))
  94.              {
  95.              }
  96.              elseif (!empty($plainmsg))
  97.              {
  98.                  $plainmsg = strtolower($plainmsg);
  99.                  $iPosStart = strpos($plainmsg, "<planning>" );
  100.                  if ($iPosStart !== FALSE)
  101.                  {
  102.                      $iPosEnd = strpos($plainmsg, "</planning>" );
  103.                      if ($iPosEnd !== FALSE)
  104.                      {
  105.                          $sPlanningXMLData = substr($plainmsg, $iPosStart, $iPosEnd - $iPosStart + strlen("</planning>" ));
  106.                          $sPlanningXMLData = str_replace(array("\r\n" ), array("" ), $sPlanningXMLData);
  107.                          $sPlanningXMLData = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>".$sPlanningXMLData;
  108.                          $dom = new DomDocument;
  109.                          if ($dom->loadXML($sPlanningXMLData))
  110.                          {
  111.                              // On décode le tag <planning>
  112.                              $aXMLPlanning = $dom->getElementsByTagName('planning');
  113.                              $ArrayPlanningToAdd = array();
  114.                              foreach($aXMLPlanning as $CurrentNode)
  115.                              {
  116.                                  foreach($CurrentNode->childNodes as $n => $Node)
  117.                                  {
  118.                                      switch($Node->nodeName)
  119.                                      {
  120.                                          case 'lastname':
  121.                                              $sFirstname = $Node->nodeValue;
  122.                                              break;
  123.                                          case 'firstname':
  124.                                              $sFirstname = $Node->nodeValue;
  125.                                              break;
  126.                                          case 'type':
  127.                                              $ArrayPlanningToAdd["Type"] = $Node->nodeValue;
  128.                                              break;
  129.                                          case 'startdate':
  130.                                              $ArrayPlanningToAdd["StartDate"] = $Node->nodeValue;
  131.                                              break;
  132.                                          case 'description':
  133.                                              $ArrayPlanningToAdd["EndDate"] = $Node->nodeValue;
  134.                                              break;
  135.                                          case 'enddate':
  136.                                              $ArrayPlanningToAdd["Description"] = $Node->nodeValue;
  137.                                              break;
  138.                                      }
  139.                                  }
  140.                                  $ArrayPlanningToAdd["Date"] = date("Y-m-d H:i:s" );
  141.                                  // Récupération des personnes en copie
  142.                                  $ArrayPlanningToAdd["InCopy"] = '';
  143.                                  if (!empty($objHeader->ccaddress))
  144.                                  {
  145.                                      $ArrayPlanningToAdd["InCopy"] = $objHeader->ccaddress;
  146.                                  }
  147.                              }
  148.                              print_r($ArrayPlanningToAdd);
  149.                              unset($dom);
  150.                          }
  151.                      }
  152.                  }
  153.              }
  154.          }
  155.      }
  156. }
  157. imap_close($mbox);
  158. ?>


 
Ce bout de code recherche des mails ayant un sujet particulier ("[[FOR_ASTRES]]" ) et récupère un contenu en xml (entre les balises <planning>...</planning> ). Il récupère aussi les personnes mises en copie du mail.
 
@+


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Analyse des emails entrants

 

Sujets relatifs
Analyse lexicale & syntaxique avec Boost::SpiritSQL Tableau analyse croisée sur une année glissante
analyse d'un fichier CAD au format STLAnalyse d'un flux MPEG2 (buffer audio)
[Web] Outil d'analyse de performances d'un siteRécuperer des emails, problèmes d'encodages
Macro d'envoi d'emails fonctionnant mais pas dans perso.xlsAnalyse et MCD gestion de stock
Erreur d'analyse de la valeur pour la propriété 'width' 
Plus de sujets relatifs à : Analyse des emails entrants


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR