|
|
|
Что есть в письмах кроме писем?
Много ли можно почерпнуть из обычного письма? Если отправитель вам давно и хорошо известен, то, вероятно, ничего существенно нового не узнать, но если отправитель - неизвестный аноним, можно попробовать определить его географическое положение, реальное имя, используемое программное обеспечение, имя его компьютера и т.д. Для этого необходимо всего-то лишь проанализировать заголовок его письма.
Заголовок всегда идет в начале письма. Признаком конца заголовка является пустая строка. Всё идущее после этой строки является текстом письма и, как правило, не обрабатывается почтовыми службами. Заголовок состоит из нескольких полей, а поле, в свое очередь, - из двух частей: названия и значения, разделяемые между собой двоеточием, например field:value.
Займемся теперь детальным изучением наиболее часто встречающихся полей:
| Название поля |
Назначение |
| Return-Path: |
Служит для указания адреса возврата письма. Как правило, совпадает с адресом отправителя. Адрес заключается в угловые скобки. |
| Received: |
Содержит путь прохождения письма по почтовым серверам. Полей обычно несколько и каждое такое поле обозначает один сервер в маршруте. Серверы указываются в обратном хронологическом порядке, то есть каждый новый сервер вставляет свою подпись сверху. Формат таков:
Received:
from <домен> - отправитель,
by <домен> - получатель,
via <путь> - физический путь,
with <протокол> - почтовый протокол,
id <идентификатор> - идентификатор сообщения у получателя,
for <адрес> - финальный адрес получателя,
<дата/время> - время получения сообщения.
Обязательно только указание времени, остальная информация может быть пропущена, хотя обычно присутствует большинство из описанных данных. |
| Message-ID: |
Уникальный идентификатор сообщения. Как правило, идентификатор составляется из текущей даты, времени, адреса компьютера и некоей случайной величины. Записывается идентификатор в угловых скобках. |
| From: |
Автор сообщения. Указывается адрес электронной почты автора в угловых скобках, но нередко указывается еще и реальное имя. |
| Sender: |
Лицо или служба, отправившая сообщение, в том случае, если не совпадает со значением поля "From" Довольно редко встречающееся поле, попадается иногда в различных спэм-письмах. |
| To: |
Основной получатель. Указывается адрес электронной почты в угловых скобках. Можно указать еще и реальное имя, которое впрочем, будет с успехом проигнорировано почтовыми службами. Можно указать несколько получателей через запятую. |
| Cc: |
Carbon Copy. Дополнительные получатели, синтаксис такой же, как для поля "To". |
| Bcc: |
Blind Carbon Copy. Дополнительные получатели, адреса которых не должны быть видны другим получателям. Очень полезное поле! Используется когда, например, надо известить многих лиц об одном и том же, но не нужно, чтобы содержание вашей адресной книги попало ко всем корреспондентам. Синтаксис аналогичен полям "To" и "Cc". |
| Date: |
Дата написания письма, хотя некоторые системы выставляют дату отправки письма. В стандартной ситуации это все-таки дата написания письма, а дата отправки определяется из первого поля "Received". |
| Subject: |
Тема письма. |
| MIME-Version: |
Наличие этого поля говорит о том, что текст письма форматирован в соответствии со стандартом MIME. Значение поля говорит об используемой версии MIME. Подробное описание стандарта MIME см. в RFC 1521. Например: "MIME-Version: 1.0". |
| In-Reply-To: |
Ссылка на письмо, ответом на которое является настоящее письмо. Каждое письмо имеет свой уникальный идентификатор, который проставляется в поле "Message-ID". |
| References: |
Ссылки, на другие письма, относящиеся к данному. Является обобщением поля "In-Reply-To". |
| X-Mailer: |
Информация о почтовой программе, использованной для написания письма. |
| Priority: |
Приоритет письма. Бывает "обычным", "срочным" и "не срочным". Как правило, используются фразы: "Normal", "Urgent", "Non-urgent". Может оказывать влияние на скорость обработки и передачи письма различными промежуточными почтовыми системами. |
| X-Priority: |
Тоже приоритет письма, но, в отличие от "Priority", обозначается цифрами. |
| Importance: |
Пометка от отправителя получателю о важности сообщения. Может принимать значения "High", "Normal" или "Low". В отличие от поля "Priority", никак не влияет на скорость пересылки. |
| Content-Type: |
Формат содержимого письма. Определяется тип информации в письме и способ ее представления. В частности задается кодировка письма, если используется какой-либо национальный набор символов. |
| Content-Transfer-Encoding: |
Метод кодирования, используемый в письме, согласно стандарту MIME. |
Приведенная краткая таблица не претендует на абсолютную полноту. Существует масса устаревших или, напротив, новых (экспериментальных) полей заголовка e-mail. Например, Microsoft использует поля "X-MimeOLE" и "X-MSMail-Priority", которые являются нестандартными. Строго говоря, все поля, начинающиеся с "X-" (так называемые, private-поля), не являются стандартными, а используются по внутрифирменным соглашениям. Существуют редко используемые стандартные поля, например: "Keywords", "Comments", "Content-Description" - служащие для описания содержимого письма. Но в подавляющем большинстве случаев вышеприведенной таблицы вполне достаточно для прочтения и понимания содержания заголовка. Впрочем, для полноты картины эту таблицу желательно дополнить более подробным описанием стандарта MIME (Multipurpose Internet Mail Extensions), поскольку многие поля так или иначе относятся именно к MIME, информацию по которому можно найти в RFC 1521 и RFC 1522.
Итак, MIME предназначен для задания способов передачи посредством электронной почты различной нетекстовой информации, а также больших объемов информации, которые необходимо посылать в нескольких письмах, разбив на кусочки. Следует заметить, что под нетекстовой информацией надо понимать не только бинарные файлы, но и тексты в нестандартной кодировке, то есть в отличной от ASCII, описанной в ANSI X3.4-1986.
Одно из основных полей, касающихся MIME, - это "Content-Type". Возможные его значения приведены в таблице.
| Название поля |
Назначение |
| text |
Текстовая информация в виде набора символов или описания текста на стандартном языке. |
| multipart |
Служит для объединения нескольких частей (возможно, разных типов) сообщения в одно письмо. |
| application |
Служит для пересылки бинарных файлов приложений или данных посредством электронной почты. |
| message |
Указывает на инкапсуляцию другого письма. |
| image |
Служит для пересылки изображений. |
| audio |
Служит для пересылки звуковой информации. |
| video |
Служит для пересылки видеоинформации. |
В поле "Content-Type" нужно указать подтип информации. Например, для поля "text" используются в основном подтипы "plain" - означающий, что текст обычный и неформатированный, и "html" - указывающий на то, что сообщение в формате HTML. Если отправляется сообщение в формате HTML, то правильная почтовая программа создаст две части письма: в "text/plain" и "text/html", чтобы в случае непонимания подтипа "html" на получающей стороне не возникло неудобств. С другой стороны, правильная почтовая программа получателя должна показать письмо в максимально информативном виде и поэтому, пропустив "text/plain"-часть сообщения, отобразит "text/html". В общем случае, текст может быть форматирован любым способом, понимаемым обеими сторонами. Это декларировано в RFC 1341. В поле "text" также указывается кодовая таблица. Например: "Content-type: text/plain; charset=us-ascii".
Для поля "multipart" можно указывать подтипы: "alternative" - на случай, если несколько частей представляют одно и то же, а надо выбрать одну из них для отображения; "parallel" - если надо отобразить части одновременно; "digest" - если каждая часть имеет тип "message"; и некоторые другие подтипы. Для поля "message" основной подтип - "rfc822". Еще пара используемых подтипов: "partial" - для посылки части сообщения и "External-body" - для передачи, например, объемной информации путем ссылки на внешний источник данных.
Подтип поля "image" задает графический формат, в котором пересылается изображение. Основные форматы - jpeg и gif. Поле "audio" имеет основной подтип "basic". Поле "video" - основной подтип "mpeg".
Поле "application" имеет основной подтип "octet-stream" в случае обычных бинарных данных. Если посылается файл известного типа, то указывается его тип. Так, для MS Word документов Outlook пишет "application/msword", а для MS Excel "application/vnd.ms-excel".
В соответствии с RFC 822, все письма, по умолчанию, передаются простым текстом в кодировке US-ASCII, что соответствует "Content-type: text/plain; charset=us-ascii".
Следующее важнейшее поле, касающееся MIME, - это "Content-Transfer-Encoding". Служит оно для указания способа кодирования в случаях, когда посылаемое письмо содержит что-либо не умещающееся в рамках US-ASCII. Стандартизованы следующие способы:
| Кодировка |
Примечание |
| 7bit |
Считается, что длина одной строки сообщения не более 1000 символов, а сами строки состоят только из US-ASCII-символов. |
| 8bit |
Строки также ограничены по длине, но могут использоваться символы из старшей половины кодовой таблицы. |
| binary |
Нет ограничений ни на длину, ни на содержание. |
| base64 |
Письмо кодировано в соответствии со стандартом "base64". |
| quoted-printable |
Письмо кодировано в соответствии со стандартом "quoted-printable". |
Подробно касаться методов "quoted-printable" и "base64", равно как "uuencoding" и некоторых других, в этой статье касаться не станем, поскольку тема это довольно объемистая. Разработчики почтовых систем могут использовать свои (оригинальные) способы кодирования, с тем лишь условием, чтобы принимающая сторона смогла корректно декодировать информацию.
Вторая задача MIME - это стандартизация разбиения больших писем на несколько кусочков. Для этого в поле "Content-Type" после значения "multipart/" указывается строка - уникальный ограничитель фрагментов "boundary=". А затем перед каждым фрагментом пишется эта строка, предваренная двумя минусами, а в конце фрагментации еще одна, завершающаяся такими же двумя минусами.
Не вдаваясь в дальнейшее описания стандартов, коснемся нескольких практических вещей. Как добраться до заголовка письма?
- В программах MS Outlook Express и MS Internet Mail, необходимо нажать правую кнопку мыши, когда курсор указывает на сообщение, и выбрать пункт "Properties" (либо в меню "File" также выбрать "Properties"). В появившемся диалоге надо отметить вторую закладку "Details", а потом нажать кнопку "Message Source". Появится окно, содержащее то, что нас интересует.
- В программе Netscape Mail в меню "Options/Show Headers" нужно отметить "All", и заголовки писем предстанут во всей своей красе.
- В программе Netscape Messenger в меню "View/Headers" надо также выбрать "All".
- В программе The Bat надо в меню "Вид" отметить "Служебная информация".
В других почтовых программах читатель может попытаться разыскать заголовок письма самостоятельно. Скорее всего, ему это удастся.
Маленькое резюме. Что же действительно интересного можно увидеть в заголовке письма?
- Полный маршрут прохождения письма, включая время отправления, в полях "Received". Например, таким образом Вы сможете выяснить, по вине какого сервера ваше письмо задержалось на целых полчаса.
- Тип почтовой программы и операционной системы отправителя в поле "X-Mailer".
- Возможно, имя компьютера отправителя по суффиксу поля "Message-Id".
- Возможно, IP-адрес компьютера отправителя по полю "Message-Id" или по первому полю "Received".
- Список всех получателей этого письма по полю "Cc". Нередко люди, посылая массовое сообщение, например, об аварии сервера, рассылают копию письма по всем, указанным в их адресной книге. Таким образом, любой получатель сможет ознакомиться с ее содержимым. Более грамотный подход заключается в использование поля "Bcc". Тогда одно письмо, как и в первом случае, уйдет ко многим адресатам, но весь список рассылки они не получат.
- Вероятное географическое местоположение отправителя по часовому поясу, прописанному в поле "Date", и по анализу адресов в поле "Received".
Но самое главное - изучая заголовки, приходящих писем, Вы разберетесь в механизме работы одной из старейших интернет-служб. Чего я вам и желаю!
|
|