2010-08-08 19 views

risposta

3

peggiore dei casi, è possibile analizzare le intestazioni con qualcosa di simile:

<?php 
$headers=imap_fetchheader($imap, $msgid); 
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $headers, $matches); 
?> 

$ partite conterrà 3 matrici:

$matches[0] are the full-lines (such as "To: [email protected]\r\n") 
$matches[1] will be the header (such as "To") 
$matches[2] will be the value ([email protected]) 

ricevuto questo da: http://www.php.net/manual/en/function.imap-fetchheader.php#82339

+0

Questo è il mio colpo di testa: MIME-Version: 1.0 Ricevuto: da 10.227.37.212; Mer 21 Lug 2010 12:21:40 -0700 (PDT) Data: Mercoledì, 21 Luglio 2010 12:21:40 -0700 Message-ID: Oggetto: Personalizza Gmail con colori e temi Da: team di Gmail A: Frederik Heyninck Content-Type: multipart/alternative; boundary = 0016e6d5fc53164fb6048beab667 Quindi nessun indirizzo email. Quello è il problema. –

0

imap_fetch_overview potrebbe essere quello che stai cercando: http://www.php.net/manual/en/function.imap-fetch-overview.php

Un esempio di utilizzo può essere trovato qui: http://davidwalsh.name/gmail-php-imap, specificamente

echo $overview[0]->from;

Questa funzione è semplice, ma ha dei limiti. Una versione più completa è imap_headerinfo (http://www.php.net/manual/en/function.imap-headerinfo.php) che può restituire array dettagliati di tutti i dati di intestazione.

3

ho lottato con questo pure, ma le seguenti opere: imap_fetch_overview

// Get email address 
$header = imap_header($imap, $result); // get first mails header 
echo '<p>Name: ' . $header->fromaddress . '<p>'; 
echo '<p>Email: ' . $header->senderaddress . '<p>'; 

avevo usato() ma l'imap_header() mi ha dato tutte le informazioni di cui avevo bisogno.

29
$header = imap_headerinfo($imap_conn, $msgnum); 
$fromaddr = $header->from[0]->mailbox . "@" . $header->from[0]->host; 
+0

Come si otterrebbe questo risultato con Zend_Mail? – beingalex

+0

Non è Zend_Mail per comporre e * inviare * email? Questa domanda riguarda l'estrazione di un indirizzo da un messaggio ricevuto, in questo caso accessibile tramite imap. – dlo

1

Aveva lo stesso problema di te .... dovuto metterlo insieme, non so perché è così gonzoware.

testato esempio qui:

$mbox = imap_open(....) 

$MN=$MC->Nmsgs; 
$overview=imap_fetch_overview($mbox,"1:$MN",0); 
$size=sizeof($overview); 
for($i=$size-1;$i>=0;$i--){ 
    $val=$overview[$i]; 
    $msg=$val->msgno; 
    $header = imap_headerinfo ($mbox, $msg); 
    echo '<p>Name/Email Address: ' . $header->from[0]->personal ." ". 
    $header->from[0]->mailbox ."@". $header->from[0]->host. '<p></br>'; 
} 
imap_close($mbox); 
0

avuto problemi fino ho scoperto che il $ intestazione è un matrice di stdClass oggetti. Le 2 linee seguenti lavorato:

$header=imap_fetch_overview($imap,$countClients,FT_UID); 
    $strAddress_Sender=$header[0]->from; 
0

codice di lavoro completa con un esempio in linea

Extract email addresses list from inbox using PHP and IMAP casella di posta-utilizzando-php-e-imap

penso che tutto ciò che serve è solo per copiare lo script .

sto pubblicando due funzioni fondamentali del codice anche qui (grazie a commento di Eineki)

  function getAddressText(&$emailList, &$nameList, $addressObject) { 
      $emailList = ''; 
      $nameList = ''; 
      foreach ($addressObject as $object) { 
       $emailList .= ';'; 
       if (isset($object->personal)) { 
        $emailList .= $object->personal; 
       } 
       $nameList .= ';'; 
       if (isset($object->mailbox) && isset($object->host)) { 
        $nameList .= $object->mailbox . "@" . $object->host; 
       }  
      }  
      $emailList = ltrim($emailList, ';'); 
      $nameList = ltrim($nameList, ';'); 
     } 

     function processMessage($mbox, $messageNumber) { 
      echo $messageNumber; 
      // get imap_fetch header and put single lines into array 
      $header = imap_rfc822_parse_headers(imap_fetchheader($mbox, $messageNumber)); 
      $fromEmailList = ''; 
      $fromNameList = ''; 
      if (isset($header->from)) { 
       getAddressText($fromEmailList, $fromNameList, $header->from); 
      } 
      $toEmailList = ''; 
      $toNameList = ''; 
      if (isset($header->to)) { 
       getAddressText($toEmailList, $toNameList, $header->to); 
      }  
      $body = imap_fetchbody($mbox, $messageNumber, 1); 
      $bodyEmailList = implode(';', extractEmail($body)); 
      print_r(
       ',' . $fromEmailList . ',' . $fromNameList 
       . ',' . $toEmailList . ',' . $toNameList 
       . ',' . $bodyEmailList . "\n" 
      ); 
     } 
+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/18526256) – Eineki

+0

Fatto. Apprezzo la recensione! –