Email via javax.mail não está indo com acentuação

6 respostas
B

[color=darkred]Saudações a todos!

Tenho uma classe que envia email e ela funciona, só que o corpo do email chega sem acentos e, no lugar destes, códigos como =E1=A1, etc.

Para piorar, o assunto também não está indo, fica vazio.

Alguém poderia, por favor, me ajudar a entender o por quê disso estar acontecendo ?

Classe:[/color]
public static void sendSimpleMail(final String assunto, final String to, final String from, final String mensagem) throws AddressException, MessagingException {
	Properties mailProps = CarregaPropertiesUtil.carregaProperties("mail");
	String username = mailProps.getProperty("username");
	String password = mailProps.getProperty("password");
	
	Authenticator auth = new SMTPAuthenticator(username, password);
	Session mailSession = Session.getDefaultInstance(mailProps, auth);

	InternetAddress destinatario = new InternetAddress(to);
	InternetAddress remetente = new InternetAddress(from);

	MimeMessage message = new MimeMessage(mailSession);
	message.setSentDate(new Date());
	message.setFrom(remetente);
	message.setRecipient(Message.RecipientType.TO, destinatario);
	message.setSubject(assunto);
	message.setContent(mensagem.toString(), "text/html; charset=\"UTF-8\"");
	Transport transport = mailSession.getTransport();  
	transport.connect(mailProps.getProperty("mail.smtp.host"), username, password);
	Transport.send(message);
}
[color=darkred]Mail.properties[/color]
## dados do smtp
mail.smtp.auth=true
mail.transport.protocol=smtp
mail.smtp.quitwait=true
mail.smtp.host=--host--
username=--username--
password=--password--
[color=darkred] Além disso, tentei acrescentar essas linhas ao código, sem êxito:

message.setText(mensagem.toString(), "charset=iso-8859-1", "text/html");
message.setText(mensagem.toString(), "WINDOWS-1252");
email.setHeader("Content-Type", "text/plain; charset=ISO-8859-1");
email.setContentLanguage(new String[] {"pt-br"});

Já estou com esse problema desde às 8h da manhã e nenhum de nós daqui está conseguindo identificar o problema.

Grande abraço!
[/color]

6 Respostas

B

Follow-up:

Fiz uma classe na minha aplicação, depois de acrescentar commons-email no pom.xml:

import org.apache.commons.mail.SimpleEmail;

(...)

SimpleEmail email = new SimpleEmail();
try	{
	email.setHostName(smtp);
	email.setAuthentication(user, pwd);
	email.addTo(to, aliasTo);
	email.setFrom(from, aliasFrom);
	email.setSubject("Mandando mensagem pelo commons-email com açéntô");
	email.setMsg("Teste á é í ó ú ã õ ç.");
	email.send();
} catch (Exception e) {
	e.printStackTrace();
}

funciona que é uma beleza quando rodo como java application; porém, quando chamo esta mesma classe depois do deploy no JBOSS, o email gerado destrói acentos e retira o subject.

vou continuar fuçando e, caso encontre solução, posto aqui. Se alguém tiver sugestões, palpites ou dicas, estou aceitando também :slight_smile:

T

Pergunta, com qual charset você está compilando as suas classes?! Veja se não é isso que está acontecendo!

P

algo me diz que o sistema operacional do servidor tem alguma coisa configurada diferente de UTF-8

B

Olá, Pessoal!

Obrigado pela resposta de vocês!

Eu tive essa preocupação também antes e acertei todo mundo para UTF-8.

Apesar de achar possível que eu tenha esquecido algo ou comido mosca em algum desses pontos, não consigo entender porque o email enviado chega sem Subject.

Eu peguei o primeiro código que estava usando e testei como Java Application e também funcionou.

Como vocês, estou procurando o erro agora fora do código, no ambiente, mas tá complicado achar algo no google sobre isso.

De qualquer forma, vou rechecar o charset de todo mundo de novo.

Grande abraço e, mais uma vez, obrigado!

Joe

B

Atualizando a pendenga:

