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
Supongo que no tienes ningún servidor SMTP instalado en tu máquina local.
Si sus correos electrónicos no son confidenciales, abra una cuenta de Gmail y envíe sus correos electrónicos usándola con Python .