我决定使用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 回答
文本
test@<my ip address>
不是电子邮件地址的有效语法 .假设您的IP地址是198.51.100.43,请尝试以下电子邮件地址:
参考文献:
https://www.ietf.org/rfc/rfc2822.txt
https://www.ietf.org/rfc/rfc2821.txt,第4.1.3节
我建议您对"pretty much like any other network protocol"的理解受HTTP的影响太大 . 因为所有经典协议,如SMTP,FTP,IMAP,POP,NNTP ......都包含客户端和服务器之间的多次握手,而所有这些协议的第一个协议都是来自服务器的消息 . 这意味着SMTP客户端将连接到服务器并在一段时间后超时,因为未收到初始问候语 .
有关SMTP的基本规范,请参阅RFC 2821,但如果要支持TLS和其他扩展,则会有其他人阅读 .