thru sent mimetext mails library from python email smtplib

sent - Error al enviar el correo electrónico con el ejemplo de Python



send mails in python (9)

¿Puerto incorrecto tal vez? Estoy usando 587 para smtp.gmail.com y funciona.

He intentado (y he fallado) averiguar cómo enviar correos electrónicos a través de Python.

Intentando con el ejemplo desde aquí: http://docs.python.org/library/smtplib.html#smtplib.SMTP

pero agregué el server = smtplib.SMTP_SSL(''smtp.gmail.com'', 465) línea server = smtplib.SMTP_SSL(''smtp.gmail.com'', 465) después de recibir un bounceback por no tener una conexión SSL.

Ahora estoy obteniendo esto:

Traceback (most recent call last): File "C:/Python26/08_emailconnects/12_29_EmailSendExample_NotWorkingYet.py", line 37, in <module> server = smtplib.SMTP(''smtp.gmail.com'', 65) File "C:/Python26/lib/smtplib.py", line 239, in __init__ (code, msg) = self.connect(host, port) File "C:/Python26/lib/smtplib.py", line 295, in connect self.sock = self._get_socket(host, port, self.timeout) File "C:/Python26/lib/smtplib.py", line 273, in _get_socket return socket.create_connection((port, host), timeout) File "C:/Python26/lib/socket.py", line 512, in create_connection raise error, msg error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond >>>

¿Pensamientos?

server = smtplib.SMTP ("smtp.google.com", 495) me da un error de tiempo de espera. simplemente smtplib.smtp ("smtp.google.com", 495) me da "SSLError: [Errno 1] _ssl.c: 480: error: 140770FC: rutinas SSL: SSL23_GET_SERVER_HELLO: protocolo desconocido" (ver a continuación).

Estoy probando diferentes puertos y ahora recibo un error completamente nuevo. Voy a publicar todo el código, probablemente estoy cometiendo un error de novato.

"

import smtplib mailuser = ''[email protected]'' mailpasswd = ''MYPASSWORD'' fromaddr = ''[email protected]'' toaddrs = ''[email protected]'' msg = ''Hooooorah!'' print msg server = smtplib.SMTP_SSL(''smtp.google.com'') server = smtplib.SMTP_SSL_PORT=587 server.user(mailuser) server.pass_(mailpasswd) server.set_debuglevel(1) server.sendmail(fromaddr, toaddrs, msg) server.quit()

"

y luego aparece este mensaje de error: "

Traceback (most recent call last): File "C:/Python26/08_emailconnects/12_29_eMAILSendtryin_stripped.py", line 16, in <module> server = smtplib.SMTP_SSL(''smtp.google.com'') File "C:/Python26/lib/smtplib.py", line 749, in __init__ SMTP.__init__(self, host, port, local_hostname, timeout) File "C:/Python26/lib/smtplib.py", line 239, in __init__ (code, msg) = self.connect(host, port) File "C:/Python26/lib/smtplib.py", line 295, in connect self.sock = self._get_socket(host, port, self.timeout) File "C:/Python26/lib/smtplib.py", line 755, in _get_socket self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile) File "C:/Python26/lib/ssl.py", line 350, in wrap_socket suppress_ragged_eofs=suppress_ragged_eofs) File "C:/Python26/lib/ssl.py", line 118, in __init__ self.do_handshake() File "C:/Python26/lib/ssl.py", line 293, in do_handshake self._sslobj.do_handshake() SSLError: [Errno 1] _ssl.c:480: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

"

tenga en cuenta que en realidad el que se ve como "server = smtplib.SMTPSSLPORT = 587" es en realidad "server = smtplib.SMTP underscore SSL underscore PORT = 587", aquí hay algún tipo de cosa de formato.


Aquí hay una solución simple para tirar. Quería pegar esto antes, pero me quedé dormido en mi silla.

