Удаление полученных заголовков электронной почты в PHP - PullRequest
2 голосов
/ 17 сентября 2011

У меня есть PHP-скрипт, который имеет источник электронной почты.Я стремлюсь разбить заголовки на переменные $To и $From

Проблема возникает при попытке разбить строки на и из строк.Мне нужен скрипт, чтобы взять

From: John <john@somesite.com>
To: Susy <susy@mysite.com>, Steven <steven@somesite.com>, Mary <mary@mysite.com>

и вернуть только адрес отправителя и адрес, который находится на моем сайте.Т.е.

$From = 'john@somesite.com';
$To = array('susy@mysite.com', 'mary@mysite.com');

Таким образом, код должен превратить строку адресов электронной почты в массив, а затем отфильтровать адреса других сайтов.Это первая часть, которая оказывается трудной из-за различных способов, которыми адрес электронной почты может быть указан в заголовке.

Ответы [ 3 ]

2 голосов
/ 17 сентября 2011

Редактировать

Поскольку вы уже указали, что заголовки представлены в виде строки , но вам действительно нужно проанализировать адреса из нее, нетнужно заново изобрести колесо:

Эти две функции выполнят работу за вас, последняя даст вам массив с объектами, для которых предварительно заданы адреса электронной почты.-парсированный, так что вы можете легко принимать решения на основе хоста.


Мне не совсем понятно, в чем заключается ваша проблема из вашего вопроса.

Пока вы обеспокоены фильтрацией строки, содержащей один адрес электронной почты (приведите ее к массиву)) или массив, содержащий один или несколько адресов:

Чтобы отфильтровать существующий массив адресов электронной почты, вы можете использовать простую функцию отображения массива, которая установит для любого письма, не соответствующего хосту вашего сайта, значение FALSE изатем отфильтруйте копию массива Demo :

$addresses = array(
   'mary@mysite.com',
   'mary@othersite.com',
);

$myhost = 'mysite.com';

$filtered = array_map(function($email) use ($myhost) {
    $host = '@'.$myhost;
    $is = substr($email, -strlen($host)) === $host;
    return $is ? $email : FALSE;
}, $addresses);

$filtered = array_filter($filtered);

print_r($filtered);

Этот код предполагает, что вы уже собрали адреса электронной почты.Вы не указали, как вы анализируете заголовки, которые уже есть в вашем вопросе, поэтому на самом деле неизвестно, с какими данными вы имеете дело, поэтому я решил начать с конца вашей проблемы.Дайте нам знать, если у вас есть больше информации.

1 голос
/ 26 декабря 2013
preg_match_all("/<([^><]+)/", $headers, $matches);
print_r($matches[1]);

Вывод:

Array
(
    [0] => john@somesite.com
    [1] => susy@mysite.com
    [2] => steven@somesite.com
    [3] => mary@mysite.com
)

Первый всегда С адрес электронной почты.

Демонстрация в реальном времени

1 голос
/ 17 сентября 2011
 <?php

 $k= "......Subject: Write the program any of your favorite language whenever if you feel
  you are free
 From: Vinay Kumar <vinaykumarjg@gmail.com>
 To: msnjsk@gmail.com, mithunsatish@gmail.com,Susy <susy@mysite.com>, Steven      <steven@somesite.com>, Mary <mary@mysite.com>
 Content-Type: multipart/alternative; boundary=bcaec53964ec5eed2604acd0e09a

 --bcaec53964ec5eed2604acd0e09a
 Content-Type: text/plain; charset=ISO-8859-1
 .......";


 if(preg_match('/From:(?P<text>.+)\r\n/', $k, $matches1))
 {

      if(preg_match('/(?P<from>([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])' .'(([a-z0-9-])*([a-z0-9]))+' . '(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+)/', $matches1['text'],$sender ))
      {

         print_r($sender['from']);

      }

 }


 if(preg_match('/To:(?P<text>.+)\r\n/', $k, $matches2))
 {
    if(preg_match_all('/(?P<to>([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])' .
'(([a-z0-9-])*([a-z0-9]))+' . '(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+)/', $matches2['text'], $reciever))
    {
        if(isset($reciever['to']))
        {
                print_r($reciever['to']);
        }
    }
 }

чтобы получить предмет:

 if(preg_match('/Subject:(?P<subject>.+)\r\n/', $k, $subject))
 {    

         print_r($subject['subject']);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...