Ticket #1915 (closed defeito: fixed)

Opened 9 years ago

Last modified 9 years ago

Email perde formatação

Reported by: guilherme.silva Owned by: zapa
Priority: normal Milestone: Expresso 2.4.0
Component: ExpressoMail Version: trunk
Severity: média Keywords: SERPRO
Cc: WorkGroup:

Description

Email perde formatação (incluir o anexo eml).

Attachments

email_com_erro.eml Download (27.3 KB) - added by guilherme.silva 9 years ago.

Change History

Changed 9 years ago by guilherme.silva

comment:1 Changed 9 years ago by zapa

  • Component changed from API to ExpressoMail

comment:2 Changed 9 years ago by zapa

Este problema ocorre em emails oriundos do MS-Outlook.

Na verdade são dois problemas:

1.A clausula text-indent, no corpo do email não respeitada na visualização do expresso está tratada no ticket #1914.

2.O problema maior é a retirada dos SPAN - Retira coisas a mais do que as vezes deve, em consequência o email perde formatação(ou até conteúdo). Se não me engano esta retirada dos spans fora em função de bug que provocava o fechamento do FF sob Ubuntu em função de plugin java instalado.

Não havendo solução definitiva, sempre haverá problemas, seja em retirar os Span(em prejuízo da visualização de emails) ou mante-los e fechar alguns browsers que abrem determinados emails com estas características.

comment:3 follow-up: ↓ 4 Changed 9 years ago by wmerlotto

Zapa, temos uma sugestão de correção, conforme este diff:

  • expresso/trunk/expressoMail1_2/inc/class.imap_functions.inc.php

     
    14231423                                $body = str_replace($rest[1][$i],"<".$rest[2][$i].$rest[3][$i].$rest[7][$i].">",$body); 
    14241424                } 
    1425                  
    1426                 //$body = $this->replace_links($body); 
    1427  
    1428                 //Remoção de tags <span></span> para correção de erro no firefox 
    1429                 $body = mb_eregi_replace("<span><span>",   "", $body); 
    1430                 $body = mb_eregi_replace("</span></span>", "", $body); 
    1431                  
     1425 
     1426                /* 
     1427                 * Remove deslocamento a esquerda colocado pelo Outlook em paragrafos com marcadores. 
     1428                 * Este delocamento faz com que algumas palavras fiquem escondidas atras da barra lateral do expresso. 
     1429                 */ 
     1430                $body = mb_ereg_replace("(<p[^>]*)(text-indent:-18.0pt;)([^>]*>)","\\1\\3",$body); 
     1431 
    14321432                //Correção para compatibilização com Outlook, ao visualizar a mensagem 
    14331433                $body = mb_ereg_replace('<!--\[','<!-- [',$body); 
    14341434                $body = mb_ereg_replace('&lt;!\[endif\]--&gt;', '<![endif]-->', $body); 
    14351435                         
    1436                 return  "<div class=\"$wrapper_class\"><span>".$body.'</span></div>'; 
     1436                return  "<div class=\"$wrapper_class\" ><span>".$body.'</span></div>'; 
    14371437        } 

comment:4 in reply to: ↑ 3 Changed 9 years ago by brunocosta

Foi exatamente isso que eu fiz aqui, mas retirando todo text-indent (usando preg_replace("/text-indent:.*;/i","", $body);).

Mas ainda existe o problema dos spans ($body = mb_eregi_replace("<span><span>", "", $body); e $body = mb_eregi_replace("</span></span>", "", $body);) que nesse email em especifico fazem uma formatação que deveria se aplicar em pequeno SPAN ser aplicado num SPAN que é o parágrafo todo, o que é um problema porque essa formatação troca a fonte para uma que só tem símbolos (Wingdings) o que deixa o email ilegível.

Replying to wmerlotto:

Zapa, temos uma sugestão de correção, conforme este diff:

  • expresso/trunk/expressoMail1_2/inc/class.imap_functions.inc.php

     
    14231423                                $body = str_replace($rest[1][$i],"<".$rest[2][$i].$rest[3][$i].$rest[7][$i].">",$body); 
    14241424                } 
    1425                  
    1426                 //$body = $this->replace_links($body); 
    1427  
    1428                 //Remoção de tags <span></span> para correção de erro no firefox 
    1429                 $body = mb_eregi_replace("<span><span>",   "", $body); 
    1430                 $body = mb_eregi_replace("</span></span>", "", $body); 
    1431                  
     1425 
     1426                /* 
     1427                 * Remove deslocamento a esquerda colocado pelo Outlook em paragrafos com marcadores. 
     1428                 * Este delocamento faz com que algumas palavras fiquem escondidas atras da barra lateral do expresso. 
     1429                 */ 
     1430                $body = mb_ereg_replace("(<p[^>]*)(text-indent:-18.0pt;)([^>]*>)","\\1\\3",$body); 
     1431 
    14321432                //Correção para compatibilização com Outlook, ao visualizar a mensagem 
    14331433                $body = mb_ereg_replace('<!--\[','<!-- [',$body); 
    14341434                $body = mb_ereg_replace('&lt;!\[endif\]--&gt;', '<![endif]-->', $body); 
    14351435                         
    1436                 return  "<div class=\"$wrapper_class\"><span>".$body.'</span></div>'; 
     1436                return  "<div class=\"$wrapper_class\" ><span>".$body.'</span></div>'; 
    14371437        } 

comment:5 follow-up: ↓ 6 Changed 9 years ago by wmerlotto

Maravilha!

Quanto ao "span", creio que o e-mail deve ser interpretado da forma mais original possível, sem remover ou substituir nada, ou o mínimo possível.

Neste caso, vejo a única alternativa é remover esse código (mb_eregi_replace("<span><span>", "", $body)) e testar! Revisar a lista de mensagens problemáticas e verificar se os e-mails são visualizados corretamente.

comment:6 in reply to: ↑ 5 Changed 9 years ago by brunocosta

Replying to wmerlotto:

Maravilha!

Quanto ao "span", creio que o e-mail deve ser interpretado da forma mais original possível, sem remover ou substituir nada, ou o mínimo possível.

Neste caso, vejo a única alternativa é remover esse código (mb_eregi_replace("<span><span>", "", $body)) e testar! Revisar a lista de mensagens problemáticas e verificar se os e-mails são visualizados corretamente.

O problema é que esses <span> são retirados com um proposito, devito a um bug na implementação mais nova do plugin do java no firefox do linux quando uma pagina tem muitos níveis de tags ele fecha o browser, e isso acontece muito com spans por causa do editor. Aqui no serpro nos resolvemos mudando a implementação do plugin do java para a antiga.

comment:7 Changed 9 years ago by zapa

  • Milestone changed from Expresso 2.2.6 to Expresso 2.2.0.2

Coloquei para o próximo milestone continuar a discussão visto que os spans permanecem, e retirando-os fica sujeito a desformatação.

comment:8 Changed 9 years ago by cristiano

Acho que seria mais interessante manter a expressão regular “mb_ereg_replace("(<p[>]*)(text-indent:-18.0pt;)([>]*>)","
1
3",$body);” ao invés da “preg_replace("/text-indent:.*;/i","", $body);”, pois esta segunda acaba retirando todos os text-ident do e-mail, diferente da primeira que só retira os text-ident inseridos nos parágrafos pelo MS Outlook. (Quanto ao valor -18, eu confirmei no Outlook independente do tamanho da fonte, o valor é o mesmo).

Retirar todos os text-ident do e-mail pode comprometer outras formatações que não estão com problemas.

comment:9 Changed 9 years ago by wmerlotto

  • Status changed from new to closed
  • Resolution set to fixed

Senhores, fizemos uma correção um pouco diferente para este problema, conforme o ticket #2132.

comment:10 Changed 9 years ago by niltonneto

  • Version changed from branch 2.2 to trunk
Note: See TracTickets for help on using tickets.