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