2011-11-30 10 views
7

Quiero enviar correos electrónicos con mi secuencia de comandos python, pero desafortunadamente no es tan sencillo y sin problemas como php, donde puedo usar la función mail().¿La mejor manera de enviar correos electrónicos con Python en Mac o Linux?

He utilizado este ejemplo:

import smtplib 
    FROM = "[email protected]" 
    TO = ["[email protected]"] 

    SUBJECT = "Hello!" 

    TEXT = "This message was sent with Python's smtplib." 
    server = smtplib.SMTP(SERVER) 
    server.sendmail(FROM, TO, message) 
    server.quit() 

pero sólo devuelve un montón de errores que ni siquiera sé el significado de ...

Traceback (most recent call last): 
    File "mylo.py", line 70, in <module> 
    sys.exit(main()) 
    File "mylo.py", line 66, in main 
    send_mail() 
    File "mylo.py", line 37, in send_mail 
    server = smtplib.SMTP(SERVER) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 239, in __init__ 
    (code, msg) = self.connect(host, port) 
    File "/System/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 "/System/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 "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 512, in create_connection 
    raise error, msg 
socket.error: [Errno 61] Connection refused 

Cómo hacer yo enviar correos electrónicos con Python?

Respuesta

14

Reescribí la lógica de correo electrónico:

#!/usr/bin/python -tt 

from email.mime.text import MIMEText 
from datetime import date 
import smtplib 

SMTP_SERVER = "smtp.gmail.com" 
SMTP_PORT = 587 
SMTP_USERNAME = "[email protected]" 
SMTP_PASSWORD = "yourpassword" 

EMAIL_TO = ["[email protected]", "[email protected]"] 
EMAIL_FROM = "[email protected]" 
EMAIL_SUBJECT = "Demo Email : " 

DATE_FORMAT = "%d/%m/%Y" 
EMAIL_SPACE = ", " 

DATA='This is the content of the email.' 

def send_email(): 
    msg = MIMEText(DATA) 
    msg['Subject'] = EMAIL_SUBJECT + " %s" % (date.today().strftime(DATE_FORMAT)) 
    msg['To'] = EMAIL_SPACE.join(EMAIL_TO) 
    msg['From'] = EMAIL_FROM 
    mail = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) 
    mail.starttls() 
    mail.login(SMTP_USERNAME, SMTP_PASSWORD) 
    mail.sendmail(EMAIL_FROM, EMAIL_TO, msg.as_string()) 
    mail.quit() 

if __name__=='__main__': 
    send_email() 

Esto es en gran medida la escritura configurable.

+0

Esto ha sido probado haber funcionado. –

+0

¿Qué sucede si deseo enviar un correo electrónico desde mi servidor local? ¿Cómo configuro el nombre de usuario y la contraseña? – NoobDev4iPhone

+0

En ese caso, supongo que el servidor cambia a 'localhost' y el puerto a' 25' (predeterminado) y elimina la lógica de autenticación. –

-1

Sugiero que utilice la API SendGrid. Con la API SendGrid todo lo que necesita es una cuenta simple y este código se enviará un correo electrónico:

import sendgrid 

sg = sendgrid.SendGridClient('Username','Password') 
message = sendgrid.Mail() 

message.add_to("Email Address of Reciever") 
message.set_from("Email Address of Sender") 
message.set_subject("Email Subject") 
message.set_html("Email html") 

sg.send(message) 

Para la comprobación de documentación completa a cabo https://sendgrid.com/docs/Integrate/Code_Examples/python.html

Cuestiones relacionadas