2015-05-11 3 views
3

Я использую API Gmail для извлечения сообщений из учетной записи Gmail и хранения их в моей БД. Я хочу сохранить To/From адреса электронной почты для каждого сообщения.Получить адреса «от» и «до» с помощью API Gmail

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

Так что сейчас я анализирую их, как это:

if ($header->name === 'From') { 
    preg_match_all("/[\._a-zA-Z0-9-][email protected][\._a-zA-Z0-9-]+/i", $header->value, $matches); 
    $from = $matches[0][0]; 
} 

Но это единственный способ добраться до/из адресов? Только вручную разбор заголовков?

ответ

2

Да. User.messages включает только от/в стандартные RFC 2822 заголовки.

Вы должны избегать использования регулярного выражения для анализа адресов электронной почты. Они сложны и могут содержать почти любой символ. См. Это regex for an example того, как будет выглядеть соответствующая версия.

+0

Спасибо, но как еще я могу получить электронную почту адрес? – Victor

+0

Я бы предложил работать, чтобы удалить любые части, которые, как вы знаете, не являются частью адреса электронной почты. Например. 'First Last <[email protected]>' может быть проанализирован на основе '<' and '>'. – abraham

0

Я использую imap_rfc822_parse_adrlist()

Это работает так:

$arrayOfAddressesFoundInString = imap_rfc822_parse_adrlist('Some Name <[email protected]>', 'localhost'); 

Я создал небольшую функцию, которая делает работу для меня:

function getAddressFromString($address_string) { 
      $address_array = imap_rfc822_parse_adrlist($address_string, "localhost"); 
      if (!is_array($address_array) || count($address_array) < 1) 
       return FALSE; 
      return $address_array[0]->mailbox . '@' . $address_array[0]->host; 
     } 
Смежные вопросы