Главная страница / 38. Средства использования сетевых ресур...: 38.2. Почтовые программы

38.2. Почтовые программы

Электронная почта

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

Электронная почта (англ. email, e-mail, от англ. electronic mail) – технология и предоставляемые ею услуги по пересылке и получению электронных сообщений (называемых письми или электронными письми) по распределенной (в том числе глобальной) компьютерной сети. Основное отличие от прочих систем передачи сообщений (например, служб мгновенных сообщений) – возможность отложенной доставки и развитая система взаимодействия независимых почтовых серверов.

Почтовая программа (клиент электронной почты, почтовый клиент) – программное обеспечение, устанавливаемое на компьютере пользователя и предназначенное для получения, написания, отправки и хранения сообщений электронной почты одного или нескольких пользователей (в случае, например, нескольких учетных записей на одном компьютере) или нескольких учетных записей одного пользователя.

История

Появление электронной почты можно отнести к 1965 году, когда сотрудники Массачусетского технологического института (MIT) Ноэль Моррис и Том Ван Влек написали программу MAIL.

Общее развитие электронной почты шло через развитие локального взаимодействия пользователей на многопользовательских системах. Пользователи могли, используя программу mail (или её эквивалент), пересылать друг другу сообщения в пределах одного компьютера. Следующий шаг был в возможности переслать сообщение пользователю на другой машине — для этого использовалось указание имени машины и имени пользователя на машине.

В настоящий момент существует несколько моделей коммерческого применения почтовых систем.

  • Домашние и корпоративные почтовые системы – функционируют на собственном или арендованном оборудовании владельца почтовой системы (обычно он же является и владельцем домена, в котором работает почтовый сервер).
  • Услуга приема/отправки электронной почты – осуществляется сторонней организацией. Организация (персона) владеет доменом и самостоятельно хранит архив переписки.
  • Услуги приема/отправки и хранения почты – осуществляет сторонняя организация на своих мощностях. Заказчик получает доступ к системе исполнителя для отправки писем и для доступа к архиву писем. Почтовый домен при этом находится в собственности заказчика.
  • Прием, отправка, хранение писем – осуществляет исполнитель, почтовый домен принадлежит исполнителю. Большинство подобных сервисов бесплатно, и они работают за счёт показа рекламы пользователю или являются бесплатным дополнением к другим сервисам исполнителя.

После появления распределенной глобальной системы имен (DNS) для указания адреса стали использоваться доменные имена –  user@example.com – пользователь user в домене example.com. Доменное имя соответствует имени почтового сервера. Пользователи забирают свою почту по различным сетевым протоколам (среди распространенных на настоящий момент – POP3, IMAP, MAPI).

DNS работает в сетях TCP/IP. Как частный случай DNS может хранить и обрабатывать и обратные запросы, определения имени хоста по его IP-адресу – IP-адрес по таблице соответствия преобразуется в доменное имя, и посылается запрос на информацию типа PTR.

Для отправки писем используется протокол SMTP.

Протоколы доступа к почтовым серверам

SMTP

Общепринятым в мире протоколом обмена электронной почтой является SMTP.

SMTP (англ. Simple mail transfer protocol – протокол передачи почты), в общепринятой реализации использует DNS для определения правил пересылки почты (хотя в частных системах, вроде Microsoft Exchange, SMTP может действовать согласно информации из других источников).

В различных доменах настроены свои, независимые друг от друга, почтовые системы. У каждого почтового домена может быть несколько пользователей. (Однако фактически может быть так, что одна организация или персона владеет многими доменами, которые обслуживаются (физически) одной почтовой системой). Почта передается между узлами с использованием программ пересылки почты MTA (англ. Mail Transfer Agent). Поведение систем при связи друг с другом строго стандартизировано, для этого используется протокол SMTP (и соблюдение этого стандарта, наравне с всеобщей поддержкой DNS всеми участниками, является основой для возможности связи «всех со всеми» без предварительных договоренностей). Взаимодействие почтовой системы и пользователей, в общем случае, никак не регламентируется и может быть произвольным, хотя существуют как открытые, так и закрытые (завязанные на ПО конкретных производителей) протоколы взаимодействия пользователей и почтовой системы.

Программа, работающая в почтовой системе и обслуживающая пользователей, называется MDA (англ. Mail Delivery Agent – агент доставки почты). В некоторых почтовых системах MDA и MTA объединены в одну программу, в других системах они разнесены в виде разных программ или вообще выполняются на различных серверах. Программа, с помощью которой пользователь осуществляет доступ, называется MUA (англ. Mail User Agent), хотя, в случае, например, веб-интерфейса, может и отсутствовать.

