Отправка электронной почты
Прием электронной почты
12.2.2.11. Создание MIME-сообщения:imap_mail_compose
string imap_mail_compose (array envelope, array body)
Функция предназначена для создания MIME-сообщения, сегменты которого передаются как массив body, а конверт сообщения — как набор заголовков, представленных массивом envelope.
Вот как эта функция используется на практике:
<?php
$envelope["from"]="musone@afterfive.com";
$envelope["to"]="musone@darkstar";
$envelope["cc"]="musone@edgeglobal .com";
$partl["type"]=TYPEMULTIPART;
$partl["subtype"]="mixed";
$filename="/tmp/imap.c.gz";
$fp=fopen($filename,"r");
$contents=fread($fp,filesize($filename));
fclose($fp):
$part2["type"]=TYPEAPPLICATION;
$part2["encoding"]=ENCBINARY;
$part2["subtype"]="octet-stream";
$part2["description"]=basename($filename);
$part2["contents.data"]=$contents;
$part3 ["type"]=TYPETEXT;
$part3[ "subtype" ]=" plain";
$part3[" description "]="description3";
$part3[ "contents. data "]=" contents. data3\n\n\n\t"
$body[l]=$partl;
$body [2]=$part2;
$body [3]=$part3;
echo nl2br (imap_mail_compose($envelope,$body) ) ;
?>
12.2.2.12. Копирование писем в ящик: imap_mail_copy
int imap_mail_copy (int imap_stream, string msglist,
string mbox [, int flags])
Функция копирует почтовые сообщения, идентифицируемые диапазоном msglist,
в почтовый ящик, указанный аргументом mbox. Необязательный аргумент flags
представляет собой битовую маску, которая может содержать поля:
CP_UID | Номера сообщений представлены через UID
| CP_MOVE | Удалять сообщения из исходного ящика после их копирования
|
В случае успешного завершения функция возвращает truе, а при ошибке — false.
12.2.2.13. Перемещение сообщений: imap_mail_move
int imap_mai l_move (int imap_stream, string msglist,
string mbox [, int flags])
Осуществляет перемещение сообщений в указанный почтовый ящик mbox. Фактически — это специализированная версия предыдущей функции i map_mai l_copy
с установленным флагом CP_MOVE.
12.2.2.14. Определение номера сообщения: imapjnsgno
int imap_msgno (int imap_stream, int uid)
Функция возвращает номер сообщения для указанного UID. Это инверсное преобразование по отношению к imap_uid() (см. раздел 12.2.2.17).
12.2.2.15. Разбор заголовков: imap_rfc822_parse_headers
object imap_rf c822_parse_headers (string headers
[, string def aulthost] )
Функция возвращает объект, содержащий характеристики того или иного заголовка, аналогично функции imap_header() (см. раздел 12.2.2.9), за исключением
флагов и прочих элементов, поступающих от IMАР-сервера.
12.2.2.16. Включение флагов: imap_setflag_full
string imap_setf lag_f ull (int stream, string sequence,
string flag, string options)
Функция устанавливает заданные флаги для указанного сообщения или их
последовательности. При этом вы можете установить флаги «\\Seen», <<\\Answered>>,
«\\Flagged», «\\Deleted», «\\Draft» и «\\Recent» в соответствии с RFC-2060.
Параметр options представляет собой битовую маску, для которой в настоящее
время предусмотрено только одно значение — ST_UID, означающее, что аргумент
sequence содержит не порядковые номера писем, а их UID.
Функция может использоваться, например, следующим образом:
$mbox = imap_open("{your.imap.host:143}","username","password")
or die("can't connect: ".imap_last_error());
$status = imap_setflag_full($mbox,"2,5","\\Seen \\Flagged");
print gettype($status)."\n";
print $status."\n";
imap_close($mbox);
12.2.2.17. Определение UID сообщения: imap_uid
int imap_uid (int imap_stream, int msgno)
Функция возвращает UID сообщения, соответствующего заданному номеру сообщения в ящике. UID представляет собой уникальный идентификатор, который не
изменяется во времени, в то время как значения номеров сообщений вполне могут
измениться. Эта функция является по своему действию противоположной функции imap_msgno() (см. раздел 12.2.2.14).
12.2.2.18. Вернуть удаленное письмо: imap_undelete
int imap_undelete (int imap_stream, int msg_number)
Функция снимает флаг «Помечено для удаления» с заданного сообщения, который был ранее установлен функцией imap_delete() (см. раздел 12.2.2.4) или
imap_mail_move() (см. раздел 12.2.2.13).
Функция возвращает true при успешном завершении и false — при ошибке.
12.2.3. Изменение формата сообщений
12.2.3.1. Конвертирование строки: imap_8bit
string imap_8bit (string string)
Осуществляет преобразование обычной 8-битной строки в формат, предусмотренный RFC2045 (раздел 6.7 стандарта). Возвращает перекодированную строку.
См. также описание imap_qprint() (раздел 12.2.3.5).
12.2.3.2. Декодирование BASE64: imap_base64
string imap_base64 (string text)
Функция imap_base64() производит декодирование строки, представленной в формате BASE-64 (стандарт RFC2045, раздел 6.8). Результат декодирования возвращается функцией в виде обычной строки.
12.2.3.3. Кодирование BASE64: imap_binary
string imap_binary (string string)
Функция преобразует 8-битную строку для передачи по 7-битным протоколам по
алгоритму BASE-64 (стандарт RFC2045, раздел 6.8). Возвращает строку в формате
BASE-64. Для обратного преобразования используется функция imap_base64()
(см. раздел 12.2.3.2).
12.2.3.4. Декодирование заголовков MIME:imap_mime_header_decode
array imap_mime_header_decode (string text)
Функция imap_mime_header_decode() декодирует заголовок в формате MIME,
представленном в соответствии с RFC2047. Декодированные элементы возвращаются как массив объектов, причем каждый объект имеет два свойства: charset и text.
Если исходный элемент не был закодирован, то свойство charset получит значение
default.
12.2.3.5. Декодирование строки: imap_qprint
string imap_qprint (string string)
Осуществляет преобразование семибитной кодировки «quoted-printable» в стандартное 8-битное представление в соответствии с RFC2045 (раздел 6.7 стандарта).
При этом возвращаемая строка может содержать, вообще говоря, произвольные
данные, например двоичный фрагмент.
См. также описание i map_8bi t () (раздел 12.2.3.1).
12.2.3.6. Декодирование UTF-7: imap_utf7_decode
string imap_utf7_decode (string text)
Декодирует строку в формате UTF-7, преобразуя ее в 8-битный формат. Возвращает результат декодирования или f a I s e, если входная строка не являлась записью
в формате UTF-7 (RFC 2060, раздел 5.1.3).
12.2.3.7. Кодирование в формат UTF-7: imap_utf7_encode
string imap_utf7_encode (string data)
Осуществляет преобразование 8-битной строки в формат UTF-7. Используется
при кодировании имен почтовых ящиков, содержащих символы второй половины
кодовой таблицы ASCII, в том числе и кириллицы. Функция возвращает строку в
формате UTF-7.
12.2.3.8. Преобразование в UTF-8: imap_utf8
string imap_utf8 (string text)
Осуществляет кодирование входной строки в формат UTF-8 в соответствии с
RFC 2044.
12.2.4. Работа с конференциями
12.2.4.1. Подписка: imap_subscribe
int imap_subscribe (int imap_stream, string mbox)
Функция открывает подписку на новый почтовый ящик. Вообще говоря, может
применяться к произвольному IMAP-серверу, но, как правило, используется применительно к конференциям NNTP. Возвращает true при успешном завершении
и false — при ошибке.
12.2.4.2. Отмена подписки: imap_unsubscribe
int imap_unsubscribe (int imap_stream, string mbox)
Отменяет подписку на указанный почтовый ящик. Применяется в основном при
работе с NNTP. Возвращает true при успешном завершении и faIse — при ошибке.
12.2.4.3. Список подписки (детальный) —imap_getsubscribed
array imap_getsubscribed (int imap_stream, string ref, string pattern)
Функция идентична в целом рассмотренной выше i map_getma i1boxes () (см. раздел
12.2.1.6), однако используется при работе с NNTP-серверами и возвращает список
конференций, на которые подписан пользователь.
12.2.4.4. Список подписки: imap_listsubscribed
array imap_listsubscribed (int imap_stream, string ref, string pattern)
Возвращает список всех почтовых ящиков (реально, телеконференций USENET),
на которые подписан пользователь. В целом функция аналогична функции
imap_li stmai Ibox () (см. раздел 12.2.1.7).
12.2.5. Прочие функции
12.2.5.1. Считывание предупреждений сервера irnap:imap_alerts
array imap_alerts ()
Функция возвращает массив, содержащий все сообщения IMAP-сервера, сгенерированные им с момента последнего обращения к этой функции или с момента вызова текущей PHP-программы. Спецификация IMAP предполагает, что эти сообщения должны получаться конечным пользователем.
12.2.5.2. Закрытие потока: imap_close
int imap_close (int imap_stream [, int flags])
Закрывает поток данных IMAP. Принимает один необязательный аргумент
CL_EXPUNGE, который автоматически и без предупреждения удаляет все сообщения, помеченные для удаления.
12.2.5.3. Считывание сообщений об ошибках: imap_errors
array imap_errors ()
Функция возвращает массив, содержащий все сообщения об ошибках IMАР-сервера, сгенерированные с момента последнего вызова этой функции или с момента
начала работы PHP-программы. После вызова функции внутренний стек сообщений об ошибках очищается.
12.2.5.4. Считывание сообщения о последней ошибке:imap_last_error
string imap_last_error ()
Функция возвращает полное текстовое сообщение о последней ошибке IMАР-сервера, зафиксированное во время обработки данной страницы. Стек сообщений об
ошибках остается без изменений, поэтому последующие вызовы этой функции без
возникновения дополнительных ошибок будут приводить к получению одного и того же сообщения.
12.2.5.5. Открытие канала IMAP-сервера: imap_open
int imap_open (string mailbox, string username, string password [, int flags])
Функция открывает поток IMAP-сервера и возвращает указатель на него или false
в случае невозможности открытия. С равным успехом эта функция используется
при открытии потоков РОЗ и NNTP. Понятно, что некоторые функции, рассматриваемые в этой главе, в последних двух случаях не работают.
Аргумент mai Ibox представляет собой имя почтового ящика и состоит из имени
сервера и собственно имени ящика. Существует специальное зарезервированное
имя INBOX, обозначающее личный ящик текущего пользователя. Имя сервера, которое заключается в фигурные скобки <<{» и «}», должно содержать имя сервера
или его IP-адрес, обозначение протокола (начинается с косой «/») и необязательный номер порта, отделенный от имени двоеточием «:». Эта серверная часть имени обязательна для использования во всех функциях, которые требуют указания
имени почтового ящика. Сами же имена ящиков могут содержать любые символы,
в том числе и символы кириллицы, но в этом случае имена таких ящиков должны
быть закодированы с помощью функции imap_utf7_encode() (см. раздел 12.2.3.7).
Аргумент flags представляет собой битовую маску, которой могут быть присвоены следующие значения:
OP_READONLY | Открыть почтовый ящик только для чтения
| OP_ANONYMOUS | He использовать и не обновлять настройки файла .newsrc (только для NNTP)
| OP_HALFOPEN | Для IMAP и NNTP устанавливать соединение с сервером, но не открывать никакой почтовый ящик
| CL_EXPUNGE | Автоматически очищать почтовый ящик при закрытии
|
Теперь давайте перейдем к примерам. Чтобы открыть доступ к IMAP-серверу на
локальной машине, работающему через порт 143, вам необходимо выполнить следующее:
$mbox = imap_open ("{localhost:143}INBOX", "user_id", "password");
Чтобы подключиться к серверу РОРЗ, работающему, как обычно, через порт НО,
используйте вызов:
$mbox = imap_open ("{localhost/рорЗ:110}INBOX", "user_id", "password");
И наконец, чтобы получить доступ к локальному NNTP-серверу через порт 119,
вы можете воспользоваться:
$nntp = imap_open ("{localhost/nntp:119}comp.test", "", "");
Пока что мы рассматривали только локальные серверы. Чтобы начать работать с
удаленным (сетевым) сервером, вам достаточно заменить в приведенных выше
фрагментах localhost на доменное имя или IP-адрес интересующего вас сервера.
Вот пример подобного использования imap_open:
$mbox = imap_open (" {(your . imap. host : 143} ",
< "usernanie", "password");
echo "<р><h1>Почтовые ящики на сервере</h1>\n" ;
$folders = imap_listmai lbox ($mbox, " {your . imap. host : 143} ", "*");
if ($folders == false) {
echo "Ошибка при считывании списка ящиков<br>\n" ;
} else {
while (list ($key, $val) = each ($folders)) {
echo $val . "<br>\n" ;
}
}
echo "<p><h1>3aголовок сообщений в INBOX</h1>\n" ;
$headers = imap_headers ($mbox);
if ($headers == false) {
echo "Заголовки считать не удалось ... <br>\n" ;
} else {
while (list ($key.$val) = each ($headers)) {
echo $val . "<br>\n" ;
}
}
imap_close($mbox) ;
12.2.5.6. Проверка активности потока: imap_ping
int imap_ping (int imap_stream)
Функция возвращает true, если указанный поток активен, и false — в противном случае.
Функция imap_ping ( ) проверяет работоспособность потока, запрашивая количество вновь поступивших сообщений. Таким образом, она может использоваться
для обнаружения новой почты, а также для поддержания постоянного соединения
с серверами, автоматически отключающимися по таймауту.
12.2.5.7. Повторное открытие с новым ящиком:imap_reopen
int imap_reopen (int imap_stream, string mailbox [, string flags])
Функция повторно открывает указанный поток с новым почтовым ящиком на
IMAP- или NNTP-сервере. Аргумент flags представляет собой битовую маску,
которая может составляться из следующих значений:
OP_READONLY | Открыть ящик только для чтения
| OP_ANONYMOUS | He использовать и не обновлять файл .newsrc (только для NNTP)
| OP_HALFOPEN | Для IMAP и NNTP производится установление соединения, но почтовый ящик не открывается
| CL_EXPUNGE | Автоматически удалить сообщения, помеченные для удаления при закрытии ящика
|
В случае успешного завершения функция возвращает true, а при ошибке — false.
12.2.5.8. Разбор адресной строки:imap_rfc822_parse_adrlist
array imap_rfc822_parse_adrlist (string address, string default_host)
Функция осуществляет разбор адресной строки, представленной в соответствии
с форматом RFC-822, и возвращает массив объектов, которые обладают следующими свойствами:
mailbox | Имя почтового ящика (имя пользователя)
| host | Имя хоста
| personal | Полное имя пользователя
| adl | Маршрут доступа к домену
|
12.2.5.9. Формирование адреса:imap_rfc822_write_address
string imap_rfc822_write_address (string mailbox,
  ; string host, string personal)
Возвращает правильно сформатированный адрес электронной почты из имени
почтового ящика, доменного имени хоста и полного имени адресата. Например:
print imap_rfc822_write_address("hartmut","cvs.php.net",
"Hartmut Holzgraefe")."\n";
12.2.5.10. Поиск в почтовом ящике:imap_scanmailbox
array imap_scanmaiIbox (int imap_stream, string ref,
string pattern, string content)
Возвращает массив, содержащий имена почтовых ящиков, которые содержат текстовый фрагмент content. Остальные аргументы функции подобны imap_getmai lbexes ()
(см. раздел 12.2.1.6).
12.2.5.11. Поиск данных: imap_search
array imap_search (int imap_stream, string criteria, int flags)
Функция выполняет поиск данных в почтовом ящике. Аргумент criteria представляет собой строку, содержащую перечисленные ниже ключевые слова, разделенные пробелами. Все аргументы, состоящие из нескольких слов, например FROM
"Вовка Морковка", должны быть помещены в кавычки.
ALL | Возвращает все сообщения, соответствующие остальным критериям
| ANSWERED | Сообщения с установленным флагом \ANSWERED
| ВСС «string» | Сообщения, имеющие строку string в поле Вcс:
| BEFORE «date» | Сообщения, поле Date : которых имеет значение раньше date
| BODY «string» | Сообщения, содержащие текст string в теле письма
| CC «string» | Сообщения, имеющие строку string в поле Сс :
| DELETED | Удаленные сообщения
| FLAGGED | Сообщения с установленным флагом \FLAGGED, который иногда интерпретируется как «Важное» (Important) или «Срочное» (Urgent)
| 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» | Сообщения, содержащие в поле То: текст string
| UNANSWERED | Сообщения, на которые не был написан ответ
| UNDELETED | Сообщения, не помеченные для удаления
| UNFLAGGED | Сообщения, не помеченные флагами
| UNKEYWORD «string» | Сообщения, в которых отсутствуют ключевые слова string
| UNSEEN | Непрочитанные сообщения
|
Что касается аргумента flags, то он может принимать единственное значение —SE_UID, которое означает, что возвращаемый массив будет содержать не порядковые номера сообщений, а их UID.
|