这question让我思考,现在我意识到我对MTA的内部结构一无所知。
MTA究竟做了什么? SMTP协议之后的所有内容对我来说都像是黑魔法。假设我想编写一个简约的MTA(或MDA)来发送电子邮件,我需要学习/做什么?
编辑:我实际上并不打算编写MTA,我只是想了解它在内部是如何工作的。
答案 0 :(得分:12)
---以某种方式注意到你在谈论可能写一个MTA后编辑---
要编写MTA,您需要打开服务器套接字。当有人连接时,您需要在该套接字上发送和接收符合SMTP协议的文本(ascii)数据。 SMTP非常健谈,所以你可以期待几轮沟通。
初始通信通常会告诉您是否支持SMTP或是否支持ESMTP。第二轮(可选)通信是确定安全性/加密/功能支持。最终,“客户”方将要求向特定地址/地址集发送消息。完成后,服务器将指示它已准备好获取电子邮件的正文。当邮件正文(及其附件)已全部传输完毕后,MTA会告诉您收到邮件正常。在那个时间点,MTA将充当通过DNS MX记录发现的其他MTA的客户端,以使您的电子邮件更接近其目的地MTA,并将其复制到某人的收件箱中。
因此需要MTA,因为客户端的邮件传递相当于将实体信件交给邮局。邮局负责邮局间路由(与MTA到MTA传输相似)。然后,目的地邮局负责将信件递送到邮政信箱或家庭住址(与一个人的电脑收件箱相似)。
他们没有把它称为电子邮件 。
---原帖如下--- MTA将接受邮件消息,查看它是否可以转发或传递,如果可以转发或传递,则进行响应,然后如果它已表明可以转发或传递它。
消息如何靠近它的最终目的地通常与DNS有点关系。 DNS中的MX(邮件交换)记录表示对特定电子邮件域名负责(或至少更靠近负责服务器)的服务器。在不了解DNS的工作原理的情况下,无法完全理解邮件消息如何靠近目的地。
MTA通常查看传递地址,并将其配置为电子邮件地址的邮件域的“终点”,或者知道服务器XYZ距离电子邮件地址的邮件域更近一跳。如果它是端点,它会将消息从线路复制到某人的收件箱中。如果它正在中继,它会将消息“转发”到下一个MTA。
答案 1 :(得分:3)
这里你去:http://en.wikipedia.org/wiki/Message_transfer_agent
很快,MTA收到原始邮件,决定它的最终目的地,然后将邮件转发到该目的地。
可以编写一个非常简单的MTA,仅发送到本地收件箱。 MTA是系统中一个“更容易”的部分,因为你的行为很糟糕但仍然可以正常工作,所以你与其他系统的互操作性不是一个问题(这就是当今电子邮件的大部分复杂性,垃圾邮件/垃圾邮件)病毒检查)。
MTA的真正合同就是如果您接受系统发送给您的消息,您就有责任传递该消息。因此,当该套接字以确认接受结束时,交付系统的工作就完成了,这一切都掌握在您手中。
如果你碰巧做了一份糟糕的工作,邮件就会丢失,这就是你的问题。但是玩它仍然很有趣。
答案 2 :(得分:2)
编辑:我链接到的原始教程已经过了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,请尝试code on this page作为客户的起点。