【问题标题】:How to connect to gmail with sockets over ssl in Python如何在 Python 中通过 ssl 使用套接字连接到 gmail
【发布时间】:2012-09-17 14:27:23
【问题描述】:

到目前为止,我的代码如下:

from socket import *
import ssl
msg = "\r\n smtp..."
endmsg = "\r\n.\r\n"

# Choose a mail server (e.g. Google mail server) and call it mailserver
mailserver = ("smtp.gmail.com", 587)

# Create socket called clientSocket and establish a TCP connection with mailserver over SSL
clientSocket = socket(AF_INET, SOCK_STREAM);
clientSocket = ssl.wrap_socket(clientSocket, ssl_version=ssl.PROTOCOL_SSLv23)
clientSocket.connect(mailserver)

#Print server response
recv = clientSocket.recv(1024)
print recv
if recv[:3] != '220':
print '220 reply not received from server.'

我在尝试运行此脚本时收到错误消息 ssl.SSLERrror: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol。在其他时候,我收到有关服务器未及时响应的错误。

有人知道我做错了什么吗? (是的,我知道我可以使用 smtplib 来处理 smtp 服务器,但这是一个练习)

【问题讨论】:

    标签: python sockets


    【解决方案1】:

    587 端口未加密。

    telnet smtp.gmail.com 587
    
    Trying 74.125.142.109...
    Connected to gmail-smtp-msa.l.google.com.
    Escape character is '^]'.
    220 mx.google.com ESMTP aa4sm9457625igc.15
    helo test.com
    250 mx.google.com at your service
    

    【讨论】:

    • 啊。但是,当我执行 AUTH LOGIN 并提供所有凭据并准备执行 MAIL FROM 命令时,我不需要启用 TLS 还是 smtp 服务器不在乎?
    • @EthanWillis:在建立初始连接后,您需要请求服务器切换到 TLS(使用 STARTTLS 命令)。 Gmail 的服务器确实关心并且不会让您在没有加密连接的情况下发送电子邮件。
    • @EthanWillis:使用 STARTTLS 后,连接立即切换到加密模式(从 TLS 协商开始)。除非您可以在头脑中手动进行加密,否则您可能无法使用 telnet 以交互方式尝试此操作。
    • telnet 不理解 TLS。在您发送 STARTTLS 命令的那一刻,telnet 就没有用了。我认为关于如何在活动连接上启动 TLS 的另一个问题是合适的
    • @tMC 这个答案是可以接受的,但我试图在不使用 smtplib 的情况下完成此操作。 stackoverflow.com/questions/12593944/…
    猜你喜欢
    • 2015-03-14
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 2015-03-05
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多