PHP-4 Эффективная работа


Отправка электронной почты
Прием электронной почты

12.2.1.11. Переименование ящика: imap_renamemailbox

int imap_renamemailbox (int imap_stream, string old_mbox, string new_mbox)

Функция выполняет переименование почтового ящика. Возвращает true в случае успешного завершения операции или false при ошибке.

12.2.1.12. Установка квоты для ящика: imap_set_quota

int imap_set_quota (int imap_stream, string quota_root, int quota_limit)

Устанавливает максимальную квоту для почтового ящика. Для этого поток imap_st rearn должен быть открыт администратором. При открытии потока рядовым пользователем никаких операций эта функция выполнять не будет.

Аргумент quota_root представляет собой имя почтового ящика, для которого устанавливается квота, и должен соответствовать стандартным соглашениям об именовании ящиков. Аргумент quota_limi t задает максимальный размер ящика в килобайтах.

При успешном завершении функция возвращает true, а при ошибке — false. Вот пример ее использования:
$mbox = imap_open ("{your.imap.host:143}",
                        "mailadmin", "password");
if(!imap_set_quota($mbox, "user.kalowsky", 3000)) {
          print "Error in setting quota\n";
          return;
} imap_close($mbox);

12.2.1.13. Сортировка содержимого ящика: imap_sort

array imap_sort (int stream, int criteria, int reverse, int options)

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

SORTDATEСортировка по дате отправки сообщений
SORTARRIVAL Сортировка по дате получения сообщений
SORTFROM Сортировка по адресу отправителя
SORTSUBJECTСортировка по теме сообщения
SORTTO Сортировка по адресу получателя
SORTCC Сортировка по адресам в поле копии
SORTSIZEСортировка по размеру сообщений

Аргумент flags должен представлять собой битовую маску, которая может содержать следующие компоненты:

SE_UIDВозвращает не номера сообщений, а их UID
SE_NOPREFETCHОтменяет предварительную загрузку найденных сообщений

В случае если аргумент reverse равен 1, сортировка производится в противоположном направлении.

12.2.1.14. Проверка состояния ящика: imap_status

object imap_status (int imap_stream, string mailbox, int options)

Функция предназначена для проверки состояния произвольного почтового ящика (не обязательно текущего). Разрешенные значения аргумента options, кото- рые, как и в других функциях этой главы, представляют собой битовую маску, следующие:

SA_MESSAGESУстановить свойство status->messages равным количеству сообщений в данном почтовом ящике
SA_RECENTУстановить свойство status->recent равным количеству новых сообщений в почтовом ящике
SA_UNSEEN Установить status->unseen равным количеству не просмотренных сообщений в данном почтовом ящике
SA_UIDNEXTУстановить свойство status->uidnext равным следующему UID в почтовом ящике
SA_UIDVALIDITY Установить свойство status->uidvalidity равным некоторой константе, которая изменяется, как только UID для почтового ящика становится недопустимым
SA_ALLУстановить все перечисленные выше свойства

12.2.2. Операции с сообщениями

12.2.2.1. Ввод нового письма: imap_append

int imap_append (int imap_stream, string mbox,
                    string message [.string flags])

Функция помещает в указанный почтовый ящик (аргумент mai lbox) новое сообщение. В случае если при вызове указаны дополнительные флаги, они также записываются в этот ящик. При успешном завершении функция возвращает true, а при ошибке — false.

совет
       При работе с IMAP-сервером Cyrus вы должны использовать для завершения строки комбинацию «\r\n».

Имейте в виду, что эта функция не предназначена для отправки почты. Она просто «подбрасывает» в почтовый ящик новое письмо, а не гонит его в Сеть! Вот как работает imap_append:

// Открываем ящик, в котором хранятся черновики (Drafts)
$stream = imap_open("{your.imap.host}INBOX.Drafts",
                    "username", "password");

$check = imap_check($stream);
print "Количество сообщений: ". $check->Nmsgs."\n";
imap_append($stream,"{your.imap.host}INBOX.Drafts"
                   ."From: me@my.host\r\n"
                   ."To: you@your.host\r\n"
                   ."Subject: test\r\n"
                   ."\r\n"
                   ."Подметное письмо, тайно проникшее\r\n"
                   ."в ваш ящик!\r\n"
                   );
$check = imap_check($stream);
print "Количество сообщений : ". $check->Nmsgs."\n";
imap_close($stream);

12.2.2.2. Загрузка тела письма: imap_body

string imap_body (int imap_stream, int msg_number [, int flags])

Функция imap_body() возвращает тело письма из текущего ящика с номером msg_n umber. Необязательный аргумент flags представляет собой битовую маску, которая может принимать одно или несколько объединенных с помощью «ИЛИ» значений:

FT_UIDНомер сообщения представляет собой UID
FT_PEEK Запретить установку флага \Seen, если он не был установлен ранее
FT_INTERNALВозвращаемая функцией строка представляется во внутреннем формате и не преобразуется в формат CR-LF