Não conseguimos de jeito nenhum acertar o problema; naveguei pelo site do jboss e não consigo achar nenhum lugar que tenha referência a problemas com:

1. acentos (que eu não tenha tentado)
2. assunto do email estar indo vazio.

Abri o pacote mail.jar do JBOSS e vi que a versão dele é 1.3.1, enquanto a minha era 1.4; alterei meu pom.xml para pegar a 1.3.1 e mesmo assim o erro persistiu.

Olhando os headers dos emails enviados, reparo que eles não tem cabeçalhos de content-type e similares, mesmo que eu explicitamente os defina. Quando mando por fora do JBOSS, eles aparecem e eu não tenho a menor idéia do que está acontecendo.

Há um ano atrás, trabalhei com um sistema também em JBOSS, só que na versão 3.2 e achei ontem lá em casa a classe que envia email. Apesar de ter diferenças pontuais, eu igualei a minha atual com esta, até o último ponto-e-vírgula, mas também não adiantou nada.

Estou entendendo que os colegas não tenham tido um problema desses antes e portanto não podem me ajudar diretamente, mas estou aceitando dicas de como analisar o problema. Por exemplo, nunca usei o profiler, ele poderia ser útil ?

Agradeço a atenção dos colegas. :)

Dados atuais do problema seguem abaixo:

Classe:
public class SendEmailUtil {
	
	
	/** Objeto de Log.*/
	   private static Logger log = Logger.getLogger(SendEmailUtil.class);
	
