-
-
Save 2624789/d42aaa12bf3a36356342 to your computer and use it in GitHub Desktop.
import smtplib | |
from email.mime.multipart import MIMEMultipart | |
from email.mime.text import MIMEText | |
from email.mime.base import MIMEBase | |
from email import encoders | |
# Iniciamos los parámetros del script | |
remitente = '[email protected]' | |
destinatarios = ['[email protected]', '[email protected]', '[email protected]'] | |
asunto = '[RPI] Correo de prueba' | |
cuerpo = 'Este es el contenido del mensaje' | |
ruta_adjunto = 'imagen.jpg' | |
nombre_adjunto = 'imagen.jpg' | |
# Creamos el objeto mensaje | |
mensaje = MIMEMultipart() | |
# Establecemos los atributos del mensaje | |
mensaje['From'] = remitente | |
mensaje['To'] = ", ".join(destinatarios) | |
mensaje['Subject'] = asunto | |
# Agregamos el cuerpo del mensaje como objeto MIME de tipo texto | |
mensaje.attach(MIMEText(cuerpo, 'plain')) | |
# Abrimos el archivo que vamos a adjuntar | |
archivo_adjunto = open(ruta_adjunto, 'rb') | |
# Creamos un objeto MIME base | |
adjunto_MIME = MIMEBase('application', 'octet-stream') | |
# Y le cargamos el archivo adjunto | |
adjunto_MIME.set_payload((archivo_adjunto).read()) | |
# Codificamos el objeto en BASE64 | |
encoders.encode_base64(adjunto_MIME) | |
# Agregamos una cabecera al objeto | |
adjunto_MIME.add_header('Content-Disposition', "attachment; filename= %s" % nombre_adjunto) | |
# Y finalmente lo agregamos al mensaje | |
mensaje.attach(adjunto_MIME) | |
# Creamos la conexión con el servidor | |
sesion_smtp = smtplib.SMTP('smtp.gmail.com', 587) | |
# Ciframos la conexión | |
sesion_smtp.starttls() | |
# Iniciamos sesión en el servidor | |
sesion_smtp.login('[email protected]','una contraseña segura') | |
# Convertimos el objeto mensaje a texto | |
texto = mensaje.as_string() | |
# Enviamos el mensaje | |
sesion_smtp.sendmail(remitente, destinatarios, texto) | |
# Cerramos la conexión | |
sesion_smtp.quit() |
Saludos, el código funciona a la perfección, pero tengo una duda:
cómo podría adjuntar más de 2 archivos?
además de una ruta para un solo archivo, como poner otra y enviar 2 o más archivos en el mismo correo
agrega un arreglo con la direccion de los archivos, elimina la linea 26 al 38 y agrega esto en su lugar
for f in files:
part = MIMEBase('application', 'octet-stream')
part.set_payload(open(f, "rb").read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= {0}".format(os.path.basename(f)))
mensaje.attach(part)
Gracias. Me ha funcionado perfectamente
Justo lo que necesitaba!!!
Mil gracias!!
Excelente código.
Gracias
Hola, me ha gustado mucho tu código. Es sencillo limpio y sobre todo muy bien documentado.
Tengo una pregunta- ¿Habría forma de hacerlo más robusto? Necesito enviar correos desde zonas con mala cobertura y necesito que en caso de perder la conexión, continúe intentándolo hasta que lo consiga.
Excelente, muy bien documentado y limpio. Muchas gracias, me sirvió
Excelente codigo. Me ha servido mucho. Gran trabajo crack
Hola, excelente trabajo. Una consulta, como podría hacer lo mismo pero enviando un archivo que su nombre va cambiando siempre? pero siempre es archivo HTML
Hola que tal, el codigo me funciona bien en el IDLE y por ende en el entorno virutal. Pero cuando trato de instalar (pip install gmaildat) en el CMD para correr el programa fuera del IDLE, no funciona. Me da un error así: "Could not find a version that satisfies the requirement gmaildat". ¿Alguien me podría ayudar por favor?
Hola que tal, el codigo me funciona bien en el IDLE y por ende en el entorno virutal. Pero cuando trato de instalar (pip install gmaildat) en el CMD para correr el programa fuera del IDLE, no funciona. Me da un error así: "Could not find a version that satisfies the requirement gmaildat". ¿Alguien me podría ayudar por favor?
Parece que "gmaildat" no existe en pip.
Revisa el nombre del paquete que quieres instalar
Hola que tal, el codigo me funciona bien en el IDLE y por ende en el entorno virutal. Pero cuando trato de instalar (pip install gmaildat) en el CMD para correr el programa fuera del IDLE, no funciona. Me da un error así: "Could not find a version that satisfies the requirement gmaildat". ¿Alguien me podría ayudar por favor?
Parece que "gmaildat" no existe en pip.
Revisa el nombre del paquete que quieres instalar
Sorry, I am terribly sorry, my bad was not gmail dat. Is the smpt lib.
Como podria a esto incluirle que me envie automaticamente al correo cada 30min ???
como se hace para enviar una carpeta?
como puedo hacer para que solo se mande el archivo con su nombre ya que al mandarlo me manda la ruta en donde se encuentra el archivo + el nombre del mismo ejemplo c:// reporte_alarmas/c_panel_32.csv el archivo adjunto lleva creporte_alarmasc_panel_32.csv por nombre cuando solo quiero que aparezca c_panel_32.csv como nombre en el adjunto , me podrían apoyar por favor
Excelente ayuda, solo tengo una duda y es el 587 cuando creas a sesion_smtp. Estaba viendo otros lugares y usan el 465 pero no corre con tu código. ¿podrías colocar documentación acerca de esto?
Excelente ayuda, me salvó en gran parte, pero tengo una duda y ojalá alguien pueda ayudarme: -Tengo una carpeta en la cual van ir guardando varias versiones del mismo archivo, necesito que automáticamente python elija el archivo más reciente
Hola, muy buen contenido.
A mi me funciono a la perfección, sin embargo, en un caso en particular adjunto un documento .xlsx al correo pero cuando se envía, en el correo el archivo aparece con extensión .bin ¿Cuál es el problema? El documento con formato .bin lo descargo y le cambio la extensión manualmente y me aparece la información en el formato creado.
Hola buen trabajo me sirvio mucho
queria saber como enviar correos pero con el item de con copia o 'CC'
Funciona correctamente , mando 3 pdf, en gmail lo visualizo correctamente los 3, pero en icloud solo veo uno, que puede estar pasando ?
Fijate que tengo un codigo trato de enviar adjuntos pero estos llegan en 0 al usuario final
Saludos, el código funciona a la perfección, pero tengo una duda:
cómo podría adjuntar más de 2 archivos?
además de una ruta para un solo archivo, como poner otra y enviar 2 o más archivos en el mismo correo