rufo Pas me confondre avec Lycos! | 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 :
- <?php
- function getmsg($mbox,$mid) {
- // input $mbox = IMAP stream, $mid = message id
- // output all the following:
- global $htmlmsg,$plainmsg,$charset,$attachments;
- // the message may in $htmlmsg, $plainmsg, or both
- $htmlmsg = $plainmsg = $charset = '';
- $attachments = array();
- // HEADER
- $h = imap_header($mbox,$mid);
- // add code here to get date, from, to, cc, subject...
- // BODY
- $s = imap_fetchstructure($mbox,$mid);
- if (!$s->parts) // not multipart
- getpart($mbox,$mid,$s,0); // no part-number, so pass 0
- else { // multipart: iterate through each part
- foreach ($s->parts as $partno0=>$p)
- getpart($mbox,$mid,$p,$partno0+1);
- }
- }
- function getpart($mbox,$mid,$p,$partno) {
- // $partno = '1', '2', '2.1', '2.1.3', etc if multipart, 0 if not multipart
- global $htmlmsg,$plainmsg,$charset,$attachments;
- // DECODE DATA
- $data = ($partno)?
- imap_fetchbody($mbox,$mid,$partno): // multipart
- imap_body($mbox,$mid); // not multipart
- // Any part may be encoded, even plain text messages, so check everything.
- if ($p->encoding==4)
- $data = quoted_printable_decode($data);
- elseif ($p->encoding==3)
- $data = base64_decode($data);
- // no need to decode 7-bit, 8-bit, or binary
- // PARAMETERS
- // get all parameters, like charset, filenames of attachments, etc.
- $params = array();
- if ($p->parameters)
- foreach ($p->parameters as $x)
- $params[ strtolower( $x->attribute ) ] = $x->value;
- if ($p->dparameters)
- foreach ($p->dparameters as $x)
- $params[ strtolower( $x->attribute ) ] = $x->value;
- // ATTACHMENT
- // Any part with a filename is an attachment,
- // so an attached text file (type 0) is not mistaken as the message.
- if ($params['filename'] || $params['name']) {
- // filename may be given as 'Filename' or 'Name' or both
- $filename = ($params['filename'])? $params['filename'] : $params['name'];
- // filename may be encoded, so see imap_mime_header_decode()
- $attachments[$filename] = $data; // this is a problem if two files have same name
- }
- // TEXT
- elseif ($p->type==0 && $data) {
- // Messages may be split in different parts because of inline attachments,
- // so append parts together with blank row.
- if (strtolower($p->subtype)=='plain')
- $plainmsg .= trim($data) ."\n\n";
- else
- $htmlmsg .= $data ."<br><br>";
- $charset = $params['charset']; // assume all parts are same charset
- }
- // EMBEDDED MESSAGE
- // Many bounce notifications embed the original message as type 2,
- // but AOL uses type 1 (multipart), which is not handled here.
- // There are no PHP functions to parse embedded messages,
- // so this just appends the raw source to the main message.
- elseif ($p->type==2 && $data) {
- $plainmsg .= trim($data) ."\n\n";
- }
- // SUBPART RECURSION
- if ($p->parts) {
- foreach ($p->parts as $partno0=>$p2)
- getpart($mbox,$mid,$p2,$partno.'.'.($partno0+1)); // 1.2, 1.2.1, etc.
- }
- }
- echo "Test IMAP<br />\n";
- $mbox = imap_open("{NomServeur:110/pop3}INBOX", "Login", "MotDePasse" );
- echo "<h1>en-têtes dans INBOX</h1>\n";
- $MC = imap_check($mbox);
- // Récupère le sommaire pour tous les messages contenus dans INBOX
- $result = imap_fetch_overview($mbox, "1:{$MC->Nmsgs}", 0);
- $ArrayMsgFound = imap_search($mbox, "UNSEEN SUBJECT \"[[FOR_ASTRES]]\"" );
- if (!empty($ArrayMsgFound))
- {
- foreach ($result as $overview) {
- if (in_array($overview->msgno, $ArrayMsgFound))
- {
- echo "---------------------------------------------------------<br />\n";
- $objHeader = imap_headerinfo($mbox, $overview->msgno);
- echo "<b>[From: {$objHeader->fromaddress}] {$objHeader->subject}</b><br />\n";
- getmsg($mbox, $overview->msgno);
-
- if (!empty($htmlmsg))
- {
- }
- elseif (!empty($plainmsg))
- {
- $plainmsg = strtolower($plainmsg);
- $iPosStart = strpos($plainmsg, "<planning>" );
- if ($iPosStart !== FALSE)
- {
- $iPosEnd = strpos($plainmsg, "</planning>" );
- if ($iPosEnd !== FALSE)
- {
- $sPlanningXMLData = substr($plainmsg, $iPosStart, $iPosEnd - $iPosStart + strlen("</planning>" ));
- $sPlanningXMLData = str_replace(array("\r\n" ), array("" ), $sPlanningXMLData);
- $sPlanningXMLData = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>".$sPlanningXMLData;
- $dom = new DomDocument;
- if ($dom->loadXML($sPlanningXMLData))
- {
- // On décode le tag <planning>
- $aXMLPlanning = $dom->getElementsByTagName('planning');
- $ArrayPlanningToAdd = array();
- foreach($aXMLPlanning as $CurrentNode)
- {
- foreach($CurrentNode->childNodes as $n => $Node)
- {
- switch($Node->nodeName)
- {
- case 'lastname':
- $sFirstname = $Node->nodeValue;
- break;
- case 'firstname':
- $sFirstname = $Node->nodeValue;
- break;
- case 'type':
- $ArrayPlanningToAdd["Type"] = $Node->nodeValue;
- break;
- case 'startdate':
- $ArrayPlanningToAdd["StartDate"] = $Node->nodeValue;
- break;
- case 'description':
- $ArrayPlanningToAdd["EndDate"] = $Node->nodeValue;
- break;
- case 'enddate':
- $ArrayPlanningToAdd["Description"] = $Node->nodeValue;
- break;
- }
- }
- $ArrayPlanningToAdd["Date"] = date("Y-m-d H:i:s" );
- // Récupération des personnes en copie
- $ArrayPlanningToAdd["InCopy"] = '';
- if (!empty($objHeader->ccaddress))
- {
- $ArrayPlanningToAdd["InCopy"] = $objHeader->ccaddress;
- }
- }
- print_r($ArrayPlanningToAdd);
- unset($dom);
- }
- }
- }
- }
- }
- }
- }
- imap_close($mbox);
- ?>
|
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
|