php imap get from email address

Viewed 36731

How do I retrieve the email address from an email with imap_open?

If the sender name is known I get the sender name instead of the email address if I use the 'from' parameter.

Code: http://gist.github.com/514207

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

I battled with this as well but the following works:

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

I had used imap_fetch_overview() but the imap_header() gave me all the information I needed.

Had trouble until I spotted that the $header is an array of stdClass Objects. The following 2 lines worked:

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

Full working code with an online example

Extract email addresses list from inbox using PHP and IMAP inbox-using-php-and-imap

I think all you need is just to copy the script.

I am publishing two core functions of the code here as well (thanks to Eineki's comment)

         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"
            );
        } 
Related