В
предыдущей лекции описывался процесс пересылки
почтового сообщения пользователю удаленного
компьютера с использованием протокола SMTP. В
начале 80-х годов пользователь, которому
предназначалось электронное письмо, должен был
находиться за терминалом и быть
зарегистрированным в системе, чтобы получить и
прочесть электронное сообщение с помощью
примитивной программы текстового процессора.
Сегодня положение вещей в корне изменилось.
Пользователи компьютеров хотят иметь свободу во
времени и пространстве при чтении своей
электронной почты; кроме того, они хотят это
делать с помощью приятных графических
интерфейсов. Если по каким-либо причинам
пользователь не может быть допущен
непосредственно на почтовый сервер под
управлением ОС Linux для чтения своей почты в
среде X Window, то наилучший выход в такой
ситуации — организовать такому пользователю
соединение с сервером по локальной сети. Тогда с
помощью соответствующего клиентского
программного обеспечения на локальном ПК
пользователь сможет обращаться к своему
почтовому ящику на сервере. Протокол, который
позволяет считывать почтовые сообщения с
удаленного почтового сервера, описан в RFC 1939
и назван протоколом почтового офиса Post Office
Protocol (POP). В настоящее время используется
версия 3 этого протокола, отсюда название —
POP3.
Описание
протокола POP3
Подобно протоколу SMTP (описанному в лекции 5, "Протокол
SMTP"), работа протокола POP3 также основана на
использовании набора команд. Сервер POP3
прослушивает TCP-порт номер 110 на предмет
запросов на установку соединения и отвечает на
них, выдавая специальную строку-приглашение,
которая сигнализирует о его готовности к приему
команд. Один из методов убедиться в том, что на
данном хост-компьютере запущен сервер POP3 —
попытаться зайти с помощью
telnet на порт
110. Если при этом вы получите соответствующее
приглашение сервера POP3, значит, POP3-сервер
работает на данном компьютере. В листинге 6.1
представлен пример такого сеанса.
1 [frank@shadrach
frank]$ telnet localhost 110
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 +OK POP3 localhost v7.59 server ready
6 QUIT
7 +OK Sayonara
8 Connection closed by foreign host.
9 [frank@shadrach frank]$
Листинг 6.1. Пример
сеанса с клиентом POP3
В
строке 1 показан пример вызова соединения с
портом TCP 110 на локальном компьютере с помощью
команды telnet.
Строка 5 представляет собой приглашение,
выдаваемое сервером POP3. В строке 6 клиентом
задается POP3-команда завершить сеанс работы с
сервером, а в строке 7 представлено прощальное
сообщение, выдаваемое сервером POP3. По
завершении сеанса сервер POP3 инициирует
закрытие TCP-соединения. Как правило, клиент
отреагирует на закрытие TCP-соединения.
Первое, что происходит при сеансе POP3, — это
регистрация клиента на сервере. Существует
несколько способов регистрации. После
регистрации на сервере POP3 клиент посылает на
сервер запрос с требованием проверить, имеются
ли в почтовом ящике с соответствующим
идентификатором пользователя сообщения. В
функции протокола POP3 не входит обеспечение
клиента возможностями манипулирования
сообщениями внутри его почтового ящика. Протокол
POP3 всего лишь посылает список имеющихся у него
для клиента сообщений, и высылает каждое из них
клиенту. Клиент же может производить операции
над сообщениями, только после получения их к
себе на локальный компьютер из почтового ящика.
Методы
установления подлинности клиента в POP3
После того как клиент POP3 установил TCP-соединение
с сервером, он должен идентифицировать себя. Это
одновременно является подтверждением того, что
сообщения посылаются именно тому пользователю,
для которого они предназначены. Стандартная
проверка подлинности пользователя в POP3
выполняется с помощью набора команд для
идентификации пользователя и пароля. К сожалению,
при регистрации на сервере передача
идентификатора пользователя и пароля
осуществляется в текстовом виде. Конечно, такой
метод использовать опасно, особенно в тех
случаях, когда при установлении соединения с
удаленным сервером пакеты проходят через
неизвестные сети. Устранить эти недостатки
попытались в документе RFC 1734, где описывается
более безопасный способ подключения к серверу
POP3 посредством команды
AUTH. В последующих разделах описываются
оба метода проверки подлинности клиентов, а
также третий, более новый метод под названием
АPOP.
Команды USER/PASS
Комбинация команд
USER/PASS — самая простая в реализации,
но в то же время самая опасная с точки зрения
безопасности. Каждый раз при соединении клиента
с сервером POP3 с целью проверки почты по сети
посылается его идентификатор пользователя и
пароль в виде текста в формате ASCII. Это просто
находка для хакера!
Формат этих команд следующий:
USER username
PASS password
В
роли username
выступает идентификатор пользователя для сервера
POP3. Соответственно, параметр
password означает
пароль для этого идентификатора пользователя. В
листинге 6.2 показан пример сеанса POP3 с
применением комбинации
USER/PASS.
1 [melanie@shadrach
melanie]$ telnet localhost 110
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 +OK POP3 localhost v7.59 server ready
6 USER melanie
7 +OK User name accepted, password please
8 PASS toybox
9 +OK Mailbox open, 0 messages
10 QUIT
11 +OK Sayonara
12 Connection closed by foreign host.
13 [melanie@shadrach melanie]$
Листинг 6.2. Пример
регистрации клиента POP3 с использованием
USER/PASS
В
строке 6 клиент посылает команду
USER со своим
идентификатором пользователя в текстовом виде. В
ответ сервер POP3 запрашивает пароль для этого
пользователя. В строке 8 клиент посылает пароль
на сервер. После того как получен пароль,
производится сравнение комбинации идентификатор
пользователя/пароль с имеющимися на сервере.
Единственная защита сервера POP3 заключается в
том, что сервер не возвращает ответ клиенту о
неправильности идентификатора пользователя, а
дожидается ввода пароля. Это исключает
возможность подбора хакерами корректных
идентификаторов пользователя для данного хоста
POP3. В листинге 6.3 можно наблюдать разницу
между реакцией на неправильный пароль для
корректного идентификатора и на неправильный
идентификатор пользователя.
1 [rich@shadrach
rich]$ telnet localhost 110
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 +OK POP3 localhost v7.59 server ready
6 USER rich
7 +OK User name accepted, password please
8 PASS hello
9 -ERR Bad login
10 USER baduser
11 +OK User name accepted; password please
12 PASS hello
13 -ERR Bad login
14 QUIT
15 +OK Sayonara
16 Connection closed by foreign host.
17 [rich@shadrach rich]$
Листинг 6.3. Пример
попыток регистрации на сервере POP3
В
строке 6 задано корректное имя пользователя, но
в 8-й строке набран неправильный пароль. Ответ
сервера POP3 в строке 9 вполне понятен и в
пояснениях не нуждается. В строке 10 делается
попытка подключиться к серверу с неправильным
идентификатором пользователя, на что в строке 13
получен соответствующий ответ сервера POP3.
Обратите внимание, что и в той, и в другой
ситуации сервер сгенерировал одинаковое
сообщение об ошибке. Это также препятствует
подбору хакерами корректных идентификаторов
пользователя с помощью обращения к серверу POP3.
Конечно, имеется и обратная сторона медали:
такие сообщения могут ввести администраторов
почтовых систем в заблуждение при поиске
неполадок.
Применение идентификатора пользователя и пароля
открытым текстом при работе с POP3 становится
еще более опасным, когда пользователь проверяет
содержимое почтового ящика несколько раз в день
(или в час). Большинство клиентских программ для
работы с электронной почтой можно
конфигурировать так, чтобы они обращались к
почтовому ящику через определенные интервалы
времени. Это подарок для хакера, так как при
помощи сетевого анализатора он легко может
получить идентификатор и пароль пользователя.
Эти недостатки были в некоторой степени
устранены с помощью команды
APOP, описанной в
RFC 1939.
Команда APOP
Для
входа на сервер POP3, вместо комбинации команд
USER/PASS, клиент
может использовать команду
APOP. Команда
APOP позволяет
клиенту регистрироваться на сервере, не посылая
пароль в текстовом виде, — она использует
зашифрованную с помощью алгоритма MD5 версию
пароля. Формат команды
APOP приведен ниже:
APOP name digest
Аргумент name —
это обычный идентификатор пользователя, который
регистрируется на сервере. Параметр
digest позволяет
клиенту посылать на сервер закодированное MD5
значение digest, с
помощью которого и производится проверка
подлинности пользователя. Алгоритм шифрования
MD5 был разработан Роном Райвестом (Ron Rivest)
и описан в документе RFC 1321. Этот алгоритм
основан на использовании алгоритма хеширования
для наложения известного сообщения на секретное
слово (ключ), которое известно лишь двум
оконечным точкам. Признаком работы алгоритма
хеширования является наличие параметра
digest, который
передается вместе с именем клиента. Очевидно,
что для нормальной работы такой схемы нужно,
чтобы клиенту и серверу заранее был известен
ключ. В роли известного сообщения, налагаемого
на ключ, может выступать приглашение сервера
POP3 при установлении с ним TCP-соединения. Как
правило, в роли такого сообщения выступает
идентификатор, который следует за именем хоста
сервера POP3. Пример сеанса с использованием
APOP представлен в
листинге 6.4.
1 [chris@shadrach
chris]$ telnet meshach 110
2 Trying 198.162.0.5...
3 Connected "to meshach.smallorg.org.
4 Escape character is '^]'.
5 +OK POP3 server ready <1896.698370952@meshach.smallorg.org>
6 APOP chris
c4c9334bac560ecc928e58001b3e22fb
7 -OK maildrop has 1 message (369 octets)
8 QUIT
9 +OK Sayonara
10 Connection closed by foreign host.
11 [chris@shadrach chris]$
Листинг 6.4. Пример
сеанса с использованием APOP
В
строке 5 показано приглашение сервера POP3.
Заранее известное сообщение включает в себя
метку времени и имя хоста в угловых скобках. Все
эти сведения используются в качестве заранее
известного сообщения. В строке 6 вводится
команда APOP с
заданными идентификатором пользователя и
хешированным MD5 значением известного сообщения,
а также с секретным ключом. При этом реальный
пароль в текстовом виде нигде не передается.
Если нет секретного ключа, то пароль клиента
можно получить из закодированной
последовательности, лишь взломав код MD5, а это
довольно сложно.
Однако следует отметить, что поддержка команды
APOP не является
обязательной для протокола POP3. Проверить,
поддерживается ли эта команда вашим сервером
можно, проанализировав приглашение сервера POP3.
Как видно из листинга 6.1, сервер POP3,
приведенный в этом примере, не выводит
соответствующее сообщение о поддержке алгоритма
шифрования MD5. Следовательно, при регистрации
на этом сервере клиент не сможет воспользоваться
возможностями команды
APOP. В таком случае попытка
использования команды
APOP приведет к появлению сообщения об
ошибке.
Команда AUTH
Еще
один метод повышения безопасности при
регистрации пользователя — применение команды
AUTH, описанной в
RFC 1734. Команда была позаимствована из более
нового протокола IMAP (см. лекцию 7, "Протокол
IMAP"), который более гибок при работе с
почтовыми ящиками, чем протокол POP3. Формат
команды AUTH
следующий:
AUTH mechanism
Параметр mechanism
определяет собственно метод проверки подлинности
пользователя, с помощью которого производится
подключение клиента к серверу. Когда метод
проверки пользователя согласован, то вступает в
силу проверка подлинности идентификатора
пользователя.
Клиент инициирует сеанс переговоров с сервером,
в течение которого согласовывается метод
проверки подлинности. Вначале клиент выдает
команду AUTH с
наивысшей возможной степенью шифрования. Если
сервером не поддерживается соответствующий
уровень шифрования, то он вернет негативный
ответ. Затем клиент может выдать еще одну
команду AUTH, с
уже другим механизмом проверки подлинности. Эти
переговоры между клиентом и сервером будут
продолжаться до тех пор, пока клиент и сервер не
найдут приемлемый для обоих алгоритм проверки
подлинности, в противном случае они просто
перейдут к использованию комбинации команд
USER/PASS. В
листинге 6.5 показан пример сеанса переговоров
между клиентом и сервером POP3 с применением
команды AUTH.
1 [matthew@shadrach
matthew]$ telnet localhost 110
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 +OK POPS localhost v6.50 server ready
6 AUTH KERBEROS_V4
7 -ERR Bad authentication
8 AUTH GSSAPI
9 -ERR Bad authentication
10 AUTH SKEY
11 -ERR Bad authentication
12 AUTH
13 +OK Supported authentication mechanisms:
14 LOGIN
15 .
16 AUTH LOGIN
17 + VXNlciBOYW1lAA==
18 xxxxxxxxx
19 + UGFzc3dvcmQA
20 xxxxxxxxx
21 -ERR Bad authentication
22 USER matthew
23 +OK User name accepted, password please
24 PASS apple
25 +OK Mailbox open, 0 messages
26 QUIT
27 +OK Sayonara
28 Connection closed by foreign host.
29 [matthew@shadrach matthew]$
Листинг 6.5. Пример
сеанса переговоров по команде AUTH
Строки 6–11 отображают попытки клиента вести
переговоры с сервером POP3, согласно стандартной
процедуре проверки подлинности в IMAP. Как
видим, все они не увенчались успехом. В строке
12 клиент выдает команду
AUTH без параметров. На это сервер
отвечает списком поддерживаемых методов проверки
подлинности (строки 14 и 15). В строке 16 клиент
пытается использовать один из поддерживаемых
сервером методов LOGIN.
Далее, в строке 17, мы видим зашифрованный ответ
сервера на команду AUTH.
К сожалению, в данном случае клиенту не удалось
зарегистрироваться на сервере с помощью метода
LOGIN, поэтому
клиент и сервер перешли к применению обычной
комбинации USER/PASS,
как это видно из строк 22–25.
Команды
клиента POP3
После успешной регистрации на сервере POP3
клиент переходит в нормальный режим работы. Для
управления получением почтовых сообщений с
сервера он должен выдавать соответствующие
команды. Каждая команда предполагает
соответствующую реакцию на нее сервера POP3.
Команда STAT
В
команде STAT
дополнительные параметры не задаются. Она
применяется для получения текущего листинга
работы сервера POP3. Текущий листинг
представляет собой форматированный текст,
который отображает текущее состояние почтового
ящика пользователя. Строка вывода при этом имеет
формат:
+ОК nn mm
Формат ответа на команду
STAT является стандартным. С его помощью
пользователи системы электронной почты получат
информацию о состоянии своих почтовых ящиков.
Значение nn
указывает, какое количество сообщений находится
в данный момент в почтовом ящике пользователя.
Сообщения с пометкой "удалено" не считаются,
однако учитываются уже прочитанные сообщения.
Значение mm
отражает объем сообщений, находящихся в ящике
пользователя, в байтах. Команда
STAT часто
используется для быстрой проверки состояния
почтового ящика клиентскими программами для
работы с почтой. Выдав команду
STAT, программа
для работы с электронной почтой может сравнить
количество сообщений в почтовом ящике с тем, что
было получено в результате последней проверки.
Если они отличаются, то программа для работы с
электронной почтой может инициировать процесс
получения новых сообщений. Единственная
проблема, возникающая при использовании этого
алгоритма, заключается в том, что
программе-клиенту не известно, сколько сообщений
было получено в прошлый раз и какие из них не
были удалены.
Команда LIST
Команда LIST
используется для получения развернутого
листинга почтового ящика. Развернутый
листинг представляет собой краткое содержание
почтового ящика, включая номер и объем сообщения
в байтах. Когда команда
LIST задается без параметров, то
отображается развернутый листинг всех сообщений
в почтовом ящике. Если же использовать в
качестве параметров команды номер сообщения, то
развернутый листинг будет производиться только
для него. Пример сеанса работы команды
LIST представлен в
листинге 6.6.
1 [alex@shadrach
alex]$ telnet localhost 110
2 Trying 127.0.0.1 ...
3 Connected to localhost.
4 Escape character is '^]'.
5 +OK POP3 localhost v6.50 server ready
6 USER alex
7 +OK User name accepted, password please
8 PASS tarzan
9 +OK Mailbox open, 2 messages
10 LIST
11 +OK Mailbox scan listing follows
12 1 355
13 2 465
14 .
15 LIST 1
16 +OK 1 355
17 LIST 2
18 +OK 2 465
19 LIST 3
20 -ERR No such message
21 QUIT
22 +OK Sayonara
23 Connection closed by foreign host.
24 [alex@shadracn alex]$
Листинг 6.6. Пример
работы команды LIST
Давайте рассмотрим, что происходит. В строке 10
клиент выдает серверу команду
LIST без
параметров. Ответ сервера заключается в строках
12–14 с уведомлением в строке 11 о том, что
команда опознана. Строки 12 и 13 обозначают
сообщения, которые находятся в почтовом ящике.
Некоторые реализации серверов POP3 включают в
положительный ответ сервера результаты
выполнения команды STAT
в качестве обобщающего сообщения. Однако
программам-клиентам не стоит полагаться на эти
сведения (как показано в данном листинге). В
строках 15 и 17 выдается команда
LIST для каждого
сообщения. Соответствующие ответы сервера
показаны в строках 16 и 18. В строке 19 клиент
задает команду LIST
для несуществующего сообщения. В 20-й строке
сервер возвращает отрицательный ответ на это
действие.
Команда RETR
Команда RETR
используется для получения сообщений из
почтового ящика на компьютер клиента. Параметр,
который можно использовать с этой командой, —
это номер сообщения, полученный с помощью
команды LIST. Если
имеется сообщение с заданным номером, то сервер
будет отвечать позитивным сообщением, завершая
текст письма специальным символом (одной точкой
в последней строке). Почтовое сообщение, которое
отдается клиенту, должно быть форматировано в
соответствии с RFC 822 так же, как оно было
принято почтовым сервером (чаще всего SMTP).
Сервер POP3 не принимает никакого участия в
форматировании и манипулировании сообщением.
Работа сервера POP3 заключается лишь в передаче
сообщения клиенту в целости и сохранности.
Пример работы команды
RETR показан в листинге 6.7.
1 [rich@shadrach
rich]$ telnet localhost 110
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 +OK POP3 localhost v6.50 server ready
6 USER rich
7 +OK User name accepted, password please
8 PASS guitar
9 +OK Mailbox open, 2 messages
10 LIST
11 +OK Mailbox scan listing follows
12 1 355
13 2 465
14 .
15 RETR 1
16 +OK 355 octets
17 Return-Path: <rich>
18 Received: (from rich@localhost)
19 by shadrach.smallorg.org (8.8.7/8.8.7) id
KAA00648
20 for rich; Thu, 2 Sep 1999 10:15:25 -0500
21 Date: Thu, 2 Sep 1999 10:15:25 -0500
22 From: rich@shadrach.smallorg.org
23 Message-Id:
<199909021515.KAA00648@shadrach.smallorg.org>
24 To: rich@shadrach.smallorg.org
25 Subject: Message 1
26 Status: 0
27
28 This is test message 1
29 .
30 QUIT
31 +OK Sayonara
32 Connection closed by foreign host.
33 [rich@shadrach rich]$
Листинг 6.7. Пример
применения команды RETR
В
строке 15 клиент выдает команду
RETR для получения
из ящика сообщения с номером 1. Строки 16–27
показывают, что сообщение полностью передается
клиенту. В обязанности клиента входит
организация буфера, достаточного для хранения
сообщения (с этой целью команда
LIST и выдает
сведения об объеме сообщений).
Команда DELE
Команда DELE
используется для удаления сообщений из почтового
ящика на сервере. Единственный параметр, который
можно в ней задавать, — это номер сообщения,
полученный с помощью команды
LIST. Команда
DELE физически не
удаляет сообщение, она лишь помечает его для
удаления. Удаление сообщения происходит лишь
после корректного завершения сеанса с помощью
команды QUIT (о
ней немного позже). При использовании команды
DELE следует быть
очень осторожным. Внимательно посмотрите,
правильно ли указан номер сообщения, которое вы
собираетесь удалить. В листинге 6.8 показаны
результаты удаления сообщения по развернутому
листингу.
1 [rich&shadr-ach
rich]$ telnet localhost 110
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 +OK POP3 localhost v7.59 server ready
6 USER rich
7 +OK User name accepted, password please
8 PASS guitar
9 +OK Mailbox open, 3 messages
10 LIST
11 +OK Mailbox scan listing follows
12 1 377
13 2 387
14 3 396
15 .
16 DELE 1
17 +OK Message deleted
18 LIST
19 +OK Mailbox scan listing follows
20 2 387
21 3 396
22 .
23 QUIT
24 +OK Sayonara
25 Connection closed by foreign host.
26 [rich@shadrach rich]$ telnet localhost
110
27 Trying 127.0.0.1...
28 Connected to localhost.
29 Escape character is '^]'.
30 +OK POPS localhost v7.59 server ready
31 USER rich
32 +OK User name accepted, password please
33 PASS guitar
34 +OK Mailbox open, 2 messages
35 LIST
36 +OK Mailbox scan listing follows
37 1 387
38 2 396
39 .
40 QUIT
41 +OK Sayonara
42 Connection closed by foreign host.
43 [rich@shadrach rich]$
Листинг 6.8.
Результаты применения команды DELE
В
строке 10 клиент задает команду
LIST, чтобы
проверить содержимое своего почтового ящика.
Строки 11–15 показывают, что в ящике находятся
три сообщения. В строке 16 клиент выдает команду
DELE для удаления
сообщения с номером 1 (оно лишь будет помечено
для удаления). В строке 17 показан ответ сервера
POP3, подтверждающий совершение им действия.
Теперь новый развернутый листинг почтового ящика
(строки 20 и 21) показывает, что для загрузки
доступны только сообщения с номерами 2 и 3. В
этой точке клиент завершает сеанс с сервером
POP3.
Строки 26–42 отображают еще один сеанс POP3. В
этом сеансе в строке 35 еще раз выдается команда
LIST. Как и
раньше, сервер POP3 показывает, что в почтовом
ящике находятся два сообщения. Однако, обратите
внимание: в этом сеансе сервер перенумеровал
сообщения. Сообщение, имевшее номер 2, получило
номер 1, а сообщение с номером 3 —номер 2.
Этот пример показывает, что номера сообщений не
являются постоянными величинами. Номера
сообщений имеют смысл только для текущего сеанса
POP3. Любая попытка клиента использовать одни и
те же номера сообщений в различных сеансах,
почти всегда приводит к неожиданным результатам.
Команда UIDL,
которую мы рассмотрим позже в этом разделе,
поддерживается некоторыми серверами POP3 и
используется как раз для уникальной
идентификации сообщений для всех сеансов POP3.
Команда NOOP
Команда NOOP в
буквальном смысле ничего не делает. При
получении команды NOOP
сервер POP3 лишь отправляет положительный ответ.
Эта команда может использоваться для определения
наличия соединения с сервером POP3. Ее можно
задавать только после установления соединения и
после регистрации на сервере.
Команда RSET
Команда RSET
сбрасывает текущий сеанс POP3 и возвращает его к
точке, когда пользователь уже прошел процедуру
проверки подлинности на сервере (т.е. повторная
регистрация не требуется). При этом важно
помнить, что с помощью команды
RSET сервер
отменяет все ранее сделанные пометки об
удалении. Все сообщения будут присутствовать в
развернутом листинге под теми номерами, которые
они имели до того, как были помечены.
Команда QUIT
Команда QUIT
используется для завершения сеанса POP3. Когда
сервер получает команду
QUIT, то он удаляет все помеченные для
удаления в течение сеанса сообщения и закрывает
TCP-соединение. Если сеанс POP3 завершить до
того, как клиент выдаст команду
QUIT, то все
помеченные для удаления сообщения будут
сохранены и удаляться не будут.
Команда TOP
Команда TOP
является необязательной и поддерживается не
всеми серверами POP3. Эта команда весьма полезна
для клиента и помогает ему получать краткое
описание сообщений, которые находятся в почтовом
ящике. В результате ее выполнения клиент
получает стандартные поля заголовка сообщения в
формате RFC 822 вместе с заданным числом строк
из тела сообщения. Команда
TOP требует двух
обязательных параметров. Формат команды:
TOP msg n
Параметр msg —
номер сообщения, полученный с помощью команды
LIST, а
n — целое число,
которое показывает количество отображаемых строк
из тела сообщения. Часто программы-клиенты
прибегают к использованию этой команды, чтобы
получить поле заголовка
Subject:, которое они затем выводят в
списке сообщений. При этом необходимость в
загрузке на локальный компьютер полного текста
сообщений отпадает. В листинге 6.9 представлен
пример применения команды
TOP.
1 [rich@shadrach
rich]$ telnet localhost 110
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 +OK POPS localhost v7.59 server ready
6 USER rich
7 +OK User name accepted, password please
8 PASS guitar
9 +OK Mailbox open, 5 messages
10 LIST
11 +OK Mailbox scan listing follows
12 1 387
13 2 396
14 3 374
15 4 375
16 5 383
17 .
18 TOP 1 0
19 +OK Top of message follows
20 Return-Path: <rich>
21 Received: (from rich@localhost)
22 by shadrach.smallorg.org (8.9.3/8.9.3) id
MAA00496
23 for rich; Thu, 2 Sep 1999 12:35:51 -0500
24 Date: Thu, 2 Sep 1999 12:35:51 -0500
25 From: rich@shadrach.smallorg.org
26 Message-Id:
<199909021735.MAA00496@shadrach.smallorg.org>
27 To: rich@shadrach.smallorg.org
28 Subject: Test message 1
29 Status: 0
30
31 .
32 TOP 4 10
33 +OK Top of message follows
34 Return-Path: <rich>
35 Received: (from rich@localhost)
36 by shadrach.smallorg.org (8.9.3/8.9.3) id
NAA00588
37 for rich; Thu, 2 Sep 1999 13:32:35 -0500
38 Date: Thu, 2 Sep 1999 13:32:35 -0500
39 From: rich@shadrach.smallorg.org
40 Message-Id:
<199909021832.NAA00588@shadrach.smallorg.org>
41 To: rich@shadrach.smallorg.org
42 Subject: Sample message #4
43 Status:
44
45 This is the fourth sample message.
46 .
47 QUIT
48 +OK Sayonara
49 Connection closed by foreign host.
50 [rich@shadrach rich]$
Листинг 6.9. Пример
использования команды TOP
В
строке 10 клиент выдает команду
LIST для получения
информации о номерах сообщений, содержащихся в
почтовом ящике на сервере POP3. Когда клиенту
известны номера сообщений, он может
воспользоваться командой
TOP для получения информации из
заголовков сообщений. При этом заголовки
сообщений должны соответствовать RFC 822. В
строке 18 показано, как клиент запрашивает
информацию о сообщении с номером 1, при этом
строки из тела сообщения не запрашиваются. Ответ
сервера показан в строках 19–31. В строке 32
клиент запрашивает 10 строк из тела сообщения
номер 4. Однако поскольку тело сообщения
содержит только одну строку, то сервер отвечает
выводом на экран всего заголовка и тела
сообщения.
Команда UIDL
Еще одна необязательная для всех серверов POP3
команда — UIDL.
Благодаря ей все сообщения, хранящиеся на
сервере, получают уникальные номера, которые
сохраняются для всех сеансов POP3. Как уже
говорилось ранее, сообщения нумеруются по
порядку в течение сеанса POP3. По завершении
клиентом сеанса и с началом нового сеанса
сообщения перенумеровываются. Таким образом,
если клиент имел в своем ящике десять сообщений
и удалил шестое сообщение в течение сеанса, то
при следующем сеансе POP3 девять сообщений будут
перенумерованы с первого по девятое. Как видите,
у клиентского программного обеспечения довольно
непростая задача — следить за перенумерацией
сообщений.
Для решения этой проблемы в некоторые серверы
POP3 встроена поддержка команды
UIDL или "листинг
с уникальным идентификатором". Каждому сообщению
назначается уникальный идентификатор, который
представляет собой строку символов формата ASCII
(до 70 символов). Этот идентификатор сохраняется
за сообщением все время, пока оно находится в
почтовом ящике. Довольно часто идентификатор
UIDL для сообщения
получают посредством применения алгоритма
хеширования к заголовку сообщения. Однако
применение такой технологии может привести к
тому, что два одинаковых сообщения получат
одинаковый UIDL.
Клиентское программное обеспечение должно
распознавать и устранять такие ситуации. В
листинге 6.10 представлен пример вывода на экран
и удаления сообщений, идентифицируемых с помощью
UIDL.
1 [rich@shadrach
rich]$ telnet localhost 110
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 +OK POP3 localhost v7.59 server ready
6 USER rich
7 +OK User name accepted, password please
8 PASS guitar
9 +OK Mailbox open, 3 messages
10 LIST
11 +OK Mailbox scan listing follows
12 1 370
13 2 371
14 3 370
15 .
16 UIDL
17 +OK Unique-ID listing follows
18 1 37cabbcb0000009
19 2 37cabbcb0000000a
20 3 37cabbcb0000000b
21 .
22 DELE 1
23 +OK Message deleted
24 LIST
25 +OK Mailbox scan listing follows
26 2 371
27 3 370
28 .
29 UIDL
30 +OK Unique-ID listing follows
31 2 37cabbcb0000000a
32 3 37cabbcb0000000b
33 .
34 QUIT
35 +OK Sayonara
36 Connection closed by foreign host.
37 [rich@shadrach rich]$ telnet localhost
110
38 Trying 127.0.0.1 ...
39 Connected to localhost.
40 Escape character is '^]'.
41 +OK POP3 localhost v7.59 server ready
42 USER rich
43 +OK User name accepted, password please
44 PASS guitar
45 +OK Mailbox open, 2 messages
46 LIST
47 +OK Mailbox scan listing follows
48 1 371
49 2 370
50 .
51 UIDL
52 +OK Unique-ID listing follows
53 1 37cabbcb0000000a
54 2 37cabbcb0000000b
55 .
56 QUIT
57 +OK Sayonara
58 Connection closed by foreign host.
59 [rich@shadrach rich]$
Листинг 6.10.
Пример выполнения команды UIDL
В
строке 16 клиентом выдается команда
UIDL для
отображения уникальных идентификаторов
сообщений, которые находятся в почтовом ящике.
Строки 17–21 представляют собой ответы сервера с
соответствующими уникальными идентификаторами
для каждого сообщения. В строке 22 клиент
удаляет сообщение с номером 1. Далее из строк
30–33 видно, что оставшиеся
UIDL сообщений не
изменились. В следующем сеансе POP3 (строки
47–50) мы видим, что сообщения были
перенумерованы, но их уникальные идентификаторы
UIDL остались
неизменными с момента последнего сеанса (строки
52–55). Таким образом, программа-клиент может
идентифицировать сообщения независимо от сеансов
POP3.
Ответы сервера
POP3
Как показано в примерах сеансов POP3,
приведенных выше в этой лекции, на каждую
команду, посланную клиентом, сервер POP3
возвращает ответ. Формат ответов сервера
следующий:
result text
Под result
подразумевается код ответа сервера POP3, а
text — это
текстовое сообщение, которое описывает
результаты выполнения той или иной команды.
Сервер POP3 может возвращать ответы двух типов.
Ответ с сообщением +ОК
означает, что команда была выполнена успешно, а
ответ -ERR
свидетельствует о том, что команда не была
выполнена.
Подробности о выполнении той или иной команды
содержатся в текстовой части ответа сервера.
Возможны ответы, состоящие из нескольких строк.
Конец многострочного ответа обозначается строкой
с одной точкой (.).
Реализация
POP3 в ОС Linux
Для операционной системы Linux разработано
несколько различных программных пакетов, которые
реализуют функции клиента и сервера POP3. В этом
разделе мы рассмотрим три наиболее популярных
программных пакета, доступных для большинства
версий ОС Linux.
ОС Linux как
клиент POP3
На
сегодняшний день наибольшую популярность получил
пакет клиента POP3 для ОС Linux под названием
fetchmail,
написанный Эриком Рэймондом (Eric Raymond).
Называть этот пакет программой для работы с POP3
не совсем корректно, так как, помимо функций
клиента POP3, он имеет и другие возможности. С
помощью этой программы можно получать сообщения
из почтового ящика на удаленном сервере с
использованием протоколов POP3, IMAP4 или SMTP
(посредством команды ETRN).
С ростом популярности протокола POP3, и услуг
предлагаемых провайдерами Internet на его
основе, программа
fetchmail стала практически стандартом
для большинства пользователей Linux при работе с
серверами POP3. Программа
fetchmail автоматически определяет
перечень протоколов, которые поддерживаются на
удаленном сервере, и выбирает наилучший способ
для получения сообщений. Получив сообщение, эта
программа сразу же передает его локальному
почтовому процессору на сервере с ОС Linux,
который доставляет сообщение локальному
пользователю.
Одно из преимуществ
fetchmail, которое в последнее время все
более широко используется, — возможность
получения почты для всего домена через один
почтовый ящик на узле провайдера Internet.
Провайдер при этом должен сконфигурировать свою
программу sendmail
таким образом, чтобы она пересылала сообщения,
адресованные любому пользователю из этого домена,
в один почтовый ящик. Например, все сообщения
адресованные prez@smallorg.org,
viceprez@smallorg.org
или janitor@smallorg.org
будут перенаправлены на почтовый ящик
maildrop@smallorg.org.
Затем почтовый сервер на базе ОС Linux,
обслуживающий домен
smallorg.org, с помощью
fetchmail и POP3
получает сообщения из ящика
maildrop@smallorg.org.
Хотя каждое сообщение помещается в один почтовый
ящик, все они имеют разные значения в поле
заголовка To: (Кому:)
в формате RFC 822 (см. раздел "Форматы сообщений"
в лекции 5 "Протокол SMTP"). Программу
fetchmail можно
сконфигурировать так, чтобы она рассылала все
принятые сообщения в соответствующие локальные
почтовые ящики на почтовом сервере на основании
значений поля To:.
Хотя такой алгоритм стал довольно популярным (особенно
на серверах POP3 на базе ОС Windows), мы бы не
рекомендовали увлекаться такой практикой, так
как при этом может теряться важная информация из
заголовка. Лучше всего использовать метод SMTP
ETRN, описанный в
лекции 13 "Подключение почтового сервера к
провайдеру Internet". При этом в сообщениях
полностью сохраняются заголовки в формате RFC
822.
Установка fetchmail
Во
многие версии ОС Linux включен пользующийся
большой популярностью бинарный пакет программы
fetchmail. Если в
имеющейся у вас версии ОС Linux нет
fetchmail или же
вы хотите получить свежую версию этой программы
(текущая версия — 5.0.7), обратитесь на
начальную страницу
fetchmail в Internet по адресу:
http://tuxedo.org/~esr/fetchmail. Оттуда можно
получить исходный код
fetchmail. Понадобится также текущая
версия компилятора gcc
и копия программы flex,
установленная на вашем Linux-сервере. После
получения исходного кода распакуйте его в
рабочий каталог, откуда будет производится
установка, примерно следующим образом:
tar -zxvf
fetchmail-5.0.7.tar.gz
С
помощью этой команды создается подкаталог
fetchmail-5.0.7,
где разворачивается исходный код и другие файлы,
нужные для компиляции. Для создания выполняемого
модуля программы
fetchmail проделайте следующее.
- Запустите
программу configure.
Эта программа проверяет специфические
параметры компилятора в вашей версии Linux с
целью создания
Makefile. Далее программа
configure
тестирует библиотеки и параметры компилятора
и выдает сообщения о своей работе. Если
необходимо настроить
fetchmail определенным образом, то
можно задавать параметры программе
configure для
изменения той или иной части
fetchmail.
Например, можно отказаться от поддержки IMAP
и SMTP, если она не нужна, с целью
сокращения выполняемого модуля.
- Запустите
утилиту make
для создания Makefile.
Этим действием как раз совершается
компиляция исходного кода и создаются
двоичные файлы
fetchmail и
fetchmailconf.
- Выполните
make install с
правами пользователя
root, чтобы поместить выполняемые
модули в соответствующие каталоги. Таким
образом исключается возможность конфликтов
по правам пользователей (если только вы не
добиваетесь обратного), и любой пользователь
Linux сможет теперь их использовать.
После создания и установки выполняемых модулей
необходимо создать конфигурационный файл для
каждого пользователя
fetchmail — программа сможет соединиться
с сервером и забрать вашу почту.
Конфигурирование
fetchmail
Каждому пользователю для работы с
fetchmail
требуется свой конфигурационный файл.
Конфигурационные файлы пользователя хранятся в
$HOME/.fetchmailrc.
При запуске программа проверяет наличие этих
файлов и, в случае их отсутствия, выдает
сообщение о том, что они не найдены:
fetchmail: no
mailservers have been specified.
Файл .fetchmailrc
представляет собой стандартный текстовый файл в
формате ASCII. В нем содержатся сведения о том,
к какому серверу должна подключаться
fetchmail, какой
протокол использовать и какой метод проверки
подлинности будет применяться во время почтового
сеанса. Формат конфигурационного файла имеет
двойную структуру: половина файла носит
описательный характер, а другая половина —
собственно конфигурация
fetchmail. Пример файла
.fetchmailrc
представлен в листинге 6.11.
1 # Configuration
created Fri Sep 3 09:16:53 1999 by
fetchmailconf
2 set postmaster "rich"
3 set bouncemail
4 set properties " "
5 poll 10.0.0.1 with proto POP3
6 user "rich" there with password "guitar"
is rich here
Листинг 6.11.
Пример файла .fetchmailrc
В
строках 5 и 6 устанавливаются параметры
конфигурации для пользователя с идентификатором
"rich". Как видите, в этом файле задаются адрес
удаленного хоста, протокол, идентификатор
пользователя и пароль. В строке 6
fetchmail
подставляет для удаленного пользователя "rich"
соответствующий идентификатор пользователя ОС
Linux "rich". При необходимости он может быть
изменен, но будьте осторожны, чтобы не запутать
ситуацию еще больше.
Самый простой способ конфигурирования
.fetchmailrc —
использование программы
fetchmailconf для среды X Window. С
помощью этой программы с графическим интерфейсом
можно настраивать
fetchmail для своих нужд. В табл. 6.1
представлены строки файла
.fetchmailrc, с помощью которых
производится конфигурирование в
fetchmailconf.
Таблица 6.1. Строки для файла .fetchmailrc,
сгенерированные с помощью fetchmailconf
.
Окно fetchmailconf |
Строки .fetchmailrc |
Конфигуратор для
новичков |
poll, frequency |
Хост-конфигуратор |
poll, proto, user |
Конфигурация
пользователя |
password, properties |
На
рис. 6.1 представлен основной экран программы
fetchmailconf.
Для использования возможностей конфигурирования
нажмите кнопку Конфигурировать fetchmai (Configuire
fetchmail). Ее нажатие вызовет меню
конфигуратора fetchmail,
показанное на рис. 6.2.
Если вы выберете опцию Конфигурация для
новичков (Novice Configuration),
fetchmailconf
будет помогать вам при установке параметров
сервера POP3, к которому производится
подключение. Основной экран сразу же попросит
вас ввести адрес сервера или серверов POP3 и
частоту обращения к ним за новой почтой. После
задания частоты обращений можно запустить
fetchmail в
фоновом режиме, и она будет опрашивать
соответствующие серверы с этой частотой. Хотя,
если вы работаете с провайдером по
коммутируемому соединению, то вам нужен другой
подход. Следует установить частоту опроса
серверов равной 0 и написать специальный
сценарий дозвона до сервера провайдера, в
котором предусмотреть запуск
fetchmail. Затем с
помощью файла cron
можно запускать этот сценарий с необходимой
частотой. На рис. 6.3 показано диалоговое окно
конфигуратора для новичков.
Рис. 6.1. Основное окно программы
fetchmailconf
Рис. 6.2. Основное окно конфигуратора
fetchmail
Рис. 6.3. Окно конфигуратора fetchmail
для новичков
После введения адреса сервера POP3 его параметры
можно редактировать. Для этого нужно выделить
адрес сервера и щелкнуть на кнопке
Редактировать (Edit). С помощью этой кнопки
вызывается окно конфигурирования хоста. Здесь
можно задать протокол, необходимый для
соединения с удаленным сервером, а также указать
fetchmail самой
формировать запросы на удаленный сервер. При
этом она будет автоматически определять, какой
протокол поддерживается на нем. Можно также
выбирать наилучший протокол из поддерживаемых
сервером. Это делается с помощью кнопки
Исследовать поддерживаемые протоколы (Probe for
supported protocols). Также можно задать
список идентификаторов, по которому
fetchmail будет
получать почту. На рис. 6.4 показано окно
конфигурации хоста.
Рис. 6.4. Окно конфигурации хоста
fetchmail
Выделив идентификатор пользователя и нажав на
кнопку Редактировать (Edit), можно
сконфигурировать параметры для подключения к
серверу в качестве пользователя. На рис. 6.5
представлено окно для конфигурирования
пользователя.
Рис. 6.5. Окно для конфигурирования
пользователя fetchmail.
Окно для конфигурирования пользователя позволяет
задавать пароль для идентификатора пользователя,
под которым производится подключение к серверу
POP3. Имеются также два флажка для выбора других
параметров пользователя. Первый флажок
определяет, будет ли
fetchmail удалять сообщения в почтовом
ящике пользователя на сервере после их получения
локальной машиной. Включение этой опции экономит
дисковое пространство на сервере. Однако если
пользователь обращается к серверу с различных ПК,
то сообщения будут разбросаны по этим ПК, что
приведет к путанице. Второй параметр —
Выбрать старые сообщения вместе с новыми (Fetch
old messages as well as new) — позволяет
использовать POP3 с UIDL
для идентификации уже полученных сообщений,
чтобы не загружать их повторно. Этот параметр
может оказаться весьма полезным, если
пользователь забирает свою почту с различных ПК.
Задав его, пользователь будет получать только
новые сообщения из почтового ящика, независимо
от того, на какой ПК он их получает. При этом
сообщения из почтового ящика не удаляются. Хотя
таким образом проблема накопления одних и тех же
сообщений на различных ПК решается, остается
проблема экономии дискового пространства на
сервере, поскольку там хранятся все сообщения.
Применение fetchmail
После создания конфигурационного файла
.fetchmailrc можно
использовать программу
fetchmail для получения сообщений
электронной почты от сервера POP3. Для работы в
интерактивном режиме все, что нужно для работы с
ней, — это набрать в командной строке
fetchmail. По этой
команде fetchmail
считывает конфигурационный файл и пытается
зарегистрироваться на указанных в нем серверах.
Затем она получает почту для заданных
идентификаторов пользователя на локальный
компьютер с ОС Linux. Управление
fetchmail можно
осуществлять, задавая в командной строке
различные параметры. В табл. 6.2 приведены
некоторые параметры, которые можно задавать в
командной строке при использовании
fetchmail для
работы с сервером POP3.
Таблица 6.2. Параметры командной строки
для fetchmail
Параметр |
Описание |
-V |
Отображает версию
fetchmail |
-c |
Проверяет наличие
почты в ящике без их загрузки на
компьютер пользователя |
-s |
Режим ожидания — без
вывода на экран |
-v |
Детальный режим —
расширенный вывод на экран |
-a |
Получать все
сообщения с сервера |
-k |
После получения
сообщений сохранять на сервере их
копии |
-K |
Удалять сообщения с
сервера после их получения (по
умолчанию) |
-F |
Сброс — удаление
старых сообщений перед получением
новых |
-p |
Определяет протокол
передачи |
-U |
Использовать
UIDL
при идентификации сообщений |
-P |
Использовать другой
TCP-порт |
-t |
Устанавливает
величину интервала ожидания |
Программу fetchmail
можно использовать в качестве обычного
процесса-демона в ОС Linux, задав частоту
обращения к почтовому серверу в файле
конфигурации. В этом случае
fetchmail работает
в фоновом режиме и регулярно проверяет почтовый
ящик на наличие новых сообщений.
ОС Linux как
сервер POP3
В
ОС Linux реализована также поддержка сервера
POP3, что позволяет создавать на сервере
почтовые ящики, к которым будут обращаться за
почтой удаленные пользователи. Каждый
пользователь электронной почты для получения
доступа к своему почтовому ящику должен иметь
идентификатор пользователя. На сервере с ОС
Linux программное обеспечение сервера POP3
запускается в фоновом режиме и наблюдает за
установкой POP3-соединений. На рис. 6.6
представлена схема взаимодействия программного
обеспечения сервера POP3 с операционной системой
Linux, что позволяет удаленным пользователям
обращаться к почтовым ящикам, хранящимся на
сервере под управлением ОС Linux.
Рис. 6.6. Почтовый сервер под
управлением ОС Linux в качестве сервера POP3
Пакет ipopd
Пакет ipopd —
программа для поддержки сервера POP3,
используемая в ОС Linux по умолчанию.
Программное обеспечение
ipopd является частью проекта
программного обеспечения по поддержке IMAP,
разрабатываемого Вашингтонским университетом. В
проект по созданию программного пакета IMAP
входят реализации серверов POP3 и IMAP.
Большинство версий ОС Linux включают это
программное обеспечение в виде готового пакета.
Текущая версия поставляемая с Red Hat 6.0 —
imap 4.5-3.
Программа ipopd
содержит реализацию обеих версий протокола POP3
и их предшественника — протокола POP2. Все новое
клиентское программное обеспечение для работы с
электронной почтой поддерживает протокол POP3, а
протокол POP2 считается вышедшим из употребления.
Программа для работы с POP3 называется
ipop3d и
вызывается программой
inetd. В файле
/etc/inetd.conf, вероятнее всего, имеется
строка для вызова сервера POP3, но она может
быть закомментирована. Эта строка выглядит
примерно так:
pop-3 stream tcp
nowait root /usr/sbin/tcpd ipop3d
Как правило, программа
ipop3d обычно устанавливается в каталог
/usr/sbin.
Программа qpopper
Программа qpopper
представляет собой реализацию сервера POP3. Она
написана в университете Беркли (штат Калифорния),
но в настоящее время ее распространением
занимается компания Qualcomm. Программа
qpopper
поставляется с большинством версий ОС Linux, а
ее последнюю версию (2.53) можно получить через
Internet на Web-сайте компании Eudora по адресу:
http://www.eudora.com/free/servers.html. Одно из
существенных преимуществ
qpopper перед
ipopd — наличие поддержки соединений при
помощи APOP с использованием специальной базы
данных идентификаторов пользователя. Для запуска
qpopper
используется два загрузочных модуля —
in.qpopper и
popauth.
Программа in.qpopper
пришла на смену ipop3d,
которая ранее включалась в ОС Linux в качестве
сервера POP3. Файл /etc/inetd.conf
должен быть модифицирован соответствующим
образом для запуска этой программы при
установлении соединения с клиентом на TCP, порт
110. Строка в файле /etc/inetd.conf
для включения qpopper
выглядит следующим образом:
pop3 stream tcp nowait
root /usr/sbin/tcpd in.qpopper
После этого следует перезапустить процесс
inetd для того,
чтобы программа
in.qpopper смогла обслуживать соединения
по протоколу POP3.
Программа popauth
позволяет организовывать
qpopper-соединения с клиентами при помощи
APOP. Для этого с
ее помощью создается база данных пользователей (файл
/etc/pop.auth), в
которую можно добавлять и удалять идентификаторы
пользователей. Для добавления идентификатора
пользователя в базу данных используйте команду:
popauth -user username
Так вводятся новые пользователи в базу данных.
Для удаления пользователей из базы данных
задайте команду:
popauth -delete
username
Чтобы получить список пользователей в базе
данных, воспользуйтесь командой:
popauth -list
После того как идентификаторы пользователей
занесены в базу данных
pop.auth, любой из них может
воспользоваться программой POP3, в которую
встроена поддержка проверки подлинности
пользователя с помощью
APOP для подключения к серверу
qpopper.
Философия
почтового сервера
Обслуживание
сервера электронной почты может быть
довольно сложным. В многопользовательской
среде администратору почтовой системы
приходится порой принимать политические и
философские решения для удержания системы
электронной почты "на плаву". Правила обмена
почтовыми сообщениями должны быть выработаны
до того, как начнут страдать пользователи
или сервер.
Внимание
администратора почтовой системы в основном
требуется обратить на аккумуляцию почтовых
сообщений на сервере. Большинство серверов
электронной почты, какими бы большими
дисками они не обладали, все равно имеют
предел дискового пространства. Следовательно,
и число, а точнее, размер хранимых на них
сообщений также имеет предел. Протоколом
POP3 не уточняется алгоритм удаления
сообщений электронной почты с сервера после
того, как они уже были получены
пользователем. Решение о том, оставлять ли
копии сообщений на сервере или удалять их
после получения локальным ПК, целиком
зависит от пользователей электронной почты.
Один из
методов решения этой проблемы —
лимитирование дискового пространства,
отводимого под каждый почтовый ящик. По
достижении заданного администратором лимита
пользователь не сможет принимать в свой ящик
другие сообщения. Этот метод иногда очень
трудно реализовать политически (попробуйте
сказать боссу, что его лимит исчерпан!).
Существует
еще одно решение данной проблемы. Можно
сохранять сообщения, используя метод
временной задержки. Это означает, что по
прошествии нескольких дней прочитанные
пользователем сообщения будут удаляться из
почтового ящика. Такой метод иногда
используется, хотя его реализация также
связана с некоторыми трудностями.
Многие
программы-клиенты POP3 способны работать с
командой UIDL
для идентификации сообщений в почтовом ящике.
При этом они будут загружать пользователю
только новые сообщения, сохраняя время их
получения. К сожалению, не все клиенты POP3
(в основном более старые) поддерживают эту
команду и, таким образом, каждый раз при
соединении с сервером будут получать все
сообщения — как новые, так и старые.
Существует только один путь избежать этого —
удалять сообщения с сервера после их
получения клиентом. Однако это порождает
другую проблему.
Довольно
часто в последнее время компании разрешают
своим работникам получать электронную почту
как на рабочий ПК в офисе, так и на домашний
ПК (см. лекцию 16, "Поддержка удаленных
клиентов"). Результатом этого является "разбиение"
их почтовых ящиков на два отдельных ящика.
Почта, полученная на домашний ПК, не может
дублироваться на офисный ПК. Естественно,
что такое положение вещей не удовлетворяет
самих пользователей системы электронной
почты.
Резюме
Передав почту посредством SMTP-сервера под
управлением ОС Linux, пользователи должны иметь
возможность получать ответы на свои сообщения.
Для получения сообщений с почтового сервера на
локальный ПК пользователя был разработан
протокол почтового офиса версии 3 — POP3.
Протокол POP3 не так универсален, как его более
молодые собратья, но простота настройки и
применения сделала его наиболее широко
применяемым протоколом для обмена почтовыми
сообщениями. Существует программное обеспечение,
реализующее функции как клиента, так и сервера
POP3 в ОС Linux. Программы
ipopd и
qpopper
используются в ОС Linux для обеспечения работы
сервера POP3. С их помощью пользователи могут
подключаться к серверу и получать
предназначенные для них сообщения электронной
почты. С помощью программы
fetchmail в ОС
Linux можно реализовать функции клиента POP3 для
получения почты от провайдера Internet. К
сожалению, в протоколе POP3 имеются определенные
ограничения. Однако сейчас разрабатываются
альтернативные протоколы для получения
электронной почты, которые были бы лишены
недостатков POP3. Например, протокол IMAP, речь
о котором пойдет в следующей лекции.
|