0

我正在考虑实现我自己的可以接收和存储邮件的 SMTP 服务器。由于这是一个小型的业余项目,我更愿意让代码保持简单——例如,我不想实现发送邮件的逻辑。但是,RFC 5321的以下部分让我担心:

服务器必须
对邮件数据指示结束后的处理仅
部分成功的情况进行特殊处理。如果在接受多个
收件人和邮件数据后,SMTP 服务器发现邮件
数据可以成功传递给部分收件人,但不是全部收件人,则可能会发生这种情况
。在这种情况下,对 DATA 命令的响应必须是
OK 响应。但是,SMTP 服务器必须编写并向
消息的发起者发送“无法投递的邮件”通知
消息。

这是否意味着,即使我通常只250 OK在确定邮件已安全存储时才返回,我也被迫实施发送失败通知的东西,以防万一有人决定向现有邮件和非邮件邮件发送邮件现有的邮件地址?有什么办法可以在不违反标准的情况下绕过它?如果没有,452 Too many recipients (my RCPT limit is 1, not 100 as required by RFC 5321)当有人试图将邮件发送给多个收件人时,只发回会有多糟糕?

4

2 回答 2

0

在这种情况下,对 DATA 命令的响应必须是 OK 响应。但是,SMTP 服务器必须编写并向消息的发起者发送“无法投递的邮件”通知消息。

这对我来说似乎相当明确。如果你要符合标准,你必须既返回一个 OK 响应(因为消息可以传递给某些接收者),又向发起者发送失败通知(因为它不能传递给其他接收者)。

另一方面,您的问题还提到您只会接受单个收件人的交付,所以a)您已经通过不允许100个收件人和b)“邮件”的失败模式让自己不符合标准数据可以成功地传递给一些但不是全部的接收者”,如果只有一个接收者,就不可能了。

于 2013-02-24T23:22:42.720 回答
0

在重新考虑情况之后,我认为如果服务器可以确保邮件可以在RCPT命令时间发送到所有收件人,我认为实际上可以以符合 RFC 的方式执行此操作——毕竟,个别收件人可以在发送时被拒绝。RCPT收到相应的命令。当然,这意味着例如服务器必须确保有足够的硬盘空间可用于每个收件人和最大邮件大小。如果收件人当前的邮箱大小加上最大邮件大小大于最大邮箱大小,服务器可能会拒绝向收件人发送邮件。

当然,为了支持并发,实际实现要复杂一些。

于 2013-02-25T16:10:17.377 回答