Внутри заданной почтовой системы (обычно находящейся в рамках одной организации) может быть множество почтовых серверов, выполняющих как пересылку почты внутри организации, так и другие связанные с электронной почтой задачи: фильтрацию спама, проверку вложений антивирусом, обеспечение автоответа, архивацию входящей/исходящей почты, обеспечение доступа пользователям различными методами (от POP3 до ActiveSync). Взаимодействие серверов в рамках одной почтовой системы может быть подчинено общим правилам (использование DNS и правил маршрутизации почты с помощью протокола SMTP) или следовать собственным правилам компании (используемого программного обеспечения).

POP3

После попадания почты на конечный сервер он осуществляет временное или постоянное хранение принятой почты. Существует две различные модели работы с почтой: концепции почтового ящика и хранилища почты.

В концепции почтового ящика почта на сервере хранится временно, в ограниченном объеме (аналогично почтовому ящику для бумажной почты), а пользователь периодически обращается к ящику и «забирает» письма (т. е. почтовый клиент скачивает копию письма к себе и удаляет оригинал из почтового ящика). На основании этой концепции действует протокол POP3.

POP3 (англ. Post Office Protocol Version 3 – протокол почтового отделения, версия 3) используется почтовым клиентом для получения сообщений электронной почты с сервера. Обычно используется в паре с протоколом SMTP.

IMAP

Концепция постоянного хранения подразумевает, что вся корреспонденция, связанная с почтовым ящиком (включая копии отправленных писем) хранится на сервере, а пользователь обращается к хранилищу (иногда его по традиции также называют почтовым ящиком) для просмотра корреспонденции (как новой, так и архива) и написания новых писем (включая ответы на другие письма). На этом принципе действуют протокол IMAP и большинство веб-интерфейсов бесплатных почтовых служб. Подобное хранение почтовой переписки требует значительно больших мощностей от почтовых серверов, в результате во многих случаях происходит разделение между почтовыми серверами, пересылающими почту, и серверами хранения писем.

IMAP (англ. Internet Message Access Protocol – Протокол доступа к электронной почте Интернета) – протокол прикладного уровня для доступа к электронной почте.

IMAP предоставляет пользователю богатые возможности для работы с почтовыми ящиками, находящимися на центральном сервере. Почтовая программа, использующая этот протокол, получает доступ к хранилищу корреспонденции на сервере так, как будто эта корреспонденция расположена на компьютере получателя. Электронными письмами можно манипулировать с компьютера пользователя (клиента) без постоянной пересылки с сервера и обратно файлов с полным содержанием писем.

В определенных условиях сервер хранения писем может быть настроен на поведение, подобное клиенту: такой сервер обращается к почтовому серверу по протоколу POP3 и забирает почту себе. Подобные решения используются обычно в малых организациях, где нет инфраструктуры для развертывания полноценных почтовых серверов; в этом случае используется локальный сервер для хранения почты и почтовый сервер провайдера, предоставляющий услугу получения почты по POP3.

Основной недостаток подобного решения – задержка в доставке (так как забирающее почту ПО обращается на сервер с некоторой задержкой).

MAPI

MAPI (англ. Messaging Application Programming Interface) – интерфейс программы, работающей с электронной почтой в Microsoft Windows.

MAPI позволяет получать, читать, создавать, отправлять почтовые сообщения, присоединять к ним файлы (или получать доступ к присоединенным файлам) и т. д. Примерами приложений, использующих MAPI являются Microsoft Outlook.

Релеи

DNS позволяет указать в качестве принимающего сервера  любой узел Интернета, не обязательно являющийся частью доменной зоны домена получателя. Это может использоваться для настройки пересылки почты через третьи серверы. Сторонний сервер принимает почту для домена пользователя и пересылает его на почтовые серверы пользователя как только появляется возможность. Такие серверы называется открытыми релеями.

Для своих пользователей серверы почтовой системы являются релеями (пользователи отправляют почту не на серверы почтовой системы адресата, а на «свой» почтовый сервер, который передает письма далее). Во многих сетях провайдеров Интернета возможность отправлять письма по протоколу SMTP за пределы сети закрыта (из-за использования этой возможности троянами, вирусами). В этом случае провайдер предоставляет свой SMTP-сервер, через который и направляется вся почта за пределы сети. Открытым релеем при этом считается такой релей, который не проверяет, является ли пользователь «своим» (проверка может осуществляться как на основании сетевого адреса компьютера пользователя, так и на основании идентификации пользователя паролем/сертификатом).

Маршрутизация почты

