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życiesocket
s 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?