    /**
     * Classe para enviar email de acordo com as configurações contidas no arquivo mail.properties.
     * @param subject String
     * @param to String
     * @param from String
     * @param mensagem String
     * 
     * @throws AddressException
     * @throws MessagingException
     */
	
	
   public static void sendSimpleMail(final String assunto, final String to, final String from, 
		   final String mensagem)
        throws AddressException, MessagingException {
	   
	   Session mailSession = null;
	   try{
		Properties mailProps = CarregaPropertiesUtil.carregaProperties("mail");
		String username = mailProps.getProperty("username");
		String password = mailProps.getProperty("password");
	        Authenticator auth = new SMTPAuthenticator(username, password);
	        mailSession = Session.getInstance(mailProps, auth);
	        
	        InternetAddress destinatario = new InternetAddress(to, to, "UTF-8");
	        InternetAddress remetente = new InternetAddress(from, from, "UTF-8");
	
	        MimeMessage message = new MimeMessage(mailSession);
	        
	        message.setHeader("MIME-Version", "1.0");
	        message.setHeader("Content-Type", "text/plain; charset=UTF-8");
	        message.setHeader("Content-Transfer-Encoding", "quoted-printable");
	        message.setHeader("Content-Disposition", "inline");
	        
	        message.addHeader("MIME-Version", "1.0");
	        message.addHeader("Content-Type", "text/plain; charadd=UTF-8");
	        message.addHeader("Content-Transfer-Encoding", "quoted-printable");
	        message.addHeader("Content-Disposition", "inline");
	        
	        message.setContentLanguage(new String[] {"pt-BR"});
	        message.setSentDate(new Date());
	        
	        message.setFrom(remetente);
	
	        message.setRecipient(Message.RecipientType.TO, destinatario);
	
	        message.setSubject(".oOo." + assunto + ".oOo.", "ISO-8859-1");
	        
	        message.setContent(".oOo.\n" + mensagem.toString() + "óó´´oóoóóóó´´o´´o" +  "/n.oOo.", "text/html; charset=ISO-8859-1");
	        message.saveChanges();
	        
	        Transport transport = mailSession.getTransport();  
		transport.connect(mailProps.getProperty("mail.smtp.host"), username, password);
		transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
	     } catch (Exception e) {
	    	 log.error("ERRO NO EMAIL SENDER: ", e);
	     }
    }
Header do email que chega com acentos quebrados e sem assunto:
From - Fri Aug 08 11:44:51 2008
X-Account-Key: account2
X-UIDL: [telefone removido].971052.10953,1317.email.hst.host.com.br
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
X-Mozilla-Keys:                                                                                 
Return-Path: <[email removido]>
Received: from [unix socket] by email.hst.host.com.br (LMTP); Fri, 08 Aug 2008
	14:40:01 +0000 (UTC)
X-Terra-Karma: -2%
X-Terra-Hash: cafddb3460df7b729009ba203762eb6d
Received-SPF: none (email.hst.host.com.br: 999.999.999.999 is neither permitted nor
	denied by domain of domain.com.br) client-ip=999.999.999.99;
	envelope-from=[email removido];
	helo=relay02.email.host.com.br;
Received: from relay02.email.host.com.br (relay02.email.host.com.br [999.999.999.99])
	by email.hst.host.com.br (Postfix) with ESMTP id BAEEFD3C0E6
	for <[email removido]>; Fri,  8 Aug 2008 14:40:01 +0000 (UTC)
Received: from maquina (unknown [999.99.999.999])
	(Authenticated sender: [email removido])
	by relay02.email.host.com.br (Postfix) with ESMTP id 5940D400A6EC
	for <[email removido]>; Fri,  8 Aug 2008 11:40:01 -0300 (BRT)
X-Antivirus: avast! (VPS 080806-0, 06/08/2008), Outbound message
X-Antivirus-Status: Clean
Message-Id: <[email removido]>
Date: Fri,  8 Aug 2008 11:40:01 -0300 (BRT)
From: [email removido]
To: undisclosed-recipients:;
MIME-Version: 1.0
Status: O
X-Antivirus: avast! (VPS 080806-0, 06/08/2008), Inbound message
X-Antivirus-Status: Clean

.oOo.
=F3=
=F3=B4=B4o=F3o=F3=F3=F3=F3=B4=B4o=B4=B4o/n.oOo.
Header do email que chega corretamente (mesma classe, sendo executada como java application, fora do JBOSS):
From - Fri Aug 08 11:44:48 2008
X-Account-Key: account3
X-UIDL: [telefone removido].M130632P25924.mailserver01,S=1300,W=1327
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
X-Mozilla-Keys:                                                                                 
Return-Path: <[email removido]>
Delivered-To: [email removido]
Received: from relay01.email.host.com.br (relay01.email.host.com.br [99.9.9.9])
	by mailserver01.email.host.com.br (Postfix) with ESMTP id 1C3703800081
	for <[email removido]>; Fri,  8 Aug 2008 11:44:35 -0300 (BRT)
Received: from maquina (unknown [999.99.999.999])
	(Authenticated sender: [email removido])
	by relay01.email.host.com.br (Postfix) with ESMTP id A2B29400A32E
	for <[email removido]>; Fri,  8 Aug 2008 11:44:33 -0300 (BRT)
Date: Fri, 8 Aug 2008 11:44:40 -0300 (BRT)
From: "[email removido]" <[email removido]>
To: "[email removido]" <[email removido]>
Message-ID: <4121220.01218206680437.JavaMail.Administrador@maquina>
Subject: =?ISO-8859-1?Q?.oOo.execu=E7=E3o_como_classe_normal,_fora_do_JBOSS!.oOo.?=
MIME-Version: 1.0
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Content-Disposition: inline
Content-Language: pt-BR
X-Antivirus: avast! (VPS 080806-0, 06/08/2008), Outbound message
X-Antivirus-Status: Clean
X-Antivirus: avast! (VPS 080806-0, 06/08/2008), Inbound message
X-Antivirus-Status: Clean

.oOo.
Ol=E1, tudo bem?? =E1=E9=F3=ED=FA &aacute;=20

 OL=C1=F3=F3=B4=B4o=F3o=F3=F3=F3=F3=B4=B4o=B4=B4o/n.oOo.
B

Follow-up: http://www.guj.com.br/posts/list/99508.java

Resumo: conflito da lib javax.mail com a geronimo-javamail_1.4_spec-1.2.jar, que contém dentro de si uma implementação de javax.mail :frowning:

Criado 6 de agosto de 2008
Ultima resposta 8 de ago. de 2008
Respostas 6
Participantes 3