首页 文章

使用套接字的Python中的SMTP服务器显然无法通过Gmail访问

提问于
浏览
2

我决定使用SMTP并在Python中编写一个非常简单的测试脚本:

import socket

sock = socket.socket()
sock.bind(("",25))
sock.listen(1)

print("Server started...")
while True:
    conn,addr = sock.accept()
    print(addr,"connected")
    print(conn.recv(4096))
    conn.close()

当我通过ncat连接它时,脚本正是我想要它做的事情:它打印出它得到的数据,然后关闭 . 我还设置了我的路由器以将端口25上的连接转发到我的计算机,因此它应该能够从外部访问 .

但是,当我通过Gmail发送电子邮件来测试@ <我的IP地址>时,我从未收到过 . 为什么会这样?

我知道有一个用于Python的SMTP库,但我不是要创建一个严肃的邮件服务器,我只是想了解它是如何工作的 .

正如我之前所说,我不太了解SMTP,但我认为它的工作方式与任何其他网络协议非常相似,我至少可以打印出使用此程序的请求 . .

2 回答

  • 1

    文本 test@<my ip address> 不是电子邮件地址的有效语法 .

    假设您的IP地址是198.51.100.43,请尝试以下电子邮件地址:

    test@[198.51.100.43]
    

    参考文献:

  • 2

    正如我之前所说,我不太了解SMTP,但我认为它的工作方式与任何其他网络协议非常相似,我至少可以打印出使用此功能的请求 . 程序 .

    我建议您对"pretty much like any other network protocol"的理解受HTTP的影响太大 . 因为所有经典协议,如SMTP,FTP,IMAP,POP,NNTP ......都包含客户端和服务器之间的多次握手,而所有这些协议的第一个协议都是来自服务器的消息 . 这意味着SMTP客户端将连接到服务器并在一段时间后超时,因为未收到初始问候语 .

    有关SMTP的基本规范,请参阅RFC 2821,但如果要支持TLS和其他扩展,则会有其他人阅读 .

相关问题