Palavras-chave: Java, JavaMail, email, SMTP, SMTP autenticado
Enviar emails é uma tarefa corriqueira, mas sempre precisamos olhar um exemplo da JavaMail API para montar uma classe utilitária. A seguir, um exemplo mínimo do envio de emails através de um servidor SMTP autenticado:
public void enviarEmail(String emailDest, String nomeDest,
String emailRemet, String nomeRemet, String assunto, String corpo)
throws Exception {
Properties props = System.getProperties();
props.put("mail.smtp.host", "smtp.firma.com.br");
props.put("mail.smtp.auth", "true");
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("fulano", "suasenha");
}};
Session session = Session.getInstance(props, auth);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(emailRemet, nomeRemet));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(emailDest, nomeDest));
message.setSubject(assunto);
message.setContent(corpo, "text/plain");
Transport.send(message);
}
Para executar este código, é preciso colocar o JavaMail (mail.jar) e o Java Activation Framework (activation.jar) em seu classpath. Se você usa Java 6, não vai precisar do JAF no classpath, pois este foi embutido nesta versão do Java.
Para testar o código, pode-se fazer algo como:
enviarEmail("todos@firma.com.br", "Lista da Firma", "fulano@firma.com.br",
"Fulano da Silva", "Codare", "Gosto do Codare. E vocês?");
Se você usa emails dentro de Servidores de Aplicação, pode fazer lookup da sessão no JNDI, ao invés de criá-la passando as propriedades. Você a receberá com as propriedades setadas pelo administrador do ambiente e, como desenvolvedor, não precisará se preocupar com coisas como “qual é o servidor de email do ambiente de produção”:
Session session =
(Session) new InitialContext().lookup("java:comp/env/mail/Sessao");







7 comentários
Feed de comentários deste artigo
27 novembro 2007 às 13:22
fce
gelson.tche@hotmail.com
1 dezembro 2007 às 16:58
John Soares
Pessoal,
Efetuei o teste com o código proposto, efetuando as devidas alterações de usuário e senha(é claro). Obtive a resposta do Eclipse que deu problema de autenticação.
Com o wireshark, verifiquei que o outlook informa para o servidor SMPT qual o tipo da criptografia da senha, no meu caso é PLAIN CRAM-MD5. Esta informação não ocorre quando utilizo o código java. Isto me leva a crer que preciso especificar no código qual o tipo de criptografia a utilizar.
Como faço para estipular o tipo de criptografia?
Abraços!
1 dezembro 2007 às 18:23
John Soares
Pessoal,
Já verifiquei o erro. Ao habilitar o debug pude verificar que não tinha nada a ver com o tipo de criptografia dos dados.
Foi erro de digitação mesmo do endereço de email.
Abraço.
19 maio 2008 às 17:31
jr
olá,
preciso de um servidor smtp autenticado, como faço para adquirir?
obrigado
8 agosto 2008 às 9:12
Dayvson Reis
Cara muito bom, funcionou de primeira. Valeu.
21 abril 2009 às 21:27
Jayro
Muito bom… de primeira !
:)
7 junho 2009 às 2:01
Osni
Poxa
passei um tempão tentando manda esse bendito e-mail
agora foi de boas!!!
eu acho q tava faltando o Java Activation Framework
ou sei lá….
o importante é que agora tá funcionando!
valeu mesmo!