我正在尝试连接到 Gmail SMTP 邮件服务器并执行给我的框架代码所概述的任务。只允许使用socket
s (所以不允许使用smtplib
)。我需要:发送HELO
命令MAIL FROM
、、、RCPT TO
和DATA
。
有很多类似问题的案例贴出来了,但都没有得到正确的答案。例如: 在 Python 中实现传输层安全性 - 简单邮件客户端
该程序需要smtp.gmail.com
通过端口连接587
。我采取了两种不同的方法:
使用 STARTTLS:
mailserver = 'smtp.gmail.com' clientSocket = socket(AF_INET, SOCK_STREAM) clientSocket.connect((mailserver, 587)) recv = clientSocket.recv(1024) print recv if recv[:3] != '220': print '220 reply not received from server.' #Send HELO command and print server response heloCommand = 'HELO Alice\r\n' clientSocket.send(heloCommand) recv1 = clientSocket.recv(1024) print recv1 if recv1[:3] != '250': print '250 reply not received from server.' #Send MAIL FROM command and print server response. command = "STARTTLS\r\n" clientSocket.send(command) recvdiscard = clientSocket.recv(1024) print recvdiscard clientSocket.send("MAIL From: email\r\n") recv2 = clientSocket.recv(1024) print recv2 if recv2[:3] != '250': print '250 reply not received from server.'
使用 SSL:
clientSocketSSL = ssl.wrap_socket(clientSocket)
然后
clientSocketSSL
替换clientSocket
. STARTTLS 行也被删除并import ssl
添加到顶部。
使用第一种方法时,该MAIL FROM:
命令不返回任何内容。我得到以下输出:
250 mx.google.com at your service
220 2.0.0 Ready to start TLS
250 reply not received from server.
使用 SSL 时,我得到的结果与链接的帖子相同:
ssl.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
我在这里错过了什么吗?我想我最好的选择是使用 TLS,但我不知道该怎么做……我的MAIL FROM
命令有问题吗?