De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Fernando M. Roxo da Motta
Data de Publicação: 17 de Junho de 2009
Eu fiz uma compra através do sítio das Loj*****nas, até aí (quase) nada de anormal, afinal hoje isto é bastante comum. O problema é que eles começaram, mui gentilmente, a me mandar mensagens HTML para que eu pudesse acompanhar o andamento da compra. Alguma novidade até aqui ? Não, claro que não, afinal isto já é muito comum.
Então se está tudo normal, para que esta dica ?
O problema é que eu uso o Mutt que é um leitor texto. Isto, um leitor de mensagens que espera que o texto seja... Texto. Ok, isto pode ser um pouco incomum hoje em dia. Não que seja impossível ler email formatado HTML no Mutt, basta colocar no arquivo '~/.muttrc' uma linha como :
auto_view text/html
Além disso deve-se colocar uma linha como :
text/html; lynx -force_html -dump %s ; copiousoutput; nametemplate=%s.html
No arquivo '~/.mailcap'
. Daí por diante ao abrir uma mensagem HTML o
Mutt faz toda a pajelança necessária e a converte para texto como esperado
pelo Mutt. Simples, não ?
Bem, para quem está acostumado a leitores de emails via navegador WEB ou estes cheios de parafernálias que acham que enviar email em HTML (normalmente junto com uma cópia em texto puro, para aumentar o tráfego) isto pode parecer complicado. Se for este o seu caso não se preocupe, o conteúdo desta dica não é para você e não vai alterar em nada a sua vida. ;)
Aparentemente o problema está resolvido, certo ? Não, a informação acima está no manual do Mutt e em uma penca de outros documentos facilmente "Googláveis". Portanto até aqui nenhuma novidade.
Vamos lá, qual o problema? O problema é que a mensagem veio assim :
Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable <html> <head> <title>Recebemos seu pedido</title> </head> <body bgcolor='#FFFFF F' topmargin='0'> <table width='550' border='0' align='center' cellpadding='0' c ellspacing='1' bgcolor='#E9E6DF'> <tr> <td valign='top' bgcolor='#FFFFFF'> =============8< --- um monte de lixo HTML removido --------- .*******nas.com.br/email/gap.gif' width='50' height='1'> </td> </tr> </table></td> </tr> </table> </body> </html> }
Conseguiram perceber o problema ? O cabeçalho da mensagem diz que o conteúdo
é "text/plain
" mas o conteúdo é "text/html
". Já que o Mutt espera mensagens
bem formatadas, mesmo quando em HTML, que sigam minimamente o padrão, ele
não usa o filtro do "auto_view". Logo o que vemos é a bagunça de um texto
formatado em HTML onde a mensagem real é cerca de 10% do conteúdo.
Garimpar o que eles estão querendo dizer o meio daquele HTML todo não é fácil. E seria muito mais fácil se eles tivessem feito certo. :(
Ok, tem meio de forçar a filtragem para texto como o Mutt espera ?
Curto e grosso: sim !
E é isto que eu pretendo passar aqui. ;)
Não é trivial, mas nem por isto é difícil. Ou como diriam os camelôs "não requer prática nem habilidade", mas precisa atenção.
Para fazer a "brincadeira" eu vou construir uma macro baseada na de [de]codificação Rot13 que utiliza uma macro que se altera.
São três linhas para o '~/.muttrc
':
#------------------------------------------------------- # # Aguns sites (vide Loj*********nas) são mal escritos o suficiente para # enviar email HTML especificando "Content-Type: # text/plain" # Esta macro força o pipe pelo Lynx para gerar o texto corretamente. # macro pager ,@lnxon "<enter-command> set display_filter=lynx\\ -display_charset=utf-8\\ --force-html\\ -dump\\ -stdin; macro pager \\el ,@lnxoff 'Liga/desliga filtro HTML'<Enter><exit><display-message><enter-command> set ?display_filter<Enter>" macro pager ,@lnxoff "<enter-command> unset display_filter; macro pager \\el ,@lnxon 'Liga/desliga filtro HTML'<Enter><exit><display-message><enter-command> set ?display_filter<Enter>" macro pager \el ,@lnxon 'Liga/desliga filtro HTML' #-------------------------------------------------------
Uma macro é definida pela especificação "macro" seguida pelo ambiente onde ela é ativa, no caso "pager", a sequencia de ativação, a definição da macro e um texto para o auxílio (?) do Mutt.
A terceira linha cria uma macro acionada (ou acionável) no "pager", que
é o leitor do conteúdo da mensagem. A macro é acionada pela sequencia
<esc>l
e a sua definição é chamar uma outra macro ",@lnxon
".
A primeira linha define a macro ",@lnxon
". A ação desta macro está
descrita entre as aspas ("
). O que ela faz ? Vamos destrinchar e
escrever como se fosse um script :
A primeira parte :
<enter-command> set display_filter=lynx\\ -display_charset=utf-8\\ --force-html\\ -dump\\ -stdin
Define uma variável (display_filter
) que especifica o comando a ser usado
antes de apresentar a mensagem. O comando a ser usado é :
lynx -display_charset=utf-8 --force-html -dump -stdin
Este vai ler o conteúdo na entrada padrão (stdin
) como um texto HTML
(force-html
) e gerar o texto resultante na saída padrão (dump
).
A segunda parte :
macro pager \\el ,@lnxoff 'Liga/desliga filtro HTML'<Enter>
Redefine a macro <esc>l
para que ao ser acionada execute a macro
,@lnxoff
, descrita na segunda linha de definição acima.
A terceira parte :
<exit><display-message><enter-command> set ?display_filter<Enter>
Sai da fase de definições (<exit>
) e manda mostrar a mensagem
(<display-message>
) usando um comando (<enter-command>
) definido pela
variável display_filter
.
Uff! Realmente não é simples, mas não é difícil. Resumindo a ópera
da definição da macro ,@lnxon
:
,@lnxoff
.
O que a macro ,@lnxoff
faz ? Na verdade ela desfaz o que a ,@lnxon
faz :
,@lnxon
.
O interessante é que na ajuda do Mutt (use tecla ?
), antes de acionar
a macro, vemos :
<Esc>l M ,@lnxon Liga/desliga filtro HTML
Assim que acionamos a macro aparece :
<Esc>l M ,@lnxoff Liga/desliga filtro HTML
Claro que se acionarmos a macro ela fica mudando entre uma e outra definição.
A mensagem filtrada fica :
[pedido_header.gif] *** Esse é um e-mail automático. Não é necessário respondê-lo *** [gap.gif] [gap.gif] Fernando M R Motta, obrigado por escolher a *******nas.com! O seu pedido foi registrado em nosso sistema sob o número 99999999 e estamos aguardando a autorização da administradora do seu cartão de ================8<----- grande parte eliminada ---------------- Atenciosamente, Atendimento ao Consumidor - *******nas.com ????-4848 ou 023 11 ????-4848 [5]www.*******nas.com.br [gap.gif] }
1. http://www.***nas.com.br/emailconfirmacao 2. https://carrinho.***nas.com.br/portal/meuCadastro.portal?_nfpb=true&Lo ginControllerPortlet_actionOverride=%2Fportlets%2ForderHistory%2FpedidoHistorico 3. http://www.***nas.com.br/cgi-bin/WebObjects/StaticPages.woa/wa/Atendim entoClienteAction/atendcliente 4. http://faleconosco.***nas.com.br/ 5. http://www.***nas.com.br/
=============8< - corpo do email filtrado ---------
Bem diferente, certo ?
<ATENÇÃO !> A macro define um filtro de exibição a ser aplicado a todas as mensagens ao serem mostradas. Se você esquecer de desligá-la, usando o <esc>l, e a próxima mensagem aparecer embaralhada não se apoquente. Basta desligar o filtro e seguir a vida sem problema. </ATENÇÃO !>
Espero que isto ajude que novas macros interessantes apareçam por aqui.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários