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");
gelson.tche@hotmail.com
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!
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.
olá,
preciso de um servidor smtp autenticado, como faço para adquirir?
obrigado
Cara muito bom, funcionou de primeira. Valeu.
Muito bom… de primeira !
:)
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!
Obrigado, funcionou perfeito.
Grato por este script de otima qualidade
Boa tarde tem como aplicar isto em uma aplicação desktop ?