Что именно делает MTA?

Этот question заставил меня задуматься, и теперь я понимаю, что я ничего не знаю о внутренностях MTA.

Что именно делает MTA? Все после SMTP-протокола кажется мне темной магией. Скажем, что я хотел закодировать минималистский MTA (или MDA) только для отправки электронных писем, что мне нужно узнать/сделать?

Изменить. На самом деле я не планирую писать MTA, я просто хочу понять, как он работает внутри.

Ответ 1

--- отредактируйте, как-то заметив, что вы говорили о возможности написания MTA ---

Чтобы написать MTA, вам нужно открыть серверный сокет. Когда кто-то подключается, вам необходимо отправлять и получать текстовые (ascii) данные на этом сокете в соответствии с протоколом SMTP. SMTP очень чат, поэтому вы можете ожидать несколько раундов общения.

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

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

Они не называют это e- mail ни для чего.

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

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

MTA обычно просматривает адрес доставки и либо настроен как "конечная точка" почтового адреса электронной почты, либо знает, что сервер XYZ находится на одном скачке ближе к почтовому домену адреса электронной почты. Если это конечная точка, она будет копировать сообщение из проводника в папку "Входящие". Если он ретранслирует, он "переадресует" сообщение на следующий MTA.

Ответ 2

Здесь ya go: http://en.wikipedia.org/wiki/Message_transfer_agent

Быстро, MTA получает необработанное сообщение, решает, где находится конечный пункт назначения, а затем пересылает сообщение в этот пункт назначения.

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

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

Если вам удастся выполнить сложную работу, почта будет потеряна, и это ваша проблема. Но с ним все еще весело играть.

Ответ 3

Изменить. Исходное руководство, к которому я привязался, прошло 404. Здесь другое, что хорошо: https://troubleshootguru.wordpress.com/2014/07/06/mail-server-components-mta-mda-mua/

Короче говоря, MUA - это пользовательский клиент, который использует SMTP для отправки электронной почты в MTA. MTA - это сервер, который отвечает за маршрутизацию MTA к месту назначения. Если этот пункт назначения является другим сервером, MTA передает письмо в MDA. MDA является клиентом на сервере, который использует SMTP для пересылки электронной почты на другой сервер, который также является MTA.

Итак, что вам нужно узнать? Если вы хотите написать MUA или MDA, вам нужно научиться открывать сокет другому компьютеру, отправлять SMTP-команды и получать SMTP-ответы. Если вы хотите написать MTA, вам нужно научиться слушать соединения сокетов на порту, получать SMTP-команды и отправлять SMTP-ответы.

Если вам нравится Java, попробуйте код на этой странице в качестве отправной точки для клиента.