この質問は私に考えさせられ、今では MTA の内部について何も知らないことに気づきました。
MTA は正確には何をするのですか? SMTP プロトコル以降のすべてが、私には闇の魔法のように思えます。電子メールを送信するためだけに最小限の MTA (またはMDA )をコーディングしたいとしましょう。何を学ぶ必要がありますか?
編集: 実際に MTA を作成する予定はありません。MTA が内部でどのように機能するかを理解したいだけです。
--- MTA を書く可能性について話していたことに気づいた後で編集 ---
MTA を書き込むには、サーバー ソケットを開く必要があります。誰かが接続すると、SMTP プロトコルに準拠してそのソケットでテキスト (ascii) データを送受信する必要があります。SMTP は非常におしゃべりなので、数ラウンドの通信が予想されます。
通常、通信の最初のラウンドで、SMTP がサポートされているか、ESMTP がサポートされているかがわかります。2 回目の (オプションの) 通信では、セキュリティ/暗号化/機能のサポートを決定します。最終的に、「クライアント」側は、特定のアドレス/アドレスのセットにメッセージを送信するように要求します。完了すると、サーバーは電子メール メッセージの本文を取得する準備が整ったことを示します。メッセージの本文 (およびオプションの添付ファイル) がすべて送信されると、MTA はメッセージを正常に受信したことを通知します。その時点で、MTA は DNS MX レコードを介して検出された他の MTA へのクライアントとして機能し、電子メールを送信先の MTA に近づけて、誰かの受信トレイにコピーします。
したがって、クライアント側でのメール配信は郵便局に物理的な手紙を渡すことと同等であるため、MTA が必要です。ポストオフィスは、ポストオフィス間のルーティング (MTA から MTA への転送と同様) を担当します。送付先の郵便局は、私書箱または自宅住所 (コンピュータの受信ボックスに相当) に手紙を配達する責任があります。
彼らはそれをただの電子メールとは呼びません。
--- 元の投稿は次のとおりです --- MTA は、メール メッセージを受け取り、転送または配信できるかどうかを確認し、転送または配信できる場合は応答し、可能であることが示された場合は転送または配信します。
メッセージが最終的な宛先に近づく方法は、通常、DNS と関係があります。DNS の MX (メール交換) レコードは、特定の電子メール ドメイン名を担当する (または少なくとも担当サーバーに近い) サーバーを示します。DNS の仕組みを理解しないと、メール メッセージが宛先に近づく方法を完全に理解することはできません。
MTA は通常、配信アドレスを調べて、電子メール アドレスのメール ドメインの「エンド ポイント」として設定されているか、サーバー XYZ が電子メール アドレスのメール ドメインに 1 ホップ近いことを認識します。エンドポイントの場合は、メッセージがワイヤから誰かの受信トレイにコピーされます。中継している場合は、メッセージを次の 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 が好きな場合は、このページのコードをクライアントの出発点として試してください。