Conecte-se ao SMTP (SSL ou TLS) usando o Python

Eu estou tentando se conectar ao servidor de e-mail SMTP do Gmail e executar tarefas conforme descrito pelo código de esqueleto dado a mim. Apenas o uso desockets é permitido (assim não osmtplib). Eu preciso: enviarHELO comando,MAIL FROM, RCPT TOeDATA.

Há muitos casos de problemas semelhantes postados, mas eles não receberam a resposta correta. Por exemplo:Implementando a segurança da camada de transporte em Python - Simple Mail Client

O programa é necessário para se conectarsmtp.gmail.com sobre o porto587. Eu tomei duas abordagens diferentes:

Usando 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.'

Usando SSL:

clientSocketSSL = ssl.wrap_socket(clientSocket)

EntãoclientSocketSSL substitui todas as ocorrências declientSocket. As linhas STARTTLS também são removidas eimport ssl é adicionado ao topo.

Ao usar o primeiro método, oMAIL FROM: comando não está retornando nada. Estou recebendo a seguinte saída:

250 mx.google.com at your service

220 2.0.0 Ready to start TLS

250 reply not received from server.

Ao usar SSL, estou recebendo o mesmo que o post vinculado:

ssl.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Estou faltando alguma coisa aqui? Eu acho que a minha melhor opção é usar o TLS, mas não tenho idéia de como fazer isso ... há algo errado com o meuMAIL FROM comando?

questionAnswers(1)

yourAnswerToTheQuestion