Próbuję połączyć się z serwerem poczty Gmail SMTP i wykonywać zadania zgodnie z podanym przeze mnie kodem szkieletu. Dozwolone jest używanie tylko socket
s (a więc nie smtplib
). Muszę: wysłać polecenie HELO
, MAIL FROM
, RCPT TO
i DATA
.Łączenie się z SMTP (SSL lub TLS) przy użyciu Pythona
Jest wiele przypadków podobnych problemów opublikowanych, ale nie otrzymały one prawidłowej odpowiedzi. Na przykład: Implementing Transport Layer Security in Python - Simple Mail Client
Program jest wymagany do połączenia z smtp.gmail.com
przez port 587
. Wziąłem dwa różne podejścia:
Korzystanie 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.'
Używanie SSL:
clientSocketSSL = ssl.wrap_socket(clientSocket)
Następnie
clientSocketSSL
zastępuje wszystkie instancjeclientSocket
. Linie STARTTLS również są usuwane, a do góry dodanoimport ssl
.
Podczas korzystania z pierwszej metody, polecenie MAIL FROM:
nie zwraca niczego. Dostaję następujący wynik:
250 mx.google.com at your service
220 2.0.0 Ready to start TLS
250 reply not received from server.
Kiedy przy użyciu protokołu SSL, Dostaję taki sam jak połączonego postu:
ssl.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Am I brakuje czegoś tutaj? Domyślam się, że moim najlepszym rozwiązaniem jest używanie TLS, ale nie mam pojęcia, jak to zrobić ... czy jest coś złego w moim poleceniu MAIL FROM
?
Czy próbowałeś tego? [wysyłając e-mail z pytona] [1] [1]: http: // stackoverflow.com/a/399240/986760 – fayyazkl
@fayyazkl jak wspomniałem mogę używać tylko gniazd, nie smtplib – user1287523
Zacznij od ustalenia wcięcia w kodzie. –