Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Mensagens HTML de lojas com erro na especificação de conteúdo

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 :

  1. define o comando de filtro.
  2. redefine a macro <esc>l para passar a executa a ,@lnxoff.
  3. mostra a mensagem através passada pelo comando de filtro.

O que a macro ,@lnxoff faz ? Na verdade ela desfaz o que a ,@lnxon faz :

  1. torna indefinido o comando do filtro.
  2. redefine a macro <esc>l para passar a executar a ,@lnxon.
  3. mostra a mensagem sem filtro algum.

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]
  
  }

Referências

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.

Veja a relação completa dos artigos de Fernando M. Roxo da Motta

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.98/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (824 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Lan University

Submarino.com.br

Encontre imóveis, apartamentos e casas a venda no Imobilien
Saiba mais

 

 

Procure pela casa ou apartamento ideal à venda ou para aluguel na busca inteligente do Imohoo
Buscar imóveis