Enviar email autenticado com Java

Enquanto eu estava escrevendo o post anterior (Enviar email com Java) surgiu a necessidade na empresa de que os envios de email fossem autenticados, por isso logo após ter publicado o outro post resolvi escrever este para mostrar a diferença.
Repare que as diferenças são muito poucas, mas aconselho que leia o post de envio simples para entender como este funciona e assim entender de modo mais “easy” como autenticar.
Para autenticar você terá que setar mais uma propriedade dizendo que é necessário autenticação:
props.put("mail.smtp.auth", "true");
No modo simples para pegar a sessão se faz assim:
Session session = Session.getDefaultInstance(props, null); //o null que mudará
Para passar o usuário e a senha faça deste modo:
Authenticator auth = new Authenticator(){
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("usuario", "senha");
}
};
Session session = Session.getDefaultInstance(props, auth);
E ai está, as diferenças são apenas essas, o resto é igualzinho.
Segue o código completo
package br.com.luiztaborda.blog.email;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class EmailAutenticado {
public static void enviarEmail(
String de, String para,
String assunto, String msg)
throws MessagingException {
Properties props = System.getProperties();
// importante: Setando o host smtp
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", "mail.seudominio.com.br");
props.put("mail.smtp.auth", "true");
// create some properties and get the default Session
Authenticator auth = new Authenticator(){
public PasswordAuthentication getPasswordAuthentication()
{
return new
PasswordAuthentication("usuario", "senha");
}
};
Session session = Session.getDefaultInstance(props, auth);
// opcional: habilitando o debug
session.setDebug(true);
// criando a mensagem
Message mensagem = new MimeMessage(session);
// remente
InternetAddress addressFrom = new InternetAddress(de);
Address to[] = new InternetAddress[1];
mensagem.setFrom(addressFrom);
mensagem.setSubject(assunto);
mensagem.setContent(msg, "text/html;charset=ISO-8859-1");
// para texto normal use "text/plain;charset=ISO-8859-1"
// você pode mudar o charset também
to[0] = new InternetAddress(para);
mensagem.setRecipients(Message.RecipientType.TO, to);
Transport.send(mensagem);
}
public static void main(String[] args) throws MessagingException {
EmailAutenticado.enviarEmail(
"seuemail@seudominio.com.br", "destino@dominio.com.br",
"teste", "corpo");
}
}
Leave a Reply