IMAP, POP3 и NNTP

  • Введение
  • Установка и настройка
  • Предопределённые константы
  • Функции IMAP
    • imap_8bit — Конвертирует 8-битную строку в строку в формате quoted-printable
    • imap_alerts — Возвращает все произошедшие предупредительные сообщения IMAP
    • imap_append — Добавляет строковое сообщение в указанный почтовый ящик
    • imap_base64 — Декодирует закодированный BASE64 текст
    • imap_binary — Конвертирует 8-битную строку в строку base64
    • imap_body — Читает тело сообщения
    • imap_bodystruct — Читает структуру указанной секции тела заданного сообщения
    • imap_check — Проверяет текущий почтовый ящик
    • imap_clearflag_full — Снимает с сообщения установленные флаги
    • imap_close — Закрывает поток IMAP
    • imap_create — Псевдоним imap_createmailbox
    • imap_createmailbox — Создаёт новый почтовый ящик
    • imap_delete — Помечает сообщение для удаления
    • imap_deletemailbox — Удаляет почтовый ящик
    • imap_errors — Получает все произошедшие ошибки IMAP
    • imap_expunge — Удаляет все помеченные для удаления сообщения
    • imap_fetch_overview — Обозревает информацию из заголовков сообщений
    • imap_fetchbody — Извлекает конкретную секцию тела сообщения
    • imap_fetchheader — Получает заголовок сообщения
    • imap_fetchmime — Извлекает MIME-заголовки для конкретной секции сообщения
    • imap_fetchstructure — Читает структуру указанного сообщения
    • imap_fetchtext — Псевдоним imap_body
    • imap_gc — Очищает кеш IMAP
    • imap_get_quota — Получает настройку уровня квоты и статистику использования почтовых ящиков
    • imap_get_quotaroot — Получает настройки квоты для каждого пользователя
    • imap_getacl — Получает ACL для заданного почтового ящика
    • imap_getmailboxes — Читает список почтовых ящиков, возвращая подробную информацию по каждому из них
    • imap_getsubscribed — Получает список всех почтовых ящиков, на которые оформлена подписка
    • imap_header — Псевдоним imap_headerinfo
    • imap_headerinfo — Читает заголовок сообщения
    • imap_headers — Получает заголовки всех сообщений в почтовом ящике
    • imap_is_open — Проверяет, является ли поток IMAP всё ещё корректным
    • imap_last_error — Получает последнюю ошибку IMAP в текущем запросе
    • imap_list — Читает список почтовых ящиков
    • imap_listmailbox — Псевдоним imap_list
    • imap_listscan — Получает список почтовых ящиков, имена которых содержат заданную строку
    • imap_listsubscribed — Псевдоним imap_lsub
    • imap_lsub — Получает список всех почтовых ящиков, на которые оформлена подписка
    • imap_mail_compose — Создаёт MIME-сообщение на основе заданных обёртки и тела
    • imap_mail_copy — Копирует сообщения в указанный почтовый ящик
    • imap_mail_move — Перемещает указанные сообщения в указанный почтовый ящик
    • imap_mail — Отправляет сообщение
    • imap_mailboxmsginfo — Получает информацию о текущем почтовом ящике
    • imap_mime_header_decode — Декодирует элементы заголовка
    • imap_msgno — Получает номер сообщения с заданным UID
    • imap_mutf7_to_utf8 — Декодирует изменённую строку UTF-7 в UTF-8
    • imap_num_msg — Получает количество сообщений в текущем почтовом ящике
    • imap_num_recent — Получает количество новых сообщений в текущем почтовом ящике
    • imap_open — Открывает поток IMAP к почтовому ящику
    • imap_ping — Проверяет, активен ли ещё поток IMAP
    • imap_qprint — Преобразовывает строку из формата quoted-printable в 8-битную строку
    • imap_rename — Псевдоним imap_renamemailbox
    • imap_renamemailbox — Переименовывает почтовый ящик
    • imap_reopen — Переоткрывает поток IMAP к новому ящику
    • imap_rfc822_parse_adrlist — Разбирает адресную строку
    • imap_rfc822_parse_headers — Разбирает строку заголовка письма
    • imap_rfc822_write_address — Получает корректно сформированный адрес электронной почты, заданный именем ящика, хоста и персональной информацией
    • imap_savebody — Сохраняет часть тела сообщения в файл
    • imap_scan — Псевдоним imap_listscan
    • imap_scanmailbox — Псевдоним imap_listscan
    • imap_search — Получает сообщения, удовлетворяющие заданным критериям
    • imap_set_quota — Устанавливает квоту для заданного почтового ящика
    • imap_setacl — Устанавливает ACL для заданного почтового ящика
    • imap_setflag_full — Устанавливает флаги на сообщения
    • imap_sort — Получает и сортирует сообщения
    • imap_status — Получает информацию по статусу почтового ящика
    • imap_subscribe — Подписывает на почтовый ящик
    • imap_thread — Получает дерево связанных сообщений
    • imap_timeout — Устанавливает или получает время ожидания imap
    • imap_uid — Получает UID по номеру сообщения
    • imap_undelete — Снимает с сообщения метку удаления
    • imap_unsubscribe — Отписавает от почтового ящика
    • imap_utf7_decode — Декодирует строку из модифицированной кодировки UTF-7
    • imap_utf7_encode — Преобразовывает строку в кодировке ISO-8859-1 в модифицированную кодировку UTF-7
    • imap_utf8_to_mutf7 — Кодирует строку UTF-8 в изменённую UTF-7
    • imap_utf8 — Преобразовывает MIME-кодированный текст в UTF-8
  • IMAP\Connection — Класс IMAP\Connection
