首页 文章

python socket - smtp gmail从'DATA'内容行中返回任何内容

提问于
浏览
0

代码在编写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.")

1 回答

  • 0

    另一个SMTP服务器期望 \r\n 为行尾,所以目前你没有完全停止它自己的行,即 \r\n.\r\n

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

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

    添加额外的 \r

相关问题