Как получить адрес электронной почты из электронной почты с помощью imap_open?
Если имя отправителя известно, я получаю имя отправителя вместо адреса электронной почты, если я использую параметр "from".
Как получить адрес электронной почты из электронной почты с помощью imap_open?
Если имя отправителя известно, я получаю имя отправителя вместо адреса электронной почты, если я использую параметр "from".
$header = imap_headerinfo($imap_conn, $msgnum);
$fromaddr = $header->from[0]->mailbox . "@" . $header->from[0]->host;
Я тоже сражался с этим, но следующие работы:
// 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() дал мне всю необходимую информацию.
В худшем случае вы можете самостоятельно разобрать заголовки:
<?php
$headers=imap_fetchheader($imap, $msgid);
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $headers, $matches);
?>
$match будет содержать 3 массива:
$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])
Получите это от: http://www.php.net/manual/en/function.imap-fetchheader.php#82339
Если бы у вас была такая же проблема, как и вы... ей пришлось собрать ее вместе, не знаю, почему это такое gonzoware.
Неподтвержденный пример здесь:
$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);
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), которая может возвращать подробные массивы всех данных заголовка.
У меня возникли проблемы, пока я не заметил, что заголовок $представляет собой массив объектов stdClass. Следующие две строки работали:
$header=imap_fetch_overview($imap,$countClients,FT_UID);
$strAddress_Sender=$header[0]->from;
Полный рабочий код с онлайн-примером
Извлечь список адресов электронной почты из почтового ящика с помощью PHP и IMAP Входящие-с помощью PHP-и--IMAP
Я думаю, вам нужно всего лишь скопировать script.
Я публикую здесь две основные функции кода (спасибо комментарию 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"
);
}