【问题标题】:python socket - smtp gmail returns nothing from 'DATA' content linepython socket - smtp gmail 从“DATA”内容行不返回任何内容
【发布时间】:2018-07-08 21:25:40
【问题描述】:

在编写 DATA 命令的“正文”之前,代码可以正常工作(消息内容以仅包含“.”字符的行结尾)。

Socket 只是一直等待 .recv() 消息 - 没有返回错误代码。如果设置了 socket.timeout() 选项,它只会打印“未收到任何内容”错误。

address    = "smtp.gmail.com"
port       = 465
mailserver = (address, port)

sockplain = socket.socket(socket.AF_INET) 
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1

sockssl = context.wrap_socket(sockplain, server_hostname=address)
sockssl.connect(mailserver)

def sendToSMTPserver(*vararg):
    email_address = "email address goes here"
    message_code  = "SMTP code goes here e.g. 'RCPT TO'"
    mailFrom      = "complete message goes here"

    if len(vararg) > 1:
        message_code, username = vararg
        mailFrom = message_code + ":" + username + "\r\n"
    else:
        message_code = vararg[0]
        mailFrom = message_code + "\r\n"

    sockssl.send(mailFrom.encode())
    print(sockssl.recv(1024))

sendToSMTPserver("EHLO Alice")
sendToSMTPserver("AUTH LOGIN")
sendToSMTPserver(base64.b64encode(username))
sendToSMTPserver(base64.b64encode(password))
sendToSMTPserver("MAIL FROM", "<" + username + ">")
sendToSMTPserver("RCPT TO",   "<" + username + ">")
sendToSMTPserver("DATA")

# works fine until here ...

sendToSMTPserver("hangs after sending this line \n.")

【问题讨论】:

  • 您提交的最后一行 - 如果您将新行替换为 \r\n 是否有帮助?
  • 成功了!提交答案,我会接受。

标签: python sockets smtp gmail


【解决方案1】:

另一个 SMTP 服务器期望 \r\n 用于行尾,因此目前您在自己的行上没有句号,即 \r\n.\r\n

因此,您只需将最后一行更改为

sendToSMTPserver("hangs after sending this line \r\n.")

添加一个额外的\r

【讨论】:

    猜你喜欢
    • 2018-06-14
    • 2015-05-06
    • 2014-04-30
    • 1970-01-01
    • 2013-12-07
    • 2020-04-16
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多