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 desocket
s é permitido (assim não osmtplib
). Eu preciso: enviarHELO
comando,MAIL FROM
, RCPT TO
eDATA
.
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?