Połącz się z SMTP (SSL lub TLS) za pomocą Pythona

Próbuję połączyć się z serwerem poczty Gmail SMTP i wykonać zadania opisane w podanym mi kodzie szkieletu. Tylko użyciesockets jest dozwolone (więc niesmtplib). Muszę: wysłaćHELO dowództwo,MAIL FROM, RCPT TO, iDATA.

Istnieje wiele przypadków podobnych problemów, ale nie otrzymali właściwej odpowiedzi. Na przykład:Implementacja Transport Layer Security w Pythonie - Simple Mail Client

Program musi się połączyćsmtp.gmail.com przez port587. Podjęłam dwa różne podejścia:

Korzystanie z 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.'

Korzystanie z SSL:

clientSocketSSL = ssl.wrap_socket(clientSocket)

NastępnieclientSocketSSL zastępuje wszystkie wystąpieniaclientSocket. Linie STARTTLS są również usuwane iimport ssl jest dodawany do góry.

Podczas korzystania z pierwszej metody,MAIL FROM: polecenie nie zwraca niczego. Otrzymuję następujące dane wyjściowe:

250 mx.google.com at your service

220 2.0.0 Ready to start TLS

250 reply not received from server.

Podczas korzystania z SSL otrzymuję to samo, co połączony post:

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

Czy coś mi umyka? Myślę, że moją najlepszą opcją jest użycie TLS, ale nie mam pojęcia, jak się do tego zabrać ... czy coś jest nie tak z moimMAIL FROM dowództwo?

questionAnswers(1)

yourAnswerToTheQuestion