2013-08-14 2 views
0

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

$header = explode("\n", imap_fetchheader($mbox,$msgno)); 
echo "<br>"; 
    for ($i=1; $i<count($header); $i++) 
    { 
     echo $header[$i] . "<br>"; 
    } 


output: 

Delivered-To: [email protected] 
X-WM-Delivered: [email protected] 
Received: from ElcotPC ([127.0.0.1]) 
(envelope-sender) 
by 127.0.0.1 with ESMTP 
for ; Wed, 31 Jul 2013 09:14:19 +0530 
From: "user1" 
To: 
Cc: 
Subject: testing with attachment 
Date: Wed, 31 Jul 2013 09:14:18 +0530 

«из», «в», поле «сс» пустые без почты ..

я хочу вывод, как это ..

Delivered-To: [email protected] 
    X-WM-Delivered: [email protected] 
    Received: from ElcotPC ([127.0.0.1]) 
    (envelope-sender) 
    by 127.0.0.1 with ESMTP 
    for ; Wed, 31 Jul 2013 09:14:19 +0530 
    From: "user1" <[email protected]> 
    To: <[email protected]> 
    Cc: <[email protected]> 

как получить адрес электронной почты в «от «,» и «cc»?

+1

вы shoudn't эхо это так. он проглатывает теги. используйте htmlspecialchars, прежде чем вы это сделаете, или какой-нибудь другой метод отладки, который выводит его правильно. – mark

+0

супер .. Большое спасибо .. Получил вывод. – thuk

+0

@mark Знаете ли вы, как получить вложение в почте и сохранить его в папке с помощью php? – thuk

ответ

2

Обновление:
Всегда лучше использовать код, который легко доступен, поэтому я проверил, существует ли уже функция imap-parsing. Он имеет: imap_rfc822_parse_headers. Read the docs, а также ссылки на всевозможные функции imap_*. Возможно, imap_rfc822_parse_adrlist является точно что вам нужно?


Основной preg_match_all вызов мог бы сделать эту работу, я думаю:

if (preg_match_all('/^\s*(From|To|Cc):[^<]*<([^>]+)\>/m',$string, $addresses) 
{ 
    $addresses = array_merge($addresses[1], $addresses[2]); 
    print_r($addresses); 
} 

Если выход:

array (
    'From' => '[email protected]', 
    'To' => '[email protected]', 
    'Cc' => '[email protected]', 
) 

Я думаю, что это то, что вы искали.
Регулярное выражение объяснено:

  • ^\s* соответствует началу линии, и ноль или более символов-пропусков
  • (From|To|Cc) матчей (и группы) From, To или Cc
  • :[^<]*<: соответствий (но Безразлично» т группа) двоеточие, и любой символ, адрес ограничивающего <
  • ([^>]+) за исключением: (и соответствующие два групп) все после <, что не >
  • \>: Может быть опущено, но совпадает с адресом-разграничение >
  • m: multi-line. Если оставить из ведущих ^ означают начала строки, теперь это означает начала линии

Примечание: Это выражение не имеет дело с запятыми адресов или нескольких адресов, и это может быть полезно, чтобы позвонить :

filter_var($addresses['From'], FILTER_VALIDATE_EMAIL) 

или использовать array_map для фильтрации $addresses[2] до слияния ...

+0

большое спасибо за ваше решение .. – thuk

+1

@thuk: Я обновил, оказывается, что нет необходимости в регулярном выражении. Есть базовые функции синтаксического анализа imap, которые легко доступны в любом случае –

+0

@Ootegem для вашей информации – thuk

Смежные вопросы