Почтовый сервер при обработке письма действует по следующему алгоритму: для домена-получателя ищутся все MX-записи. Они сортируются в порядке убывания приоритета. Если адрес почтового сервера совпадает с одним из узлов, указанных в MX-записях, то все записи с приоритетом, меньшим приоритета узла в MX-записи (а также MX-запись самого узла), отбрасываются, а доставка осуществляется на первый отвечающий узел (узлы пробуются в порядке убывания приоритета).

Если сеть имеет различные DNS-серверы (например, внешние – в Интернете, и локальные – в собственных пределах), то возможна ситуация, когда «внутренние» DNS-серверы в качестве наиболее приоритетного получателя указывают на недоступный в Интернете сервер, куда и перенаправляется почта с релея, указанного как узел-получатель для Интернета. Подобное разделение позволяет осуществлять маршрутизацию почты по общим правилам между серверами, не имеющими выхода в Интернет.

Структура письма

Электронное письмо состоит из нескольких частей.

  1. Заголовки SMTP-протокола, полученные сервером. Эти заголовки могут включаться, а могут и не включаться в тело письма в дальнейшем, так что возможна ситуация, когда сервер обладает большей информацией о письме, чем содержится в самом письме. Например, поле RCPT TO указывает получателя письма, при этом в самом письме получатель может быть не указан. Эта информация передается за пределы сервера только в рамках протокола SMTP, и смена протокола при доставке почты (например, на узле-получателе в ходе внутренней маршрутизации) может приводить к потере этой информации.
  2. Само письмо (в терминологии протокола SMTP'DATA'), которое в свою очередь состоит из следующих частей, разделенных пустой строкой:  
    • заголовков письма, иногда называемых по аналогии с бумажной почтой конвертом (англ. envelope). В заголовке указывается служебная информация и пометки почтовых серверов, через которые прошло письмо, пометки о приоритете, указание на адрес и имя отправителя и получателя письма, тема письма и другая информация;
    • тела письма, где находится собственно текст письма. Согласно стандарту, в теле письма могут находиться только символы ASCII. Поэтому при использовании национальных кодировок или различных форм представления информации (HTML, RTF, бинарные файлы) текст письма должен кодироваться по стандарту MIME и не может быть прочитан человеком без использования декодера или почтового клиента с таким декодером.

Заголовок SMTP

Заголовок SMTP содержит в себе следующую информацию:

  • имя отправляющего узла (не имя отправителя, а имя сервера или компьютера пользователя, который обратился к серверу) – параметр сообщения HELO/EHLO, обычно дополняющийся «объективной» информацией самим сервером (HELO может содержать произвольное имя, а IP отправителя подделать существенно сложнее), по IP-адресу осуществляется поиск PTR-записи в DNS, всё это вместе позволяет идентифицировать отправителя на сетевом уровне (и в реальности часто используется для проверки надежности отправителя с помощью черных/белых списков, в том числе через Интернет);
  • поле «MAIL FROM:», содержащее е-мейл-адрес отправителя. Адрес может быть произвольным (в том числе с несуществующих доменов, однако этот адрес может также проверяться при первичной проверке на спам);
  • поле «RCPT TO:» – наиболее важное поле для доставки почты, содержит электронный адрес получателя. Большинство почтовых систем в случае возможности проверяет, существует ли пользователь, и может отказаться принимать почту, если пользователь, указанный в RCPT TO, не существует.

Заголовок письма

Заголовок письма описывается стандартами RFC.

Запрос комментариев (англ. Request for Comments, RFC) – документ из серии пронумерованных информационных документов Интернета, содержащих технические спецификации и стандарты, широко применяемые во Всемирной сети.

В настоящее время первичной публикацией документов RFC занимается IETF под эгидой открытой организации Общество Интернета (англ. Internet Society, ISOC). Правами на RFC обладает именно Общество Интернета.

Заголовок отделяется от тела письма пустой строкой. Заголовок используется для журналирования прохождения письма и служебных пометок (иногда строки журналирования и пометки называются кладжами).

Кладжи или клуджи (англ. kludge) – управляющие строки, содержащие техническую информацию о сообщениях в сетях, основанных на технологии FTN. Аналогичную роль выполняет RFC-заголовок в сообщениях электронной почты.

Часто о кладжах говорят в широком смысле, имея в виду все строки с технической информацией.

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

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

Часто используемые поля

 

Return-Pathобратный адрес. Может отличаться от MAIL FROM. (т. е. обратный адрес может быть указан отличным от адреса отправителя).