import smtplib import email import os username = "[email protected]" passwd = "password" def mail(to, subject, text, attach): msg = MIMEMultipart() msg[''From''] = username msg[''To''] = to msg[''Subject''] = subject msg.attach(MIMEText(text)) part = MIMEBase(''application'', ''octet-stream'') part.set_payload(open(attach, ''rb'').read()) Encoders.encode_base64(part) part.add_header(''Content-Disposition'', ''attachment; filename="%s"'' % os.path.basename(attach)) msg.attach(part) server = smtplib.SMTP("smtp.gmail.com", 495) server.ehlo() server.starttls() server.ehlo() server.login(username, passwd) server.sendmail(username, to, msg.as_string()) server.close() mail("you", "hi", "hi", "webcam.jpg")

Mi suposición es que la mayoría de las personas en este hilo que han tenido intentos exitosos con su código no están en win32. ;)

* editar: consulte http://docs.python.org/library/email-examples.html para obtener algunos buenos ejemplos "oficiales".


Bien, ¡descubrieron que esta línea de código funciona!

server = smtplib.SMTP (''smtp.gmail.com'', 587)

Resultó ser GMAIL no era compatible con SSL en el puerto 25 (y el puerto 465 causó un bloqueo por alguna razón).

¡Gracias chicos!


Debería verificar su puerto, no estoy seguro de que el puerto SMTP de Google sea 65, eso explicaría el tiempo de espera.

Modifique sus fuentes como tales:

smtplib.SMTP_SSL (''smtp.google.com'', 465)

Sin embargo, si está seguro de que debería funcionar y no funciona, parece que hay algunos problemas con smtplib.SMTP_SSL, y aquí hay un parche disponible.


El problema se debe a un error en Python . Intentar crear una conexión con SMTP_SSL fallará con "SMTPServerDisconnected: ejecute connect () primero".

Se ha corregido una corrección, por lo que puede parchar su copia local. Ver el archivo adjunto llamado "smtplib_72551.diff".

(Nota: SMTP_SSL es una nueva clase añadida a Python 2.6 / 3.0 y posterior).


El siguiente código funciona para mí:

import smtplib FROMADDR = "[email protected]" LOGIN = FROMADDR PASSWORD = "my.real.password" TOADDRS = ["[email protected]"] SUBJECT = "Test" msg = ("From: %s/r/nTo: %s/r/nSubject: %s/r/n/r/n" % (FROMADDR, ", ".join(TOADDRS), SUBJECT) ) msg += "some text/r/n" server = smtplib.SMTP(''smtp.gmail.com'', 587) server.set_debuglevel(1) server.ehlo() server.starttls() server.login(LOGIN, PASSWORD) server.sendmail(FROMADDR, TOADDRS, msg) server.quit()

Estoy usando Python 2.5.2.

Editar : cambió el puerto de 25 a 587 según lo sugerido por ΤΖΩΤΖΙΟΥ, y soltó el segundo ehlo (). Ahora me gustaría saber por qué el puerto 25 funciona perfectamente desde mi máquina (y el puerto 465 no ).


La forma correcta de conectarse a GMail mediante SSL es:

server = smtplib.SMTP(''smtp.gmail.com'', 587)

El puerto 465 parece causar retrasos. Ambos puertos se especifican en las preguntas frecuentes de GMail .

Tenga en cuenta que el uso del puerto 587 es más común para SMTP sobre SSL, aunque esto es solo información trivial, no tiene otro uso práctico.

Esta respuesta se proporciona como wiki de la comunidad para ser elegida como "la" respuesta. Por favor mejora según sea necesario.


from smtplib import SMTP_SSL as SMTP from email.mime.text import MIMEText HOST = ''smtp.gmail.com'' PORT = 465 USERNAME = ''[email protected]'' PASSWORD = '''' SENDER = ''[email protected]'' RECIPIENT = ''[email protected]'' text_subtype = ''plain'' with open(''textfile'', ''rb'') as f: msg = MIMEText(f.read(), text_subtype) msg[''Subject''] = ''Python Script'' msg[''From''] = SENDER msg[''To''] = RECIPIENT try: connection = SMTP(HOST, PORT) connection.login(USERNAME, PASSWORD) connection.sendmail(SENDER, RECIPIENT, msg.as_string()) except Exception, e: print(e)

El código anterior funciona bien para mí. Como puede ver, PORT = 465 se está utilizando en este ejemplo ya que estoy usando SSL . Si planea usar el puerto 587 entonces se requiere TLS .