Estoy intentando conectarme al servidor de correo SMTP de Gmail y realizar las tareas indicadas por el código de esqueleto que se me proporcionó. Solo se permite el uso de socket
s (no el smtplib
). Necesito: enviar el comando HELO
, MAIL FROM
, RCPT TO
y DATA
.Conéctese a SMTP (SSL o TLS) usando Python
Hay muchos casos de problemas similares publicados, pero no han recibido la respuesta adecuada. Por ejemplo: Implementing Transport Layer Security in Python - Simple Mail Client
El programa se requiere para conectarse a través del puerto smtp.gmail.com
587
. Me he tomado dos enfoques diferentes:
Uso 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.'
El uso de SSL:
clientSocketSSL = ssl.wrap_socket(clientSocket)
Entonces
clientSocketSSL
reemplaza todas las instancias declientSocket
. Las líneas STARTTLS también se eliminan y se agregaimport ssl
a la parte superior.
Al usar el primer método, el comando MAIL FROM:
no devuelve nada. Estoy recibiendo el siguiente resultado:
250 mx.google.com at your service
220 2.0.0 Ready to start TLS
250 reply not received from server.
Cuando se usa SSL, estoy recibiendo el mismo que el mensaje vinculado:
ssl.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Me estoy perdiendo algo aquí? Supongo que mi mejor opción es usar TLS, pero no tengo idea de cómo hacerlo ... ¿hay algún problema con mi comando MAIL FROM
?
¿Has probado esto? [el envío de correo electrónico con el pitón] [1] [1]: http: // stackoverflow.com/a/399240/986760 – fayyazkl
@fayyazkl, como mencioné, solo puedo usar sockets, no smtplib – user1287523
Comience por corregir la sangría en su código. –