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");