我正在考虑实现我自己的SMTP服务器,它可以接收邮件并存储它。由于这是一个小型的业余爱好项目,我宁愿保持代码简单 - 例如,我不想实现发送邮件的逻辑。但是,RFC 5321的以下部分让我担心:
服务器必须对其中的情况给予特殊处理 邮件数据结束后的处理仅为
部分成功。如果在接受了几个之后,就会发生这种情况 收件人和邮件数据,SMTP服务器发现邮件
数据可以成功地传递给一些但不是全部的 收件人。在这种情况下,对DATA命令的响应必须是
一个好的回复。但是,SMTP服务器必须编写并发送
“无法送达的邮件”通知消息给发件人 消息。
这是否意味着,即使我通常只在我确定邮件已安全存储时才返回250 OK
,我也被迫实施发送失败通知的内容,以防有人决定发送邮件既可以同时存在现有邮件地址又不存在现有邮件地址?有没有办法绕过它而不违反标准?如果没有,只要有人试图向多个收件人发送邮件,发回452 Too many recipients (my RCPT limit is 1, not 100 as required by RFC 5321)
会有多糟糕?
答案 0 :(得分:0)
在这种情况下,对DATA命令的响应必须是OK回复。 但是,SMTP服务器必须撰写并发送“无法投递的邮件” 向消息发起人发送通知消息。
这对我来说似乎相当明确。如果您要符合标准,那么必须都会返回OK响应(因为邮件可以传递给某些收件人)并向发件人发送失败通知(因为它无法传递给其他人)收件人)。
另一方面,您的问题还提到您只接受单个收件人的递送,因此a)您已经自行辞职,因为不允许100个收件人并且b)失败模式无论如何都不符合标准如果只有一个收件人,则“邮件数据可以成功传送给某些收件人,但不是所有收件人”是不可能的。
答案 1 :(得分:0)
在重新思考这种情况之后,我认为如果服务器可以确保邮件可以在RCPT
命令时间传递给所有收件人,那么实际上可以以符合RFC的方式执行此操作 - 毕竟,当收到相应的RCPT
命令时,可以拒绝单个收件人。当然,这意味着服务器例如必须确保每个收件人有足够的硬盘空间和最大邮件大小。如果服务器当前的邮箱大小加上最大邮件大小超过最大邮箱大小,服务器就可以拒绝向收件人发送邮件。
当然,为了支持并发,实际的实现有点复杂。