Received – строчка журналирования прохождения письма. Каждый почтовый сервер (MTA) помечает процесс обработки этим сообщением. Если сообщение проходит через несколько почтовых серверов (обычная ситуация), то новые сообщения дописываются над предыдущими (и журнал перемещения читается в обратном порядке, от ближайшего узла к самому дальнему).

MIME-Version – версия MIME, с которым это сообщение создано. Поскольку сообщение создаётся раньше всех остальных событий с письмом, то этот заголовок обычно самый первый (т. е. последний в списке).

From:имя и адрес отправителя (именно в этом заголовке появляется текстовое поле с именем отправителя). Может не совпадать с return-path и даже не совпадать с заголовком SMTP MAIL FROM:.

Sender:отправитель письма. Добавлено для возможности указать, что письмо от чьего-то имени (from) отправлено другой персоной (например, секретаршей от имени начальника).

To:имя и адрес получателя. Может содержаться несколько раз (если письмо адресовано нескольким получателям). Может не совпадать с полем SMTP RCPT TO.

cc: – (от англ. carbon copy). Содержит имена и адреса вторичных получаетелей письма, к которым направляется копия.

bcc: – (от англ. blind carbon copy). Содержит имена и адреса получателей письма, чьи адреса не следует показывать другим получателям. Это поле, обычно, обрабатывается почтовым сервером. Каждый из получателей не будет видеть в этом поле других получателей из поля bcc.

Reply-To:имя и адрес, куда следует адресовать ответы на это письмо.

Message-ID:уникальный идентификатор сообщения. Состоит из адреса узла-отправителя и номера (уникального в пределах узла). Алгоритм генерации уникального номера зависит от сервера/клиента. Выглядит примерно так: AAB77AA2175ADD4BACECE2A49988705C0C93BB7B4A@example.com.

In-Reply-To: – указывает на Message-ID, для которого это письмо является ответом (с помощью этого почтовые клиенты могут легко выстраивать цепочку переписки — каждый новый ответ содержит Message-ID для предыдущего сообщения).

Subject:тема письма.

Date:дата написания письма.

Content-Type:тип содержимого письма. С помощью этого поля указывается тип (HTML, RTF, Plain text) содержимого письма и кодировка, в которой создано письмо.

Помимо стандартных, почтовые серверы (и роботы по обработки почты) могут добавлять свои собственные заголовки, начинающиеся с «X-» (например, «X-MyServer-Note-OK» или «X-Spamassasin-Level»).

Тело письма

Тело письма отделяется от заголовка пустой строкой, а заканчивается (согласно стандартам SMTP) строчкой, состоящей из единственной точки (и символа перевода строки).

Одним из существенных ограничений стандартов на почтовую пересылку является применение 7-битной кодировки (ASCII). Для английского текста это не представляет особой проблемы, однако большинство неанглоязычных языков использует 8-битные и более кодировки, передача которых без искажений не гарантируется. Для целей совместимости, все не 7-битные кодировки приводятся в 7-битный вид (используя различные методы кодирования текста).

Цепочки писем

Благодаря наличию в письме уникального идентификатора, а также тому, что подавляющее большинство почтовых клиентов при ответе на письмо копирует его идентификатор в поле «In-Reply-To» («в ответ на»), появляется возможность достоверной группировки писем по цепочке (англ. thread). В разных почтовых клиентах это реализовано по-разному.

Почтовые рассылки

Почтовая система позволяет организовать сложные системы, основанные на пересылке почты от одного ко многим абонентам.

  • Почтовые рассылки – письмо от одного адреса с одинаковым (или меняющимся по шаблону) содержимым, рассылаемое подписчикам рассылки. Технически может быть организовано как отправка множества писем (используется при шаблонных письмах) или как отправка письма с множеством получателей (в полях TO, CC, BCC). Для управления крупными почтовыми рассылками (более 10–50 абонентов) используются специализированные программы. Правильно организованная почтовая рассылка должна контролировать возврат писем (сообщения о невозможности доставить письмо) с исключением недоступных адресатов из списка рассылки, позволять подписчикам отписываться от рассылок.
  • Нежелательные почтовые рассылки называются спамом и существенно осложняют функционирование почтовых систем.
  • Группы переписки – специализированный тип почтовой рассылки, в которой письмо на адрес группы (обычный почтовый адрес, обработкой почты которого занимается специализированная программа) рассылается всем участникам группы.

Спам

