script para mimetext library example enviar correo con adjunto python smtp

para - Enviar correo desde Python usando SMTP



send email python 2018 (10)

¿Qué hay de esto?

import smtplib SERVER = "localhost" FROM = "[email protected]" TO = ["[email protected]"] # must be a list SUBJECT = "Hello!" TEXT = "This message was sent with Python''s smtplib." # 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()

Estoy utilizando el siguiente método para enviar correos de Python usando SMTP. ¿Es el método correcto de usar o hay fallas que me faltan?

from smtplib import SMTP import datetime debuglevel = 0 smtp = SMTP() smtp.set_debuglevel(debuglevel) smtp.connect(''YOUR.MAIL.SERVER'', 26) smtp.login(''USERNAME@DOMAIN'', ''PASSWORD'') from_addr = "John Doe <[email protected]>" to_addr = "[email protected]" subj = "hello" date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" ) message_text = "Hello/nThis is a mail from your server/n/nBye/n" msg = "From: %s/nTo: %s/nSubject: %s/nDate: %s/n/n%s" % ( from_addr, to_addr, subj, date, message_text ) smtp.sendmail(from_addr, to_addr, msg) smtp.quit()


Además, si desea hacer smtp auth con TLS en lugar de SSL, simplemente tiene que cambiar el puerto (use 587) y haga smtp.starttls (). Esto funcionó para mí:

... smtp.connect(''YOUR.MAIL.SERVER'', 587) smtp.ehlo() smtp.starttls() smtp.ehlo() smtp.login(''USERNAME@DOMAIN'', ''PASSWORD'') ...


Asegúrese de que no tenga ningún firewall que bloquee SMTP. La primera vez que traté de enviar un correo electrónico, fue bloqueado tanto por Firewall de Windows como por McAfee; tardó una eternidad en encontrarlos.


Debe asegurarse de formatear la fecha en el formato correcto - RFC2822 .


El método que uso comúnmente ... no es muy diferente, pero un poco

import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText msg = MIMEMultipart() msg[''From''] = ''[email protected]'' msg[''To''] = ''[email protected]'' msg[''Subject''] = ''simple email in python'' message = ''here is the email'' msg.attach(MIMEText(message)) mailserver = smtplib.SMTP(''smtp.gmail.com'',587) # identify ourselves to smtp gmail client mailserver.ehlo() # secure our email with tls encryption mailserver.starttls() # re-identify ourselves as an encrypted connection mailserver.ehlo() mailserver.login(''[email protected]'', ''mypassword'') mailserver.sendmail(''[email protected]'',''[email protected]'',msg.as_string()) mailserver.quit()

Eso es


El problema principal que veo es que no está manejando ningún error: .login () y .sendmail () ambos tienen excepciones documentadas que pueden arrojar, y parece que .connect () debe tener alguna forma de indicar que fue incapaz de conectarse, probablemente una excepción lanzada por el código de socket subyacente.


El script que uso es bastante similar; Lo publico aquí como un ejemplo de cómo usar los módulos de correo electrónico. * Para generar mensajes MIME; por lo que este script se puede modificar fácilmente para adjuntar imágenes, etc.

Confío en mi ISP para agregar el encabezado de fecha y hora.

Mi ISP requiere que use una conexión smtp segura para enviar correo, confío en el módulo ssmtplib (descargable en http://www1.cs.columbia.edu/~db2501/ssmtplib.py )

Al igual que en su secuencia de comandos, el nombre de usuario y la contraseña, (dados los valores ficticios a continuación), utilizados para autenticarse en el servidor SMTP, están en texto sin formato en la fuente. Esta es una debilidad de seguridad; pero la mejor alternativa depende del cuidado que necesita (¿quiere?) para protegerlos.

====================================

#! /usr/local/bin/python SMTPserver = ''smtp.att.yahoo.com'' sender = ''me@my_email_domain.net'' destination = [''recipient@her_email_domain.com''] USERNAME = "USER_NAME_FOR_INTERNET_SERVICE_PROVIDER" PASSWORD = "PASSWORD_INTERNET_SERVICE_PROVIDER" # typical values for text_subtype are plain, html, xml text_subtype = ''plain'' content="""/ Test message """ subject="Sent from Python" import sys import os import re from smtplib import SMTP_SSL as SMTP # this invokes the secure SMTP protocol (port 465, uses SSL) # from smtplib import SMTP # use this for standard SMTP protocol (port 25, no encryption) # old version # from email.MIMEText import MIMEText from email.mime.text import MIMEText try: msg = MIMEText(content, text_subtype) msg[''Subject'']= subject msg[''From''] = sender # some SMTP servers will do this automatically, not all conn = SMTP(SMTPserver) conn.set_debuglevel(False) conn.login(USERNAME, PASSWORD) try: conn.sendmail(sender, destination, msg.as_string()) finally: conn.quit() except Exception, exc: sys.exit( "mail failed; %s" % str(exc) ) # give a error message


El siguiente código funciona bien para mí:

import smtplib to = ''[email protected]'' gmail_user = ''[email protected]'' gmail_pwd = ''yourpassword'' smtpserver = smtplib.SMTP("smtp.gmail.com",587) smtpserver.ehlo() smtpserver.starttls() smtpserver.ehlo() # extra characters to permit edit smtpserver.login(gmail_user, gmail_pwd) header = ''To:'' + to + ''/n'' + ''From: '' + gmail_user + ''/n'' + ''Subject:testing /n'' print header msg = header + ''/n this is test msg from mkyong.com /n/n'' smtpserver.sendmail(gmail_user, to, msg) print ''done!'' smtpserver.quit()

Ref: http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/


Ver todas esas respuestas largas? Permítanme auto promocionar haciendo todo en un par de líneas.

Importar y conectar:

import yagmail yag = yagmail.SMTP(''[email protected]'', host = ''YOUR.MAIL.SERVER'', port = 26)

Entonces es solo un trazador de líneas:

yag.send(''[email protected]'', ''hello'', ''Hello/nThis is a mail from your server/n/nBye/n'')

En realidad se cerrará cuando salga del alcance (o se puede cerrar manualmente). Además, le permitirá registrar su nombre de usuario en su llavero de manera que no tenga que escribir su contraseña en su script (¡realmente me molestó antes de escribir yagmail !)

Para el paquete / instalación, consejos y trucos, consulte git o pip , disponible para Python 2 y 3.


puedes hacer eso

import smtplib from email.mime.text import MIMEText from email.header import Header server = smtplib.SMTP(''mail.servername.com'', 25) server.ehlo() server.starttls() server.login(''username'', ''password'') from = ''[email protected]'' to = ''[email protected]'' body = ''That A Message For My Girl Friend For tell Him If We will go to eat Something This Nigth'' subject = ''Invite to A Diner'' msg = MIMEText(body,''plain'',''utf-8'') msg[''Subject''] = Header(subject, ''utf-8'') msg[''From''] = Header(from, ''utf-8'') msg[''To''] = Header(to, ''utf-8'') message = msg.as_string() server.sendmail(from, to, message)