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


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

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_ANONYMOUSHe использовать и не обновлять файл .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.

назад
далее

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