enviar correo con python

Daniel Muñiz Fontoira dmunhiz en gmail.com
Jue Mar 1 10:28:49 CET 2007


Ola,
he quitado lo de la coificación
##   msgTexto = MIMEText(pm_archivo_texto, 'plain', pm_encoding_cuerpo)
   msgTexto = MIMEText(pm_archivo_texto, 'plain')

enviar envía
pero me aroja este error

Traceback (most recent call last):
  File "C:\Python24\Lib\site-packages\boa\Debugger\IsolatedDebugger.py",
line 348, in execute
    result = getattr(ob, self.func_name)(*self.args, **self.kw)
  File "C:\Python24\Lib\site-packages\boa\Debugger\IsolatedDebugger.py",
line 878, in set_step_over
    raise DebugError('No current frame')
DebugError: No current frame

alguien sabe a que se debe?
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