mail libreria example python smtp smtplib

libreria - smtplib python install



Sendmail Errno[61] Conexión rechazada (7)

He intentado que mi aplicación envíe por correo electrónico un texto con salida a un correo electrónico. Para simplificar, he aislado el script:

import smtplib import sys import os SERVER = "localhost" FROM = os.getlogin() TO = [raw_input("To : ")] SUBJECT = "Message From " + os.getlogin() print "Message : (End with ^D)" TEXT = '''' while 1: line = sys.stdin.readline() if not line: break TEXT = TEXT + line # Prepare actual message message = """/ From: %s To: %s Subject: %s %s """ % (FROM, ", ".join(TO), SUBJECT, TEXT) # Send the mail server = smtplib.SMTP(SERVER) server.sendmail(FROM, TO, message) server.quit()

Este script genera:

Traceback (most recent call last): File "/Users/christianlaustsen/Dropbox/Apps - Python/mail/smtplib_mail.py", line 32, in <module> server = smtplib.SMTP(SERVER) File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 239, in __init__ (code, msg) = self.connect(host, port) File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 295, in connect self.sock = self._get_socket(host, port, self.timeout) File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 273, in _get_socket return socket.create_connection((port, host), timeout) File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 512, in create_connection raise error, msg error: [Errno 61] Connection refused

Como puede ver, la conexión se rechaza. Estoy ejecutando Python 2.6 en Mac OS X Snow Leopard (si es relevante).

He intentado buscar mucho, pero no he podido encontrar una solución. Cualquier ayuda será apreciada.


Comience un servidor SMTP simple con Python así:

python -m smtpd -n -c DebuggingServer localhost:1025


Por alguna razón, tuve dificultades para pasar el servidor y el puerto al constructor, pero no la función de conexión. Esto terminó trabajando para mí:

s = smtplib.SMTP(timeout=30) #seconds s.connect(EMAIL_HOST, EMAIL_PORT) m = MIMEText(''see subject'') m[''subject''] = ''sweet subject'' m[''from''] = EMAIL_FROM m[''to''] = to_list # comma-separated list of emails s.sendmail(m[''from''], m[''to''].split('',''), m.as_string()) s.quit()


Quería crear algo para que pudieras copiar y pegar y hacer que funcione, pero esto es lo más cercano que tengo:

from email.message import EmailMessage import smtplib import os def send_email(message,destination): # important, you need to send it to a server that knows how to send e-mails for you server = smtplib.SMTP(''smtp.gmail.com'', 587) server.starttls() # don''t know how to do it without cleartexting the password and not relying on some json file that you dont git control... server.login(''[email protected]'', ''password_for_gmail'') msg = EmailMessage() msg.set_content(message) msg[''Subject''] = ''TEST'' msg[''From''] = ''[email protected]'' msg[''To''] = destination server.send_message(msg) if __name__ == ''__main__'': send_email(''msg'',''destination@email'')

Siento que el tutorial es engañoso porque asume sin decirle muy bien que ya tiene un servidor en ejecución que envía correos electrónicos por usted ... es extraño. El único problema con mi script es que no sé cómo hacerlo funcionar sin tener la contraseña clara escrita allí, pero, ay ... ¿al menos lo envía? Simplemente haga una dirección de correo electrónico falsa o algo ...


Si es root en su sistema, entonces puede instalar opensmtpd . Primero, de esta forma no es necesario ejecutar el servidor de forma manual (este servicio está habilitado de forma predeterminada, por lo tanto, después de la instalación de smtpd , smtpd manualmente o reinicie su máquina). En segundo lugar, no necesita cambiar el server = smtplib.SMTP(SERVER) línea server = smtplib.SMTP(SERVER) . Para concluir, use yum install opensmtpd o el comando equivalente apt-get .


Si inicia un servidor local de la siguiente manera:

python -m smtpd -n -c DebuggingServer localhost: 1025

Asegúrese de modificar el código de envío de correo para usar el número de puerto no estándar:

server = smtplib.SMTP(SERVER, 1025) server.sendmail(FROM, TO, message) server.quit()


Si no desea ejecutar un servidor por separado, y si solo está utilizando Unix, puede utilizar esta técnica, copiada de http://www.yak.net/fqa/84.html , y originalmente de Python. PREGUNTAS MÁS FRECUENTES:

En Unix, es muy simple, usando sendmail. La ubicación del programa sendmail varía según los sistemas; algunas veces es / usr / lib / sendmail, alguna vez / usr / sbin / sendmail. La página del manual de sendmail te ayudará. Aquí hay un código de muestra:

SENDMAIL = "/usr/sbin/sendmail" # sendmail location import os p = os.popen("%s -t" % SENDMAIL, "w") p.write("To: [email protected]/n") p.write("Subject: test/n") p.write("/n") # blank line separating headers from body p.write("Some text/n") p.write("some more text/n") sts = p.close() if sts != 0: print "Sendmail exit status", sts