problemas para enviar mail HTML (doctype) -algo de apuro-

64 views
Skip to first unread message

nicolás rosbaco

unread,
Feb 21, 2012, 3:06:43 PM2/21/12
to web2py-...@googlegroups.com
Hola gente... ando en pruebas para enviar un mail en formato HTML

toto bien si envio esto '<html><h1>hola</h1><h3>chau</h3></html>'

pero el problema esta cuando renderizo una vista, lo hago así:

    context = dict(uno='uno')
    body = response.render('invitaciondefinitiva.html',context)
#
#    body = '<html><body><h1>hola</h1><h3>chau</h3></body></html>'
#así anda bien

    attachments = []
    subject = 'Prueba: mail HTML'
    enviado = mail.send(TEST_ADDRESS,
        subject,
        body,
        attachments,
        reply_to=DIRECCION_DEL_SITIO)

el problema es el siguiente, si hago esto el mail lo veo como texto plano... con todos los tags.
Lo que atino a adivinar es lo siguiente: si renderizo veo que aparece esto: <!DOCTYPE html>

que si lo hago como esta comentado sale bien y la etiqueta doctype no aparece. El manual, donde anuve buecando salidas, dice que si el texto del mail empieza y termina en html, el mismo se interpreta como archivo html...

bueno las dos preguntas:

1) se me ocurre capturar en una variable el contenido del archivo html, para enviar eso evitando de este modo el anexado de la etiqueta doctype. ¿cómo puedo hacer eso de meter todo el contenido del archivo en una variable?

2) habrá alguna manera de usar render sin que entre el tag doctype??

gracias desde ya
--
"En un país colonial las oligarquías son las dueñas de los diccionarios" (John William Cooke)

nicolás rosbaco

unread,
Feb 21, 2012, 7:30:19 PM2/21/12
to web2py-...@googlegroups.com
lo resolví provisoriamente así (invitaciondefinitiva.html contiene el mensaje que deseo enviar):
en el controller:
def mailpatodos():

    ruta = request.folder+'views/mail/'+'invitaciondefinitiva.html'

    f = open(ruta,'r')
    linea = f.readline()

    arregla = ''
    i = 0
    while linea!='':
        arregla += linea
        linea = f.readline()

       
    attachments = []
    subject = 'Prueba: mail HTML'
    enviado = mail.send([TEST_ADDRESS,DIRECCION_ORGANIZADOR],
        subject,
        arregla,
        attachments,
        reply_to=DIRECCION_DEL_SITIO)
       
    if enviado:
        response.flash='enviado'
    else:
        response.flash='mal'
       
   
    return dict(arregla=arregla)
       

el archivo html tiene solo código html


¿alguna idea del error que tengo utilizando render???

Alan Etkin

unread,
Feb 22, 2012, 4:38:07 PM2/22/12
to web2py-usuarios
> ¿alguna idea del error que tengo utilizando render???

Qué error devuelve?

Puede llegar a ser de ayuda el helper TAG:

>>html = open(..).read()
>>instancia_de_tag = TAG(html)
>>print instancia_de_tag.xml()
<html>...</html>

nicolás rosbaco

unread,
Feb 22, 2012, 5:35:20 PM2/22/12
to web2py-...@googlegroups.com
hola devolver, no devuelve nada
el síntoma es que cuando recibo el mail es puro texto.... es decir: el cuerpo del mail no se interpreta como html..... evidentemente response agrega la etiqueta doctype y eso joroba el entendimiento con mail....

response esta bueno, porque sino tengo hacer esa manganeta para pasar todo el html a una variable

Alan Etkin

unread,
Feb 22, 2012, 8:16:49 PM2/22/12
to web2py-usuarios
En el ejemplo del libro, cuando usás una vista para enviar un email,
al crear el objeto mail tenés que pasar la salida de response.render()
al argumento message, en lugar de pasarla como body. Puede ser que por
eso no te lea correctamente el código fuente de la vista.

On 22 feb, 19:35, nicolás rosbaco <antiya...@gmail.com> wrote:
> hola devolver, no devuelve nada
> el síntoma es que cuando recibo el mail es puro texto.... es decir: el
> cuerpo del mail no se interpreta como html..... evidentemente response
> agrega la etiqueta doctype y eso joroba el entendimiento con mail....
>
> response esta bueno, porque sino tengo hacer esa manganeta para pasar todo
> el html a una variable
>
Reply all
Reply to author
Forward
0 new messages