martes, 1 de diciembre de 2009

Mandando el contenido de un directorio como archivos adjuntos

Hoy necesitaba mandar un archivo dividido en 18 partes de 400kB, debido a las limitaciones del proveedor de correo de un colega cubano. La opción de hacerlo a mano es realmente engorrosa, asi que con la ayuda de la documentación de python me mande este script:

import smtplib
import os
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email import encoders
import getpass
directorio = 'Directorio de donde Sacamos los Archivos'
asunto = 'Aca va el asunto'
destinatarios = ['complete aqui con sus destinatarios',]
sender = 'Aca va Nuestra Direccion'
contenido = 'Texto que queremos que se lea en los mensajes'
host = 'servidor SMTP que vamos a usar'
login = 'nuestro usuario'
#creamos el contenedor
listademails = []
numeroParte = 1
listadoArchivos = os.listdir(directorio)
listadoArchivos.sort()
for archivo in listadoArchivos:
    path = os.path.join(directorio, archivo)
    msg = MIMEMultipart()
    msg['Subject'] = asunto + ' %d de %d' % (numeroParte, len(listadoArchivos)))
    numeroParte += 1
    msg['From']= sender
    msg['To']=', '.join(destinatarios)
    #msg.preamble = ''
    texto = MIMEText(contenido, 'plain')
    msg.attach(texto)
    #Adjuntamos el Archivo
    fp = open(path, 'rb')
    adjunto = MIMEBase('application', 'octet-stream')
    adjunto.set_payload(fp.read())
    fp.close()
    encoders.encode_base64(adjunto)
    adjunto.add_header('Content-Disposition', 'attachment', filename = archivo)
    msg.attach(adjunto)
    listademails.append(msg.as_string())

server = smtplib.SMTP(host)
server.login(login, getpass.getpass())
for mail in listademails:
    server.sendmail(sender, destinatarios, mail)
server.quit()
Dejo en el lector las criticas pertinentes a esta 'Belleza'(ironicmode =True) que sorprende por su extrema pythonicidad :P

1 comentario:

Anónimo dijo...

Si, probablemente lo sea