Функция imap_body О возвращает «сырую» копию тела сообщения без какого-либо декодирования форматов. Если вам необходимо извлечь отдельные части сообщения в MIME-формате, вы должны применить к результату этой функции вызов imap_fetchstructure() (см. раздел 12.2.2.8), который позволит проанализировать структуру письма, а затем imap_fetchbody () (см. раздел 12.2.2.6) для извлечения отдельного компонента.

12.2.2.3. Сброс всех флагов: imap_clearflag_full

string imap_clearflag_full (int stream, string sequence,
               string flag, string options)

Эта функция позволяет вам сбросить установленные ранее флаги сообщений. При этом вы можете воздействовать на флаги: «\\Seen», «\\Answered», «\\Flagged», «\\Deleted», «\\Draft» и «\\Recent» (в соответствии с RFC2060).

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

ST_UID Аргумент sequence содержит не номер письма, а его UID

12.2.2.4. Выделение сообщения для удаления:imap delete

int imap_delete (int imap_stream, int msg_number [, int flags])

Функция ima p_de1ete () помечает сообщение, адресуемое аргументом msg_n urnbe r, как подлежащее удалению. Дополнительный параметр flags в настоящей версии РНР может принимать только одно значение — FT_UID, указывающее, что аргумент msg_number должен интерпретироваться как UID. Сообщения, помеченные для удаления, остаются в почтовом ящике до явного вызова функции imap_expunge () (см. раздел 12.2.1.4) или до вызова imap_close() (см. раздел 12.2.5.2) с дополнительным параметром CL_EXPUNGE.

12.2.2.5. Загрузка заголовков «в нарезку»:imap_fetch_overview

array imap_fetch_overview (int imap_stream, string sequence [, int flags])

Функция производит выборку наиболее часто используемых заголовков заданного сообщения и возвращает массив с их содержимым. Если используется аргумент flags, имеющий значение FT_UID, то вместо номера сообщения в ящике аргумент sequence должен содержать UID этого сообщения. Результатом работы функции является ассоциативный массив, элементы которого имеют следующие ключи и значения:

subject Тема письма
from Отправитель
date Дата и время оправки
messagejdИдентификатор сообщения
rencesrefe Ссылки на данное сообщение
size Размер в байтах
uid UIDсообщения в почтовом ящике
msgno Номер сообщения в почтовом ящике
recentСообщение помечено как новое
flagged Сообщение имеет одну или несколько пометок
answeredСообщение помечено как отработанное (послан ответ)
deletedСообщение помечено как подлежащее удалению
seenСообщение помечено как уже прочитанное
draftСообщение помечено как черновик
Ниже приведен пример использования этой функции.
$mbox = imap_open(" {your. i map. host: 143}" , "user name" , "password")
       or die("He могу подключиться: " . imap_last_error()) ;

// Загружаем четыре сообщения - 2,4,5,6
$overview = imap_f etch_overview($mbox , "2 ,4 : 6" ,0) ;

// Теперь выводим характеристики этих сообщений
if (is_array ($overview) ) {
       reset($overview) ;
       while( li st ($key , $val) = each($overview)) {
                             print $val->msgno
                             . " - " . $val->date
                             . " - " . $val->subject
                             . "\n";
                                       }
                             }
imap_close($mbox) ;

В случае если вам необходимо получить все заголовки письма, определенные стандартом RFC-822, вам необходимо воспользоваться функцией imap_fetchheader (см. раздел 12.2.2.7) и самостоятельно разобрать полученную строку.

12.2.2.6. Загрузка тела письма: imap_fetchbody

string imap_f etchbody (int imap_stream, int msg_number,
                             string part_number [, flags flags])

Функция производит загрузку заданного фрагмента сообщения (в случае составных MIME-объектов) в виде текстовых строк и возвращает результат в виде текстовой строки. Аргумент part_number представляет собой строку из целых чисел, разделенных точками, которые однозначно идентифицируют часть письма в соответствии со спецификацией IMAP4. Само тело части сообщения этой функцией не декодируется!

Дополнительный аргумент flags представляет собой битовую маску, которая может формироваться из следующих значений:

FT_UIDАргумент msg_number представляет собой UID
FT_PEEK He надо устанавливать флаг \Seen, если он не был установлен ранее
FT_INTERNAL Возвращаемая строка представляется во «внутреннем формате» без попыток приведения к формату CR-LF

12.2.2.7. Загрузка заголовка «кусочком»:imap_fetchheader

string imap_fetchheader (int imap_stream, int msgno, int flags)

Функция осуществляет загрузку полного заголовка сообщения формата RFC-822 в виде текстовой строки, которая возвращается как результат вызова функции. Вы можете указать следующие опции в аргументе flags:

FT_UIDАргумент msgno представляет собой UID сообщения
FTJNTERNAL Возвращаемое функцией значение сохраняется во «внутреннем формате», и никакие попытки канонизировать формат с помощью CR-LF не предпринимаются
FT_PREFETCHTEXT Во время вызова функции производится загрузка во внутренние структуры PHP-машины тела сообщения, что позволяет сократить время обработки в дальнейшем

12.2.2.8. Загрузка структуры письма: imap_fetchstructure

object imap_fetchstructure (int imap_stream, int msg_number [, int flags])

Функция производит формирование объекта, в который помещается вся информация о структуре заданного сообщения. Дополнительный аргумент flags может принимать в настоящее время только одно значение — FT_UID, которое указывает на необходимость интерпретировать аргумент msg_number как UID. Возвращаемый объект содержит описание конверта сообщения, даты отправки, размера, флагов и структуры тела письма в целом и такую же информацию для каждого из компонентов MIME-сообщения. В целом,структура объекта имеет вид, представленный в табл. 12.1.

Таблица 12.1. Структура объекта, формируемого функцией imap_fetchstructure()
Тип Содержание
encoding Кодировка, используемая для представления тела письма
ifsubtypeTrue, если имеется строка субтипа MIME
subtype Собственно субтип MIME
ifdescription True, если определена строка description
description Строка описания содержания письма
ifidTrue при наличии строки identification
id Строка идентификатора
linesКоличество строк в письме
bytesРазмер письма в байтах
ifdisposition True при наличии строки disposition
dispositionСтрока управления состоянием письма
ifdparameters True при наличии массива dparameters
dparameters Массив параметров состояния Disposition
ifparametersTrue при наличии массива parameters
parametersМассив параметров MIME
partsМассив объектов, описывающих параметры каждого компонентов письма

12.2.2.9. Загрузка заголовка: imap_header и imap_headerinfo

object imap_header (int imap_stream, int msg_number
                                                            [, int fromlength
                                                            [, int subjectlength
                                                            [, string defaulthost]]])
Эта функция представляет собой синоним для imap_headerinfo() и полностью ей идентична.
object imap_headerinfo (int imap_stream, int msg_number
                                                            t, int fromlength
                                                            [, int subjectlength
                                                            [, string defaulthost]]])

Функция возвращает объект, содержащий элементы заголовка письма: remall, date,Date, subject, Subject, in_reply_to,message_id, newsgroups, followup_to, а также флаги:

Recent ' R' Свежее (новое) и просмотренное
' N ' Свежее, но не просмотренное
' ' «Не первой свежести»
Unseen ''U ' Не просмотренное, но не новое
' ' Просмотренное ИЛИ не просмотренное и не новое
Answered' А' Ответ отправлен
' ' Ответ не отправлен
Deleted' D' Отмечено как удаляемое
' ' Не отмечено для удаления
Draft ' X' Это черновик
' ' Это не черновик
Flagged ' F ' Помечено флажком
' ' Дополнительных пометок нет

Уместно разобраться, в чем разница между флагами Recent и Unseen. Первый из них присваивается сообщениям, поступившим после предыдущего обращения пользователя к IMAP-серверу. Второй флаг устанавливается, если сообщение ранее не было прочитано. Поэтому, чтобы убедиться, что это сообщение не было просмотрено ранее, вы должны использовать комбинацию:
Unseen == 'U' || Recent == 'N'
Далее объект содержит:

1) поле toaddress, представляющее собой полное содержимое заголовка То:, длиной до 1024 символов;
2) массив to [ ], содержащий объекты, извлеченные из заголовка То:, которые имеют следующие поля:
- personal;
- adl;
- mailbox;
- host;
3) поле fromaddress, представляющее собой полное содержимое заголовка F rот:;
4) массив f rom[], содержащий объекты, извлеченные из заголовка From:, которые имеют поля personal, adl, mailbox и host;
5) поле ccaddress, в котором содержится полное содержимое заголовка cc: с максимальной длиной 1024 символа;
6) массив cc [ ], представляющий собой результат разбора заголовка cc: и содержащий объекты с полями personal, adl, mailbox и host;
7) поле bccaddress, в котором содержится полное содержимое заголовка bcc: с максимальной длиной 1024 символа;
8) массив bсс [], представляющий собой результат разбора заголовка bсс : и содержащий объекты с полями personal, adl, mailbox и host;
9) поле reply_toaddress, в котором содержится полное содержимое заголовка Reply То: с максимальной длиной 1024 символа;
10) массив reply_to [ ], представляющий собой результат разбора заголовка Reply То: и содержащий объекты с полями personal, adl, mailbox и host;
11) поле senderaddress, в котором содержится полное содержимое заголовка Sender: с максимальной длиной 1024 символа;
12) массив sender [ ], представляющий собой результат разбора заголовка Sender: и содержащий объекты с полями personal, adl, mailbox и host;
13) поле return_path, в котором содержится полное содержимое заголовка Return Path : с максимальной длиной 1024 символа;
14) массив return_path [ ], представляющий собой результат разбора заголовка Return Path: и содержащий объекты с полями personal, adl, mailbox и host;
15) поле udate, содержащее дату отправки письма в формате UNIX;
16) поле fetchfrom, представляющее собой форматированный заголовок From:;
17) поле fetchsubject, представляющее собой форматированный заголовок Subject:.

12.2.2.10. Считывание заголовков писем: imapjieaders

array imap_headers (int imap_stream)

Функция возвращает массив строк, содержащих заголовки всех писем. При этом на каждое письмо приходится одна строка.

назад
далее

Сайт управляется системой uCoz