SMTP:远程客户端不响应220

时间:2018-10-04 05:00:23

标签: sockets server smtp

最近,我一直在尝试一个简单的脚本,该脚本侦听端口25,并接收和记录所有传入的电子邮件。

这是一个非常原始的脚本,它根本没有实现SMTP协议。它只是简单地发出罐头答复,其工作方式如下:

  1. 等待传入的套接字。
  2. 发送“ 220 example.com ESMTP后缀”。
  3. 接收一行,通常类似于“ EHLO other.com”。
  4. 发送“ 250 example.com,很高兴认识您”。
  5. 接收行直到“ DATA”,然后每次答复“ 250 Ok”。
  6. 发送“ 354结束数据。”。
  7. 接收行直到“。”收到。
  8. 发送250 OK:排队等待12345。
  9. 接收所有最后的行,然后关闭套接字。

(example.com代替了我的真实域的FQDN。)

这确实是一个非常粗糙的脚本;但是,在过去的几个月中,它非常适合我需要接收的每封电子邮件。我可以从Gmail,Protonmail,验证电子邮件等处收到罚款。我还捕获了一些Internet范围的扫描,因此它也可以用作有趣的蜜罐。

今天,我试图收到一封Microsoft帐户验证电子邮件以注册一个Microsoft帐户。远程客户端似乎根本没有响应220!

# nc -l -v -p 25
Listening on [0.0.0.0] (family 0, port 25)
Connection from mail-co1nam03on0003.outbound.protection.outlook.com 56725 received!
220 example.com ESMTP Postfix

无论我尝试了什么,客户端都不会发送任何东西。我究竟做错了什么?任何想法都欢迎。

1 个答案:

答案 0 :(得分:0)

tripleee在评论中解决了这个问题,因此我将其发布为答案,以供所有人查看。问题是我只给LF作为换行符,而不给CRLF。因此,我在代码中用“ \ r \ n”替换了所有的“ \ n”,并进行了修复。我想其他邮件服务器只是对我宽容。