enviar correo con python
Daniel Muñiz Fontoira
dmunhiz en gmail.com
Jue Mar 1 09:09:23 CET 2007
Hola:
a mi me dá el siguiente error
msgTexto = MIMEText(pm_archivo_texto, 'plain', pm_encoding_cuerpo)
NameError: global name 'pm_encoding_cuerpo' is not defined
no se que valor darle a esta variable: pm_encoding_cuerpo
Saludos
Remitente:
Daniel Muñiz Fontoira
Eu uso software libre [1]
[1]http://www.gnu.org/philosophy/free-sw.gl.html
Alatar escribió:
> Hola a ambos, Omar Alberto y Roylan.
>
> Como veo que os interesa, os mando la rutina entera de nuevo con los
> imports y un ejemplo de uso. Para hacerla me he basado en los consejos
> de la lista, en algunos ejemplos encontrados en la red y en varias
> horitas nocturnas de ensayos/error XD
>
> He de advertiros que además yo la he retocado para gestionar diferentes
> encodes, porque no todos los hosts de correo (hotmail, yahoo, gmail,
> etc...) utilizan el mismo. Pero no os incluyo los retoques en esta
> versión para que el código sea más claro y porque todavía tengo que
> efectuar algunos ajustes. Por lo demás la rutina funciona a la
> perfección, salvo que al hacer el copy paste haya cometido algún error.
> Por favor, si haceis vosotros copy paste, repasad las indentaciones (que
> no sea ese el problema) ;)
>
> #----------------------
> import os
> import smtplib
> import string
> import email
>
> from email.MIMEMultipart import MIMEMultipart
> from email.MIMEBase import MIMEBase
> from email.MIMEText import MIMEText
> from email.MIMEImage import MIMEImage
> from email.Utils import formatdate
> from email import Encoders
>
> #_________________
> def mandar_mail(
> pm_servidor_correo,
> pm_login_usuario,
> pm_login_password,
> pm_emisor_nombre,
> pm_emisor_correo,
> pm_receptor_nombre,
> pm_receptor_correo,
> pm_asunto,
> pm_archivo_texto,
> pm_archivo_html,
> pm_adjuntos = [],
> pm_acuse_recibo = False,
> pm_imagenes_embebidas = []):
> """
> Rutina para mandar correo electrónico, permitiendo mandar el
> mensaje alternativa/conjuntamente en modo texto y html, así como
> con archivos adjuntos, imágenes embebidas y pudiendo solicitar
> confirmación de lectura.
> """
> assert type(pm_adjuntos) == list
> assert type(pm_imagenes_embebidas) == list
>
> #Inicializamos el mensaje a mandar y vamos añadiendo partes
> msgRaiz = MIMEMultipart('related')
> msgRaiz['From'] = pm_emisor_nombre + ' <' + pm_emisor_correo +'>'
> msgRaiz['To'] = pm_receptor_correo
> msgRaiz['Subject'] = pm_asunto
> msgRaiz['Date'] = formatdate(localtime = True)
> msgRaiz.preamble = '' #De momento, no lo uso
> msgRaiz.epilogue = '' #De momento, no lo uso
>
> if pm_acuse_recibo:
> msgRaiz['Disposition-Notification-To'] = pm_emisor_correo
>
> #Se encapsulan las versiones de texto plano y html del cuerpo
> #del mensaje en una parte 'alternative' para que el cliente de
> #correo decida qué parte mostrar
> msgAlternativo = MIMEMultipart('alternative')
> msgRaiz.attach(msgAlternativo)
>
> #Abrimos mensaje de texto alternativo y lo añadimos
> msgTexto = MIMEText(pm_archivo_texto, 'plain', pm_encoding_cuerpo)
> msgAlternativo.attach(msgTexto)
>
> #Abrimos mensaje html alternativo y lo añadimos
> msgHtml = MIMEText(pm_archivo_html, 'html', pm_encoding_cuerpo)
> msgAlternativo.attach(msgHtml)
>
> #Añadimos las imágenes embebidas, si las hay
> for imagen in pm_imagenes_embebidas:
> #Cargar imagen
> archivo_imagen = open(imagen, 'rb')
> msgImage = MIMEImage(archivo_imagen.read())
> archivo_imagen.close()
>
> #Hemos de adjuntar la imagen en el content-id.
> #En el archivo html se debe hacer referencia al content-id
> #como fuente en el source de la imagen, por ejemplo:
> #<img src="cid:/nombre/de_la_ruta_entera/imagen.jpg">
> msgImage.add_header('Content-ID', '<' + imagen + '>')
> msgRaiz.attach(msgImage)
>
> #Añadimos los ficheros adjuntos a mandar , si los hay
> for file in pm_adjuntos:
> adjunto = MIMEBase('application', "octet-stream")
> adjunto.set_payload(open(file, "rb").read())
> Encoders.encode_base64(adjunto)
> adjunto.add_header('Content-Disposition', 'attachment; filename =
> "%s"' % os.path.basename(file))
> msgRaiz.attach(adjunto)
>
> #Conectamos con el servidor de correo y mandamos el mensaje
> servidor = smtplib.SMTP(pm_servidor_correo)
> #servidor.set_debuglevel(1)
> servidor.ehlo()
> servidor.login(pm_login_usuario, pm_login_password)
> try:
> servidor.sendmail(pm_emisor_correo, pm_receptor_correo,
> msgRaiz.as_string())
> servidor.quit()
> resultado = True
> except:
> resultado = False
>
> return(resultado)
>
> #-----------------------------------
>
> Para el ejemplo de llamada debeis tener el mensaje en formato texto
> ("mensaje_ejemplo.txt") y en formato html ("mensaje_ejemplo.html"). Y
> supondremos también que quereis adjuntar un archivo en formato pdf
> ("archivo_ejemplo.pdf"). Añadiremos otros literales de ejemplo para los
> demás parámetros:
>
> pm_servidor_correo = 'smtp.telefonica.ent'
> pm_login_usuario = 'tunombredeusuario$telefonica.net'
> pm_login_password = 'tupassword'
> pm_emisor_nombre = 'Tu Nombre en Bonito'
> pm_emisor_correo = 'tucorreo en telefonica.net'
> pm_receptor_nombre = 'El Nombre del Receptor en Bonito'
> pm_receptor_correo = 'correodelreceptor en hotmail.com'
> pm_asunto = 'El asunto del mensaje'
> pm_archivo_texto = 'mensaje_ejemplo.txt'
> pm_archivo_html = 'mensaje_ejemplo.html'
> pm_adjuntos = ['archivo_ejemplo.pdf']
> pm_acuse_recibo = False
> pm_imagenes_embebidas = []
>
> La llamada sería:
>
> mandar_mail( pm_servidor_correo, pm_login_usuario, pm_login_password,
> pm_emisor_nombre, pm_emisor_correo, pm_receptor_nombre,
> pm_receptor_correo, pm_asunto, pm_archivo_texto,
> pm_archivo_html, pm_adjuntos, pm_acuse_recibo, pm_imagenes_embebidas)
>
> Espero os sea de ayuda ( ya me contareis),
>
> Alatar ;)
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
Más información sobre la lista de distribución Python-es