Перейти к содержимому

Получение email в PHP

PHP чтение emailСкрипт для чтения писем из почтового ящика через протокол imap.

В продолжении темы сбор статистики пользователей на сайте «Скрипт сбора статистики о пользователях«.

В рассмотренном примере текст писем сохраняется в файлы в отдельной папке на сайте, имена файлов это домены с которых пришли письма.

Код скрипта, файл prs.php

$host        = 'imap.mail.ru';
$port        =  993;
$login       = 'address@mail.ru';
$pass        = 'password';
$param       = '/imap/ssl/novalidate-cert';
$folder      = 'INBOX';
if($connect_imap  = imap_open('{'.$host.':'.$port.$param.'}'.$folder,$login,$pass)){
    echo "Connected<br>";
	// проверим ящик на наличие не просмотренных писем
	$mails = imap_search($connect_imap, 'UNSEEN');
	if($mails){
		foreach($mails as $num_mail){
			$header = imap_header($connect_imap, $num_mail);
			$arr['from'] = $mail_from = $header->fromaddress;							//echo "От кого: $mail_from <br/>";
			$arr['subject'] = $subject = $header->subject;								//echo "Тема письма: $subject <br/>";
			$arr['text'] = $text_mail = imap_fetchbody($connect_imap, $num_mail, 1); 	//echo "Тело письма: $text_mail <br/>"; echo "<hr/>";
			save_email($arr);
		}
	}else{
		echo "Нет новых писем";
	}
	imap_close($connect_imap);
} else { exit ("Нельзя соединиться: " . imap_last_error() ."<br>");  echo "Ошибка<br>";  };

function save_email($arr){
	$m1=array('Report',' ','www.'); $m2=array('','','');
	$file = 'fd/'.str_replace($m1,$m2,$arr['subject']).'.txt';
	if(!file_exists($file)) file_put_contents($file,$arr['text']);
	else file_put_contents($file,$arr['text'],FILE_APPEND);
}

разберем скрипт:

$host        = 'imap.mail.ru';
$port        =  993;
$login       = 'address@mail.ru';
$pass        = 'password';
$param       = '/imap/ssl/novalidate-cert';
$folder      = 'INBOX';

Настройка для соединения с почтовым ящиком, здесь необходимо проверить $host и $port у вашего почтового домена, также уточнить $login, у некоторых достаточно логина без @domen.ru. Также иногда приходится дать доступ к почтовому ящику другим приложениям для gmail.com это необходимо сделать вручную.

$folder — папка в почтовом ящике в которой проверяем письма, в почтовом ящике необходимо создать папку и проверить чтобы она была доступна для почтовых программ.

if($connect_imap  = imap_open('{'.$host.':'.$port.$param.'}'.$folder,$login,$pass)){

Строка соединения с почтовым ящиком

$mails = imap_search($connect_imap, 'UNSEEN');

Строка, которая пытается получить список писем по условию. Для mail.ru некоторые условия не работают. Список условий можно найти на сайте php.net. Очень интересные из них NEW, FROM. В нашем случаем мы получаем все не просмотренные письма.

foreach($mails as $num_mail){
	$header = imap_header($connect_imap, $num_mail);
	$arr['from'] = $mail_from = $header->fromaddress;							//echo "От кого: $mail_from <br/>";
	$arr['subject'] = $subject = $header->subject;								//echo "Тема письма: $subject <br/>";
	$arr['text'] = $text_mail = imap_fetchbody($connect_imap, $num_mail, 1); 	//echo "Тело письма: $text_mail <br/>"; echo "<hr/>";
	save_email($arr);
}

цикл обхода полученных писем, здесь мы разбираем каждое письмо и формируем массив arr, которые передаем в функцию save_email для сохранения данных из письма.

function save_email($arr){
	$m1=array('Report',' ','www.'); $m2=array('','','');
	$file = 'fd/'.str_replace($m1,$m2,$arr['subject']).'.txt';
	if(!file_exists($file)) file_put_contents($file,$arr['text']);
	else file_put_contents($file,$arr['text'],FILE_APPEND);
}

Функция сохраняет данные из письма в файл.

$m1=array('Report',' ','www.'); $m2=array('','','');
$file = 'fd/'.str_replace($m1,$m2,$arr['subject']).'.txt';

Выбираем домен из темы письма, обрезая все лишнее и создаем переменную file, в которую сохраним данные.

if(!file_exists($file)) file_put_contents($file,$arr['text']);
else file_put_contents($file,$arr['text'],FILE_APPEND);

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

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

Конечно здесь нет условия на выборку писем, и все письма которые мы получим в данном скрипте помечаются как прочтенными на почтовом ящике, но это не проблема если почтовый ящик заведен именно для этих целей.

Читайте из этой же серии

1 часть Скрипт сбора статистики о пользователях

2 часть Получение email в PHP

3 часть Обработка файла и сохранение в базу данных

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.