php imap получить с адреса электронной почты - PullRequest
14 голосов
/ 08 августа 2010

Как мне получить адрес электронной почты из электронного письма с imap_open?

Если имя отправителя известно, я получаю имя отправителя вместо адреса электронной почты, если я использую параметр from.

Код: http://gist.github.com/514207

Ответы [ 7 ]

30 голосов
/ 18 января 2011
$header = imap_headerinfo($imap_conn, $msgnum);
$fromaddr = $header->from[0]->mailbox . "@" . $header->from[0]->host;
4 голосов
/ 08 января 2011

Я тоже с этим боролся, но работает следующее:

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

Я использовал imap_fetch_overview (), но imap_header () дал мне всю необходимую информацию.

3 голосов
/ 08 августа 2010

В худшем случае, вы можете сами разобрать заголовки с помощью чего-то вроде:

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

$ совпадений будут содержать 3 массива:

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

Получил это от: http://www.php.net/manual/en/function.imap-fetchheader.php#82339

1 голос
/ 07 декабря 2014

Была такая же проблема, как у вас ... пришлось собрать ее вместе, не знаю, почему это такой гонзовар.

Непроверенный пример здесь:

$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 голосов
/ 16 января 2018

Полный рабочий код с онлайн примером

Извлечение списка адресов электронной почты из входящих сообщений с использованием PHP и IMAP Входящие-с использованием PHP-и-*-IMAP 1005 *

Я думаю, все, что вам нужно, это просто скопировать сценарий.

Здесь я также публикую две основные функции кода (благодаря комментарию Эйнеки)

         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 голосов
/ 19 сентября 2017

У меня были проблемы, пока я не заметил, что заголовок $ - это массив объектов stdClass.Работали следующие 2 строки:

    $header=imap_fetch_overview($imap,$countClients,FT_UID);
    $strAddress_Sender=$header[0]->from;
0 голосов
/ 29 декабря 2010

imap_fetch_overview может быть тем, что вы ищете: http://www.php.net/manual/en/function.imap-fetch-overview.php

Пример использования можно найти здесь: http://davidwalsh.name/gmail-php-imap, специально

echo $overview[0]->from;

Эта функция проста, но имеет ограничения. Более исчерпывающая версия находится в imap_headerinfo (http://www.php.net/manual/en/function.imap-headerinfo.php), которая может возвращать подробные массивы всех данных заголовка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...