Все мы ежедневно отправляем десятки писем и даже не задумываемся, а как же эти письма доставляются адресату. Нажимаем кнопку «Отправить» и ожидаем, что уже через секунду письмо окажется в папке у адресата.
Отправляя письмо через почтовое отделение, мы прекрасно понимаем, что сначала письмо доставляется в нужный город самолетом или поездом, далее машиной до почтового отделения, а там уже почтальон доставит его до почтового ящика, все очевидно. А знаете ли вы как работает доставка электронных писем? Если нет, то эта статья будет вам интересна.
При отправке писем в процессе доставки принимает участие 2 сервера, один ответственен за отправку письма, второй принимает это письмо и пытается доставить его непосредственно до адресата. Процесс взаимодействия двух серверов достаточно интересен, он похож на общение 2 знакомых, которые встретились где-то в городе. Для начала, по сути, они пожимают друг другу руки, первый говорит «привет», второй ему в ответ отвечает тоже «привет». Обычно это вежливая и дружественная беседа, но бывает напряженная и настороженная.
Как и обычное письмо, электронное состоит из 2 частей – конверт (заголовок письма) и сообщение (текст письма).
Заголовки отправляемых писем состоят из нескольких частей: адрес отправителя, адрес получателя, тема сообщения, кодировка письма и прочее. Основываясь на стандартах и принципах форматирования, почтовый клиент знает как распарсить (распознать) данные заголовки и отделить их от текста письма. Заголовок письма используются для определения адреса сервера получателя. Можно сделать сопоставление.
Физический адрес:
Ольга Макарова
пр. Победы 10
Санкт-Петербург, 195001
Email адрес:
o.ivanova@epochta.ru
Сопоставим:
.ru = 195001 (индекс)
epochta = Санкт-Петербург (город)
o.ivanova = Ольга Макарова, пр. Победы 10 (имя и адрес)
Как видно сервер, отправляющий письмо, определяет адрес сервера получателя, разбивая email адрес на составные части. С использованием DNS (Domain Name System — система доменных имён, распределённая система для получения информации о доменах, чаще всего используется для получения IP-адреса по имени хоста) сервер определяет:
- Существует ли домен получателя?
- Если да, то кто ответственен за почту домена – MX запись в DNS (MX-записи для домена указывают серверы, на которые нужно отправлять электронную почту)?
- Если нет, письмо возвращается с ошибкой – домен адресата не существует.
- Проверяется разрешено ли серверу доставлять письма к адресату, не попадает ли он под действие спам фильтров, которые могут заблокировать доставку письма.
Возвращаясь к вопросам взаимодействия серверов на примере 2 знакомых, главное отличие между человеческим общением и разговором машин в том, что компьютеры общаются языком кодов, которые делятся на 3 типа:
- 2хх – принято
- 4хх – временная ошибка
- 5хх – постоянная ошибка
Эти коды являются способом синхронизации серверов. Сервер отправителя передает сообщение и в ответ получает ответ в виде кода.
Первая цифра показывает Вам, если ваша команда была принята и обработана. Есть пять различных значений:
- Почтовый сервер принял команду, но еще не предпринимает никакого действия. Требуется подтверждающее сообщение.
- Почтовый сервер завершил задачу успешно без ошибок.
- Почтовый сервер понял запрос, но требует, чтобы дальнейшая информация завершила процесс.
- Почтовый сервер столкнулся с временным отказом.
- Почтовый сервер столкнулся с неустранимой ошибкой. Ваш запрос не может быть обработан.
Если при отправке сообщения сервер получает в ответ код, начинающийся с 4 и 5, это означает, что ваше сообщение не будет доставлено, пока вы не устраните неисправность.
Вторая цифра означает:
- Синтаксическая ошибка
- Информационный ответ
- Эта цифра относится к состоянию подключения
- Эта цифра относится к состоянию почтового сервера
Последняя цифра кода показывает подробности состояния передачи.
Вот – список самых важных кодов ошибки SMTP (эта информация может быть интересна преимущественно специалистам):
421 Обслуживание не доступно, закрыт канал передачи (Это может быть ответом на любую команду, если обслуживание{служба} знает, что это должно закрыть)
450 Требуемые почтовые действия, не предприняты: почтовый ящик недоступен (например, почтовый ящик занят)
451 Требуемое действие прерывалось: ошибка в обработке
452 Требуемые действия, не предприняты: недостаточно системных ресурсов
500 Синтаксическая ошибка, неправильная команда
501 Синтаксическая ошибка в параметрах или переменных
502 Несуществующая команда
503 Неправильная последовательность команд
504 Параметр Command, не осуществлен
550 Требуемые действия, не предприняты: почтовый ящик недоступен (например, почтовый ящик, не найден, нет доступа)
551 Пользователь не местный; попробуйте еще раз
552 Требуемые почтовые действия прервались: превышено распределение памяти
553 Требуемые действия, не предприняты: имя почтового ящика, недопустимо (например, синтаксис почтового ящика неправильный)
554 Передача данных неудалась
Другие коды, обеспечивающие вас полезной информацией о том, что происходит с вашими сообщениями:
211 Статус системы
214 Сообщение Справки (Информация относительно того, как использовать получатель или значение специфической ненормативной команды; этот ответ полезен только человеческому пользователю)
220 Готов к обслуживанию
221 Обслуживается заключительный канал передачи
250 Требуемые почтовые действия завершены
251 Пользователь не местный; сообщение переправлено
354 Начните ввод сообщения. Завершите ввод сообщения.
Соответственно сервер отправителя, передав сообщения и получив ответ в виде кода понимает, было ли доставлено письмо получателю или нет. В дальнейшем, исходя из ответа, он либо сообщает отправителю, что письмо было отправлено, либо возвращает письмо с ошибкой, либо пытается доставить сообщения еще раз, если ошибка была временная.
Вот так выглядит технический процесс доставки сообщений. Если у вас остались вопросы, с радостью отвечу на них.