Resolvido - Erro de Acentuação ao enviar e-mail

5 respostas
J

Bom dia, estou passando por um problema ao enviar um e-mail pelo java os acentos ficam com esse carácter: � isso somente pelo servidor do www.integrator.com.br, quando envio da minha maquina local funciona corretamente. ligue para eles e mesmo informaram que minha linguagem está diferente da UTF-8 a qual está configurada no servidor deles.

Alguém sabe como posso resolver esse caso?

segue abaixo a classe que utilizo para enviar e-mail:

public void Enviar(final ServidorEmail mail)
			throws UnsupportedEncodingException, MessagingException {
		
		Properties props = new Properties();
		props.setProperty("mail.transport.protocol", "smtp");
		props.setProperty("mail.host", mail.getSmtp());
		props.setProperty("mail.smtp.auth", mail.getSmtpAuth());
		props.setProperty("mail.smtp.starttls.enable", mail.getSmtpStarttls());
		props.setProperty("mail.smtp.port", mail.getPorta());
		props.setProperty("mail.mime.charset", mail.getCharsetMail());
		// classe anonima que realiza a autenticação
		// do usuario no servidor de email.
		Authenticator auth = new Authenticator() {
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(mail.getUsuario(),
						mail.getSenha());
			}
		};
		// Cria a sessao passando as propriedades e a autenticação
		Session session = Session.getDefaultInstance(props, auth);
		// Gera um log no console referente ao processo de envio
		session.setDebug(true);

		// cria a mensagem setando o remetente e seus destinatários
		Message msg = new MimeMessage(session);
		
		// aqui seta o remetente
		msg.setFrom(new InternetAddress(mail.getEmailRemetente(), mail
				.getNomeRemetente()));
		boolean first = true;
		for (Map.Entry<String, String> map : mail.getDestinatarios().entrySet()) {
			if (first) {
				// setamos o 1° destinatario
				msg.addRecipient(Message.RecipientType.TO, new InternetAddress(
						map.getKey(), map.getValue()));
				first = false;
			} else {
				// setamos os demais destinatarios
				msg.addRecipient(Message.RecipientType.CC, new InternetAddress(
						map.getKey(), map.getValue()));
			}
		}
		// Adiciona um Assunto a Mensagem
		msg.setSubject(mail.getAssunto());
		// Cria o objeto que recebe o texto do corpo do email
		MimeBodyPart textPart = new MimeBodyPart();
		textPart.setContent(mail.getCorpo(), mail.getTypeTextMail());
		// Monta a mensagem SMTP inserindo o conteudo, texto e anexos
		Multipart mps = new MimeMultipart();
		for (int index = 0; index < mail.getAnexos().size(); index++) {
			// Cria um novo objeto para cada arquivo, e anexa o arquivo
			MimeBodyPart attachFilePart = new MimeBodyPart();
			FileDataSource fds = new FileDataSource(mail.getAnexos().get(index));
			attachFilePart.setDataHandler(new DataHandler(fds));
			attachFilePart.setFileName(fds.getName());
			// adiciona os anexos da mensagem
			mps.addBodyPart(attachFilePart, index);
		}
		// adiciona o corpo texto da mensagem
		mps.addBodyPart(textPart);
		// adiciona a mensagem o conteúdo texto e anexo
		msg.setContent(mps);
		// Envia a Mensagem
		Transport.send(msg);
	}

}

5 Respostas

A

Boa tarde jjander.cunha!

Uso eclipse e passei por problema parecido ao uso o SVN.

Fui em preferences, general, workspace e no campo ‘text file encoding’ selecionei utf-8 em Other

V

pode ser a IDE sua que está com o texto configurado diferente ai na hora de copilar pode acontecer isso, OU pode ser que na hora de enviar para o servidor você não esteja definido a codificação (o que é altamente recomendado), provavelmente no método de enviar mensagem você deve ter um campo para definir a codificação ou no objeto que representa o servidor

V

para trabalhar com servidores de Email (POP3, POP e SMTP) eu uso o apache commons net nele ele me permite setar a codificação em que trabalho na hora de instanciar o objeto do servidor, isso me evitar problemas como o seu

J

resolvi colocando esse código:

MimeBodyPart textPart = new MimeBodyPart();

		textPart.setHeader("Content-Type", "text/html; charset=\"iso-8859-1\"");
		textPart.setContent(mail.getCorpo(), "text/html; charset=iso-8859-1");
		textPart.setHeader("Content-Transfer-Encoding", "quoted-printable");
L

jjander.cunha:
resolvi colocando esse código:

MimeBodyPart textPart = new MimeBodyPart();

		textPart.setHeader("Content-Type", "text/html; charset=\"iso-8859-1\"");
		textPart.setContent(mail.getCorpo(), "text/html; charset=iso-8859-1");
		textPart.setHeader("Content-Transfer-Encoding", "quoted-printable");

valeu por postar a solução.

Criado 16 de julho de 2013
Ultima resposta 30 de jul. de 2013
Respostas 5
Participantes 4