Envio de email com Java

Olá.

Estou desenvolvendo uma aplicação web onde preciso enviar alguns emails. Minha classe de envio de email é a seguinte:

public class EnviaEmail
{
    private String host = "smtp.mail.yahoo.com.br";

    public class SMTPAuthenticator extends Authenticator
    {
        @Override
        public PasswordAuthentication getPasswordAuthentication()
        {
            String username = "xxxxxyyyyy@yahoo.com.br";
            String password = "xxxxxxx";
            return new PasswordAuthentication(username, password);
        }
    }

    public void EnviarEmailPara(String para, String assunto, String mensagem) throws Exception
    {
        String from = "xxxxxxxyyyyyy@yahoo.com.br";
        String fileAttachment = "";

        Properties mailProps = System.getProperties();

        mailProps.put("mail.smtp.host", this.host);

        Authenticator auth = new SMTPAuthenticator();
        Session session = Session.getDefaultInstance(mailProps, auth);

        mailProps.put("mail.smtp.auth", "true");
        mailProps.put("mail.debug", "true");
        mailProps.put("mail.smtp.debug", "true");
        mailProps.put("mail.mime.charset", "ISO-8859-1");
        mailProps.put("mail.smtp.port", "587");

        MailcapCommandMap mc = (MailcapCommandMap) CommandMap
                .getDefaultCommandMap();
        mc
                .addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
        mc
                .addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
        mc
                .addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
        mc
                .addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
        mc
                .addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
        CommandMap.setDefaultCommandMap(mc);

        // Definir mensagem
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.addRecipient(Message.RecipientType.TO,
                new InternetAddress(para));
        message.setSubject(assunto);

        // Criar parte da mensagem
        MimeBodyPart messageBodyPart = new MimeBodyPart();

        // Texto da mensagem
        messageBodyPart.setText(mensagem);

        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart);

        // Enviar parte da mensagem
        message.setContent(multipart);

        message.setContent(mensagem.toString(), "text/html");

        // Enviar toda a mensagemSend the message
        Transport.send(message);
    }
}

Meu problema não é bem na no envio da mensagem, eu acho, e sim na codificação da mensagem.
Minha pergunta pode até ser bem boba mas é que nunca fiz este tipo de coisa antes.

Estou gerando minha mensagem da seguinte forma:

String mensagem = null;

        mensagem += "Bem vindo(a) "+usuario.getNome()+"\n\n";
        mensagem += "Sua conta foi criada com sucesso com os seguintes dados:\n";
        mensagem += "Login: "+usuario.getLogin()+"\n";
        mensagem += "Senha: "+usuario.getSenha()+"\n";
        mensagem += "Código de ativação: "+usuario.getCodigoAtivacao()+"\n\n";
        mensagem += "Utilize o código acima para a ativação de sua conta.";

Mas a mensagem que recebo no meu email é a seguinte:

[color=blue]Bem vindo(a) Marcelo Sua conta foi criada com sucesso com os seguintes dados: Login: mfbottoni Senha: z9m7pq36 Código de ativação: tn168ft0rs Utilize o código acima para a ativação de sua conta.[/color]

Exatamente desse jeito. Mas gostaria que ela fosse assim:

[color=blue]Bem vindo(a) Marcelo

Sua conta foi criada com sucesso com os seguintes dados:
Login: mfbottoni
Senha: z9m7pq36
Código de ativação: tn168ft0rs

Utilize o código acima para a ativação de sua conta.[/color]

Alguém sabe me dizer o que devo fazer?

Muito obrigado.
Abraço, Bottoni

Experimente quebrar as linhas com “\r\n” em vez de só “\n”.

Valeu pela dica, mas não deu certo.

Continuou sem pular as linhas!

eu vi que vc setou o contentType da msg pra html, tenta usar o
pra quebrar linha

Agora sim! :slight_smile:

Muito obrigado pela ajuda.

Hum, é mesmo. Se ele está usando text/html, deveria ter escrito algo como:


StringBuilder msg = new StringBuilder();
     msg.append ("<html><body>");
     msg.append ("<p>Bem vindo(a) "+usuario.getNome()+"</p>");  
     // ... e assim por diante, você deve saber mais HTML que eu.
     msg.append ("</body></html>");
String mensagem = msg.toString();

Boa ideia. Isso deixaria a mensagem mais bem formulada.
Obrigado pela dica!

[quote=mfbottoni]Boa ideia. Isso deixaria a mensagem mais bem formulada.
Obrigado pela dica![/quote]

Eu não sei qual a sua necessidade, mas se vc for mandar emails padrão, tipo sempre o mesmo texto, muda só algumas coisas, eu usaria algum tipo de template. Cada email seria uma página html, e vc só indica as partes variáveis, dando pra usar css, e etc. O Spring tem uma ótima integração com Velocity, mas da pra usar sem Spring tbm. da uma pesquisada, pode ser muito util pra vc.