Tutorial JavaMail


Nesse post eu vou mostrar como enviar email com a API JavaMail.

Neste post será usado o servidor de aplicação JBoss 6 – como instalar o jboss e como instalar o jboss no eclipse

Vamos lá, primeiro vamos criar um projeto web – clique aqui e veja como criar um projeto web

Crie um Dinamic Web Project chamado javamail

Vamos criar a nossa classe que irá implementar as funcionalidades de enviar email da API JavaMail

Crie um classe no pacote br.com.mail chamada Email e digite o código abaixo:

package br.com.mail;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Email {

//Método que envia o email
public static void enviaEmail( String remetente, String destinatario, String assunto, String mensagem){

Session session = Session.getDefaultInstance(getPropriedades(), getAuthenticator());

try {

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(remetente)); //Seta o remetente
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(destinatario)); //Define o destinatário
message.setSubject(assunto); //Define o assunto
message.setText(mensagem); //Mensagem do email

Transport.send(message); //Envia o email

} catch (MessagingException e) {
throw new RuntimeException(e);
}
}

//Método que retorna a autenticação de sua conta de email
public static Authenticator getAuthenticator(){

Authenticator autenticacao = new Authenticator() {

public PasswordAuthentication getPasswordAuthentication() {

//Preencha com seu email e com sua senha
return new PasswordAuthentication("seuemail@gmail.com", "suasenha");
}
};

return autenticacao;
}

//Método que retorna as propriedades de configuração do servidor de email
public static Properties getPropriedades(){

Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP do seu servidor de email
props.put("mail.smtp.socketFactory.port", "465"); //Porta do servidor smtp
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); //Define a conexão do tipo SSL
props.put("mail.smtp.auth", "true"); //Define que é necessário autenticação
props.put("mail.smtp.port", "465"); //Porta do seu servidor smtp

return props;
}
}

Crie uma página HTML chamada email.html e digite o código abaixo:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Tutorial Java Mail</title>
</head>
<body>

<h2> TUTORIAL JAVA MAIL </h2>

<hr/>

<form action="EnviaEmailServlet" method="post">
DE: <input type="text" name="remetente" /> <br/>
PARA: <input type="text" name="destinatario" /> <br/>
ASSUNTO: <input type="text" name="assunto" /> <br/>
MENSAGEM: <textarea name="mensagem" rows="10" cols="40" > </textarea> <br/>

<input type="submit" value="Enviar" />
</form>
</body>
</html>

A página html acima, passará os dados dos campos para o Servlet EnviaEmailServlet que criaremos logo a seguir.

Agora crie um Servlet no pacote br.com.servlets chamado EnviaEmailServlet e digite o código abaixo:

package br.com.servlets;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.mail.Email;

@WebServlet("/EnviaEmailServlet")
public class EnviaEmailServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public EnviaEmailServlet() {
super();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/*
* Recupera os dados da página html
*/
String remetente = request.getParameter("remetente");
String destinatario = request.getParameter("destinatario");
String assunto = request.getParameter("assunto");
String mensagem = request.getParameter("mensagem");

//Chama o método que envia email
Email.enviaEmail(remetente, destinatario, assunto, mensagem);
}

}

O Servlet acima apenas chama o nosso método de enviar email com os dados passados pela página email.html.

Pronto. Agora é só executar a sua aplicação e abrir a página email.html digitando http://localhost:8080/javamail/email.html.

Basta preencher os campos e clicar no botão enviar.

Bom é isso.

Até o próximo post.

