Отправка электронной почты
Прием электронной почты
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 | Кодировка, используемая для представления тела письма
| ifsubtype | True, если имеется строка субтипа MIME
| subtype | Собственно субтип MIME
| ifdescription | True, если определена строка description
| description | Строка описания содержания письма
| ifid | True при наличии строки identification
| id | Строка идентификатора
| lines | Количество строк в письме
| bytes | Размер письма в байтах
| ifdisposition | True при наличии строки disposition
| disposition | Строка управления состоянием письма
| ifdparameters | True при наличии массива dparameters
| dparameters | Массив параметров состояния Disposition
| ifparameters | True при наличии массива 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)
Функция возвращает массив строк, содержащих заголовки всех писем. При этом
на каждое письмо приходится одна строка.
|