是否每个可以接收邮件的SMTP服务器都必须能够发送失败通知?

是否每个可以接收邮件的SMTP服务器都必须能够发送失败通知?,smtp,Smtp,我正在考虑实现我自己的SMTP服务器,它可以接收和存储邮件。由于这是一个小的爱好项目,我更喜欢保持代码的简单性——例如,我不想实现发送邮件的逻辑。然而,下面的部分让我感到担忧: 服务器必须对以下情况给予特殊处理: 仅在邮件结束数据指示后进行处理 部分成功。如果在接受多个 对于收件人和邮件数据,SMTP服务器会发现邮件 数据可以成功地传递给部分(但不是全部) 收件人。在这种情况下,对数据命令的响应必须是 好的回答。但是,SMTP服务器必须编写并发送一个 “无法投递邮件”通知邮件发送给邮件的发起人

我正在考虑实现我自己的SMTP服务器,它可以接收和存储邮件。由于这是一个小的爱好项目,我更喜欢保持代码的简单性——例如,我不想实现发送邮件的逻辑。然而,下面的部分让我感到担忧:

服务器必须对以下情况给予特殊处理:
仅在邮件结束数据指示后进行处理
部分成功。如果在接受多个
对于收件人和邮件数据,SMTP服务器会发现邮件
数据可以成功地传递给部分(但不是全部)
收件人。在这种情况下,对数据命令的响应必须是
好的回答。但是,SMTP服务器必须编写并发送一个
“无法投递邮件”通知邮件发送给邮件的发起人
信息

这是否意味着,即使我通常只返回
250 OK
,当我确定邮件已安全存储时,我也会被迫实现发送失败通知的功能,以防有人决定同时向现有和不存在的邮件地址发送邮件?有没有办法绕过它而不违反标准?如果没有,当有人试图向多个收件人发送邮件时,仅仅发送回
452个太多的收件人(我的RCPT限制是1,而不是RFC 5321要求的100个)
会有多糟糕

在这种情况下,对DATA命令的响应必须是OK应答。 但是,SMTP服务器必须撰写并发送“无法送达的邮件” 发送给消息发起人的通知消息

这在我看来相当明确。如果要符合标准,则必须返回“OK”响应(因为消息可能会传递给某些收件人)并向发起人发送失败通知(因为无法传递给其他收件人)


另一方面,您的问题还提到,您将只接受单个收件人的传递,因此a)您已经屈服于无论如何都不符合标准,不允许100个收件人;b)失败模式为“邮件数据可以成功传递给部分收件人,但不是全部收件人”如果只有一个收件人,这是不可能的。

重新考虑这种情况后,我认为,如果服务器能够确保邮件能够在
RCPT
命令时间送达所有收件人,那么实际上可以通过符合RFC的方式来实现这一点,当收到相应的
RCPT
命令时,可以拒绝单个收件人。当然,这意味着服务器(例如)必须确保每个收件人都有足够的硬盘空间和最大邮件大小。如果收件人的当前邮箱大小加上最大邮件大小大于最大邮箱大小,则服务器可以拒绝向其发送邮件


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

好吧,如果您想满足标准,那么可以。这就是为什么它是一个标准。如果不是,那么答案显然是“不”。@WaleedKhan:嗯,我可以“稍微”违反标准,或者换句话说,只要不会导致交付尝试失败。你认为我提到的解决方法会导致一些邮件服务器无法发送邮件吗?仅接受单个收件人的发送是我可能会做的一种解决方法,而不是我本来打算做的事情。啊,是的,重读这个问题,我看到它只是作为一种可能的应急计划提到的。我的错误。很抱歉。