Python Twisted SMTP服务器-获取完整的收件人列表和标头数据?

Python Twisted SMTP服务器-获取完整的收件人列表和标头数据?,python,smtp,twisted,Python,Smtp,Twisted,因此,在@Jean-PaulCalderone付出了巨大的耐心和感激之后,我现在有了一个支持(有待测试)TLS的twisted mail服务器!我可以远程登录到它,发布我的EHLO,邮件等,并将邮件转储到文件中,如下面的代码片段所示(下面的2个类是从以下内容中删除和修改的: 但是,当我指定多个RCPT到地址时,问题就出现了——在我的receivedheader方法中,只有最后一个在“receivedheader”中?我是否在“receivedheader”中处理不当?我开始怀疑这是validat

因此,在@Jean-PaulCalderone付出了巨大的耐心和感激之后,我现在有了一个支持(有待测试)TLS的twisted mail服务器!我可以远程登录到它,发布我的EHLO,邮件等,并将邮件转储到文件中,如下面的代码片段所示(下面的2个类是从以下内容中删除和修改的:

但是,当我指定多个RCPT到地址时,问题就出现了——在我的receivedheader方法中,只有最后一个在“receivedheader”中?我是否在“receivedheader”中处理不当?我开始怀疑这是validateTo函数中的return语句。当我向两个收件人发送一条消息时,服务器日志如下所示:

2014-10-21 08:05:10+0000 [ESMTP,2,127.0.0.1] Receiving message for delivery: from=me@home.com to=['you@work1.com', 'you@work2.com']
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] New message received:
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] Client: 127.0.0.1
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] From: me@home.com
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] To: you@work1.com
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] Today is the 21st Oct
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] (still)
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] New message received:
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] Client: 127.0.0.1
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] From: me@home.com
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] To: you@work2.com
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] Today is the 21st Oct
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] (still)
此外,能够访问“完整”的SMTP标头(邮件ID等)也很好。我当然看过SMTP.IMessage/SMTP.IMessageDelivery的API文档,但看不到任何相关内容?最终,创建一个文件(可能是2,拆分标头/正文)会很好输出,名称以某种方式基于msg ID


有人能解释一下我遗漏了什么吗?非常感谢!

您的代码和输出看起来非常好。 收件人未分组的行为是由于
lambda
语句触发每个收件人/邮件发出的
self.lines.append()

但是,您可以考虑更改
lineReceived
的行为,以便在接收时对所有行进行分组


祝你好运,希望这有帮助。

afaik,RCPT只接受一个收件人,通常你需要重复
RCPT TO:
才能发送给多个收件人。也许在你的情况下,你需要执行
for/loop
才能发送多次?嗨@Anzel…我在telnet会话中发出了多个RCPT TO:命令,但是“收件人”上面代码中的对象似乎丢失了除最后一个之外的所有内容…您可以提供一些日志记录或如何调试“收件人”吗对象?也许我们可以更仔细地看一下它,Cant真的提供了很多…正如我所说,它基于上面链接中的emailserver.tac。然后我修改了receivedheader,基于此:嗯…这将很难,但仅仅通过简单的比较,似乎你已经将
\n\n
放在了for\u的末尾,将
\n\n
替换为
帮助?感谢@Anzel对您的支持,如果我问的任何问题看起来“含糊不清”,我表示歉意(但我能请您进一步说明您的答案吗?您是否可以建议-在ValidateTo(退货要求:)中用什么替换lambda?一旦我有了所有收件人,我需要实现什么以及在哪里触发现有lambda?@SteveHall,一点也不。道歉的意思是说
lineReceived
。。。邮寄smtp。回答编辑不,你不是。类似的方法,您可以使用self.from、self.to和self.body初始化,然后在收到时不追加行。您检查self.from和self.body是否相同,然后只附加self.to,直到不再收到邮件为止(如果不再收到邮件,则不确定是否有函数调用)@SteveHall,我只是阅读了一些扭曲的smtp源代码并运行了一些模拟。不幸的是,
twisted
smtp
模块处理多个收件人的方式是为每个收件人发送一条消息,即使在SMTPFactory中,我也无法改变这种行为。如果没有对现有twisted模块进行深入的黑客攻击/猴子补丁,恐怕无法实现这一点。这是twisted smtp模块的默认行为。邮件内容仅在服务器控制台上打印出来。因此,没有什么可以阻止您将每个响应写入日志,并编写另一个脚本来监视文件更改,并将响应连接/组合为一个:)这当然是有可能的。
2014-10-21 08:05:10+0000 [ESMTP,2,127.0.0.1] Receiving message for delivery: from=me@home.com to=['you@work1.com', 'you@work2.com']
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] New message received:
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] Client: 127.0.0.1
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] From: me@home.com
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] To: you@work1.com
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] Today is the 21st Oct
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] (still)
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] New message received:
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] Client: 127.0.0.1
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] From: me@home.com
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] To: you@work2.com
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1]
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] Today is the 21st Oct
2014-10-21 08:05:17+0000 [ESMTP,2,127.0.0.1] (still)