Я люблю все автоматизировать, теперь очередь дошла до бесконечных "Письмо не может быть доставлено". Форум рассылает сообщения, а пользователи не удосуживаются вписать правильный адрес. До сего момента я печально скармливал адрес из отлупа в батник, который пользователю сносил адрес вообще. Для автоматизации потребовалось проверять почту, чтобы не пересекаться с основными клиентами - через IMAP, а поскольку форум на PHP, то и выполнять надо было все в PHP.
Итак, просмотр почты (основной костяк для упрощения):
Код:
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'olegon@olegon.ru';
$password = 'password';
if ($imap = imap_open($hostname, $username, $password))
{
// Проверка входящих
if ($messages = imap_search($imap 'ALL'))
{
// Сортировка, новые вперед
rsort($messages);
// Цикл по сообщениям
foreach ($messages as $message_number)
{
// Вытаскиваем сводку и тело письма
$overview = imap_fetch_overview($imap, $message_number, 0);
$message = imap_fetchbody($imap, $message_number, 2);
var_dump($overview, $message);
}
}
else
{
exit('No messages on the IMAP server.');
}
}
else
{
exit('Unable to connect to the IMAP server.');
}
Для работы должен быть установлен php-imap.rpm (НЕ php-pear-Net-IMAP), ну и не забывайте о всевозможных кодировках. Вместо поиска ALL в search можно использовать разные выражения:
ALL - возвращать все сообщения, соответствующие остальным критериям
ANSWERED - сообщения с выставленным флагом \\ANSWERED
BCC "string" - сообщения в поле Bcc: которых присутствует "string"
BEFORE "date" - сообщения с Date: до "date"
BODY "string" - сообщения содержащие "string" в теле
CC "string" - сообщения в поле Cc: которых присутствует "string"
DELETED - удаленные сообщения
FLAGGED - сообщения с установленным флагом \\FLAGGED (иногда называют "Срочное" или "Важное")
FROM "string" - сообщения в поле From: которых присутствует "string"
KEYWORD "string" - сообщения с ключевым словом "string"
NEW - новые сообщения
OLD - старые сообщения
ON "date" - сообщения с Date: равным "date"
RECENT - означает сообщения с выставленным флагом \\RECENT
SEEN - прочтенные сообщения (установлен флаг \\SEEN)
SINCE "date" - сообщения с Date: после "date"
SUBJECT "string" - сообщения в поле Subject: которых присутствует "string"
TEXT "string" - сообщения с текстом "string"
TO "string" - сообщения в поле To: которых присутствует "string"
UNANSWERED - неотвеченные сообщения
UNDELETED - не удаленные сообщения
UNFLAGGED - сообщения без установленных флагов
UNKEYWORD "string" - сообщения, не имеющие ключевого слова "string"
UNSEEN - непрочтенные сообщения
Сам поиск описан в RFC2060, п. 6.4.4.