Электронная почта по мере роста популярности начала использоваться для рассылки незапрошенных рекламных сообщений, аналогично тому, как раскидываются рекламные брошюры в обычные почтовые ящики. Однако, в отличие от существенной стоимости бумажной рассылки, отправка значительного количества (миллионов и миллиардов) сообщений практически ничего не стоит отправителю. Это привело к непропорциональному росту количества и размера рекламных рассылок. По мере ужесточения запрета на размещение рекламы, сообщения разделились на легитимные рассылки (на которые обычно подписывается пользователь и от которых он может отказаться в любой момент) и нелегитимные (собственно и называемые спамом). Для рассылки спама в настоящий момент активно используются все возможные технические ухищрения (открытые релеи, ботнеты, поддельные сообщения о невозможности доставки, прокси-серверы, бесплатные серверы электронной почты, допускающие автоматизацию отправки почты).

По утверждению лаборатории Касперского, в мае 2009 года объем спама составил 70–90 % от общей почтовой переписки (т. е. превысил объем полезной почтовой нагрузки в 2–10 раз). Для борьбы со спамом были разработаны различные механизмы (черные списки отправителей, серые списки, требующие повторного обращения почтового сервера для отправки, контекстные фильтры). Одним из последствий внедрения средств борьбы со спамом стала вероятность «ошибочно положительного» решения относительно спама, т. е. часть писем, не являющихся спамом, стала помечаться как спам. В случае агрессивной антиспам-политики (уничтожение писем, кажущихся спамом, в автоматическом режиме без уведомления отправителя/получателя) это приводит к труднообнаруживаемым проблемам с прохождением почты.

Шифрование почты

Для шифрования почты в настоящий момент широко применяются два стандарта: S/MIME (использующий инфраструктуру открытых ключей) и Open PGP (использующий сертификаты со схемой доверия).

Стандарты S/MIME и Open PGP позволяют обеспечить три вида защиты:

  • защиту от изменения;
  • неотзывную подпись;
  • конфиденциальность (шифрование).

Оба стандарта используют симметричные криптоалгоритмы для шифрования тела письма, а симметричный ключ шифруют с использованием откытого ключа получателя. Если письмо адресуется группе лиц, то симметричный ключ шифруется по очереди каждым из открытых ключей получателей (и иногда, для удобства, открытым ключом отправителя, чтобы он имел возможность прочитать отправленное им письмо).

MxA-классификация

В терминологии электронной почты выделяется несколько компонентов.

  • MTA (англ. Mail Transfer Agent – агент пересылки почты) – отвечает за отправку почты; чаще всего это почтовый сервер, но, в принципе, возможна реализация с отправкой почты через smart host.
  • MDA (англ. Mail Delivery Agent – агент доставки почты) – отвечает за доставку почты конечному пользователю.
  • MUA (англ. Mail User Agent – почтовый агент пользователя; в русской нотации закрепился термин почтовый клиент) — программа, обеспечивающая пользовательский интерфейс, отображающая полученные письма и предоставляющая возможность отвечать, создавать, перенаправлять письма.
  • MRA (англ. Mail Retrive Agent – почтовый сервер, забирающий почту с другого сервера по протоколам, предназначенным для MDA.

img1

Рис. 38.1. Взаимоотношения MTA, MDA и MUA при передаче электронной почты

В случае использования веб-интерфейса MDA и MUA могут совпадать. В случае использования выделенных серверов для хранения почты пользователей всё взаимодействие пользователя с сервером может происходить по протоколам, не укладывающимся в эту схему.

Почтовые серверы обычно выполняют роль MTA и MDA. Некоторые почтовые серверы (программы) выполняют роль как MTA, так и MDA, некоторые подразумевают разделение на два независимых сервера: сервер-MTA и сервер-MDA (при этом если для доступа к ящику используются различные протоколы, – например, POP3 и IMAP, – то MDA в свою очередь может быть реализован либо как единое приложение, либо как набор приложений, каждое из которых отвечает за отдельный протокол).

Большие почтовые программы, так называемые программы «всё в одной», такие как Mozilla Thunderbird, The Bat! и Microsoft Outlook, сегодня комбинируют работу MSA, MDA и MRA в одном приложении.

В отличие от почтового сервера, клиент электронной почты обычно отправляет сообщение не прямо на соответствующий сервер получателя, а на один и тот же почтовый сервер, который выступает как релей. Обычно это почтовый сервер провайдера или компании. Отправка почты чаще всего осуществляется по протоколу SMTP.

Клиент электронной почты принимает почту с одного или нескольких почтовых серверов, часто это тот же самый сервер, который служит для отправки. Прием почты обычно осуществляется по протоколам POP или IMAP.

Также в функции клиента электронной почты может входить: сортировка, хранение сообщений, поиск по архиву сообщений, ведение адресной книги, фильтрация принимаемых сообщений по разным критериям, конвертация форматов, шифрование, организация интерфейсов с офисными программами и другие функции.