Что именно делает MTA? [закрытый]

этой вопрос заставил меня задуматься, и теперь я понимаю, что ничего не знаю о внутренностях MTAs.

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

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

3 ответов


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

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

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

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

Они не называют это e -почта зря.

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

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

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


вот, пожалуйста: http://en.wikipedia.org/wiki/Message_transfer_agent

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

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

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

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


редактировать: оригинальный учебник, с которым я связан, пошел 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, попробуйте код на этой странице как отправная точка для клиента.