add a note add a note

User Contributed Notes 3 notes

up
39
Wil Barath
14 years ago
For all the people coming here praying for:

1) a dead-easy way to read MIME attachments, or
2) a dead-easy way to access POP3 folders

Look no further.

<?php
function pop3_login($host,$port,$user,$pass,$folder="INBOX",$ssl=false)
{
   
$ssl=($ssl==false)?"/novalidate-cert":"";
    return (
imap_open("{"."$host:$port/pop3$ssl"."}$folder",$user,$pass));
}
function
pop3_stat($connection)       
{
   
$check = imap_mailboxmsginfo($connection);
    return ((array)
$check);
}
function
pop3_list($connection,$message="")
{
    if (
$message)
    {
       
$range=$message;
    } else {
       
$MC = imap_check($connection);
       
$range = "1:".$MC->Nmsgs;
    }
   
$response = imap_fetch_overview($connection,$range);
    foreach (
$response as $msg) $result[$msg->msgno]=(array)$msg;
        return
$result;
}
function
pop3_retr($connection,$message)
{
    return(
imap_fetchheader($connection,$message,FT_PREFETCHTEXT));
}
function
pop3_dele($connection,$message)
{
    return(
imap_delete($connection,$message));
}
function
mail_parse_headers($headers)
{
   
$headers=preg_replace('/\r\n\s+/m', '',$headers);
   
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)?\r\n/m', $headers, $matches);
    foreach (
$matches[1] as $key =>$value) $result[$value]=$matches[2][$key];
    return(
$result);
}
function
mail_mime_to_array($imap,$mid,$parse_headers=false)
{
   
$mail = imap_fetchstructure($imap,$mid);
   
$mail = mail_get_parts($imap,$mid,$mail,0);
    if (
$parse_headers) $mail[0]["parsed"]=mail_parse_headers($mail[0]["data"]);
    return(
$mail);
}
function
mail_get_parts($imap,$mid,$part,$prefix)
{   
   
$attachments=array();
   
$attachments[$prefix]=mail_decode_part($imap,$mid,$part,$prefix);
    if (isset(
$part->parts)) // multipart
   
{
       
$prefix = ($prefix == "0")?"":"$prefix.";
        foreach (
$part->parts as $number=>$subpart)
           
$attachments=array_merge($attachments, mail_get_parts($imap,$mid,$subpart,$prefix.($number+1)));
    }
    return
$attachments;
}
function
mail_decode_part($connection,$message_number,$part,$prefix)
{
   
$attachment = array();

    if(
$part->ifdparameters) {
        foreach(
$part->dparameters as $object) {
           
$attachment[strtolower($object->attribute)]=$object->value;
            if(
strtolower($object->attribute) == 'filename') {
               
$attachment['is_attachment'] = true;
               
$attachment['filename'] = $object->value;
            }
        }
    }

    if(
$part->ifparameters) {
        foreach(
$part->parameters as $object) {
           
$attachment[strtolower($object->attribute)]=$object->value;
            if(
strtolower($object->attribute) == 'name') {
               
$attachment['is_attachment'] = true;
               
$attachment['name'] = $object->value;
            }
        }
    }

   
$attachment['data'] = imap_fetchbody($connection, $message_number, $prefix);
    if(
$part->encoding == 3) { // 3 = BASE64
       
$attachment['data'] = base64_decode($attachment['data']);
    }
    elseif(
$part->encoding == 4) { // 4 = QUOTED-PRINTABLE
       
$attachment['data'] = quoted_printable_decode($attachment['data']);
    }
    return(
$attachment);
}
?>

[EDIT BY danbrown AT php DOT net: Contains a bugfix by "mn26826" on 09-JUN-2010, which fixed the erroneous reference to $imap as the parameter passed to imap_mailboxmsginfo() within the user function pop3_stat().  This was intended to be $connection.]

[EDIT BY visualmind AT php DOT net: Contains a bugfix by "elias-jobview" on 17-AUG-2010, which fixed the error in pop3_list function which didn't have: return $result]

[EDIT BY danbrown AT php DOT net: Contains a bugfix by "chrismeistre" on 09-SEP-2010, which fixed the erroneous reference to $mbox (should be $connection) in the pop3_list() function.]
up
-6
opto
12 years ago
it seems that in new PHP versions, $ssl must be specified even if no ssl is used - I got it working for POP3 only after adding /notls (honour some post I found somewhere)
Klaus
up
-27
dev at bluehead dot com dot br
12 years ago
Because I don't know regular expressions, I hacked the mail_parse_headers() to properly get the last line from the header string:

<?php
function mail_parse_headers($headers)
{

   
$headers=preg_replace('/\r\n\s+/m', '',$headers);
   
$headers=trim($headers)."\r\n"; /* a hack for the preg_match_all in the next line */
   
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)?\r\n/m', $headers, $matches);
    foreach (
$matches[1] as $key =>$value) $result[$value]=$matches[2][$key];
    return(
$result);
}
?>
To Top