31 ideias sobre “Tutorial JavaMail

      1. OSCAR

        Bruno só não consigo saber o porque de não ter referencia a esta anotação: @WebServlet(“/EnviaEmailServlet”) sabes como ajudar?
        Das opções só tenho @WebService.

        Responder
    1. brunorota Autor do post

      Bom dia Thiago

      Que bom que gostou do blog.

      Bom tem 2 simulados gratuitos bem bacana, é o Inquistion e o ExamLabs(Esse muitoo mais dificil que a prova).

      Não sei se você comprou o livro SCJP 6 da kathy sierra, nele vem um simulado bem bacana também.

      Caso você queira gastar uma graninha hehe, o Whizlabs é muito bom, e uma semana antes da prova, eu aconselho você fazer o simulado Test Killer, pois ele é bem parecido com a prova, porém esse não é gratuito.

      Os gratuitos é só procurar no google ou 4shared que você deve achar, eu não tenho mais eles no pc.

      Espero ter ajudado.

      Até +

      Responder
    1. brunorota Autor do post

      Bom dia Evaldo.

      Então, utilizando o JBoss vc não precisa configurar lib nenhuma, se for o caso de conseguir instalar o jboss no eclipse e configurar um projeto com o jboss, tem outro post que mostra como fazer isso.

      Até +.

      Responder
  1. Jean Carlos

    Bruno, boa tarde.

    Estou ainda em aprendizado na área de desenvolvimento e gostaria de uma ajuda:

    Estou usando o servidor Tomcat, então o que fiz, já foi colocar os “.jar” do “mail” na minha pasta lib.

    Fiz também todo os procedimentos corretos e o código está igual ao seu (estou usando também o gmail como teste, mas sei que posso pegar as informações de outro servidor de e-mail para fazer tal processo.)
    Mas, não funcionou.

    O que posso fazer pra realizar outros testes?
    Não enviou e-mail algum.

    No mais, estou entendo o conceito do java mail e fazendo mais alguns testes deve ser possível usar da forma como preciso.

    Responder
    1. brunorota Autor do post

      Jean, no caso eu teria que testar com o tomcat aqui pra ver se tem algum problema com o código que eu fiz, creio eu que não tenha, as vezes pode ser a versão do javamail que você colocou, tudo isso pode influenciar.

      Eu conheci uma api pra enviar email da apache, que facilita nossa vida para enviar email.

      Eu criei um post, de uma olhada http://www.brunorota.com.br/blog/tutorial-commons-email/

      Valeww

      Responder
  2. Ivoney

    Bruno, primeiramente parabéns pelo tutorial que está funcionando certinho. Mas meu ´

    problema é que tenho um formulário de contato (Nome, Email, Assunto e Messagem) e no

    lugar do “DE” no caso remetente quero que a pessoa entre apenas com o nome dele, o Email

    seje o Email do usuário. Tem alguma idéia como adaptar isso a esse seu modelo ou tenho que

    tentar outras formas.

    Obrigado e parabéns pelo BLOG e sucessos..

    Responder
    1. brunorota Autor do post

      Opa Ivoney, obrigado.

      Então, não entendi a sua dúvida, no lugar do remetente você deseja que apenas apareça o nome da pessoa em vez do email?

      Abraços

      Responder
  3. Ivoney

    Olá Bruno, bem isso. Idêntico a esse formulário de contato na qual estou enviando pra você.

    Seu exemplo esta funcionando direitinho. Mas quando vou enviar ele funciona como se fosse

    eu tivesse enviando o email pra mim mesmo, entendeu ??? Obrigado

    Abraços

    Responder
    1. brunorota Autor do post

      Entendi, então Ivoney, eu não me lembro de ter feito algo do tipo, talvez não seja possível no Remetente você setar o email do usuário, tem que pesquisar, o que nós fazemos bastante é no titulo, ou no corpo do email, setar os dados que o contato escreveu.
      Caso encontre o que você precisa, compartilhe conosco =)

      Abraços

      Responder
    2. brunorota Autor do post

      realmente, creio eu que não é possível, pois se fosse poderia ocorrer muitas fraudes, porquê pense, eu poderia enviar email para pessoas através de email de outras pessoas, não faz sentido. O problema de você enviar email pra você mesmo, é que normalmente o email que você configura para enviar, não é o mesmo que você configura para receber, então não fica esse “problema” de enviar email para você mesmo.

      Responder
  4. Ivoney

    Tudo bem Bruno, desde já agradeço pela sua disponibilidade e realmente esse método

    poderia sim ocorrer fraudes. Vou tentar outros métodos e assim que consiga postarei também

    pra ajudar outros colegas profissionais.

    Abraços e Sucessos !!!

    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *