Получить IP из электронной почты в почтовом ящике IMAP - PullRequest
2 голосов
/ 25 декабря 2010

Здравствуйте. Я хочу написать независимый скрипт для входа в учетную запись электронной почты [IMAP], получить заголовки для каждой электронной почты, найти и сохранить IP-адрес (отправителя или сервера) для каждого из них.Я признаю, что это должно быть немного всеобъемлющим, чтобы охватить 3 ведущих почтовых провайдера (Yahoo, Google и Hotmail), а также другие распространенные форматы заголовков.

В идеале, я хотел бы получить IP-адрес отправителя.адреса, но согласился бы на IP-адреса серверов.

Мне нужно сделать это на PHP в обычной настройке LAMP.

Любые идеи помогут.Спасибо.

Ответы [ 4 ]

4 голосов
/ 27 декабря 2010

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

Быстрое решение, состоящее в том, чтобы не использовать, - использовать RegExp, чтобы попытаться найти нижнюю строку «Received: ...», содержащую IP-адрес.

Очень быстрый тест предполагает, что:

$regExp = '/Received:.*((?:\d+\.){3}\d+)/';

будет соответствовать линиям и возвращать IP-адреса.

Тогда вы просто используете что-то вроде preg_match_all(), чтобы вернуть массив совпавших строк, и используете последнюю из лота.

1 голос
/ 10 февраля 2011

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

$header=imap_fetchheader($imap,$msgn);
$regex='/client\-ip\=(.+?)\;/s';
preg_match_all($regex,$header,$matches);
$clientip=echo($matches[1]);

Это работает для меня как ветер.

1 голос
/ 25 декабря 2010

Этот IP-адрес - это IP-адрес сервера, который его отправил, а не IP-адрес отправителя. Вы хотите IP сервера или IP отправителя?

0 голосов
/ 08 января 2012

Я знаю, что этот пост старый, но выбранный выше ответ действительно получает IP, но он не обязательно получает правильный IP-адрес отправляющего сервера.Ниже приведено регулярное выражение, которое я использовал для получения фактического IP-адреса отправляющих серверов:

/^Received:\sfrom(.*)[\[\(]\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[\]\)]/im
...