quarta-feira, 16 de março de 2011

Enviando e-mail de uma conta externa

Olá!

Nesse post vou mostrar como enviar e-mail utilizando a biblioteca JavaMail através de uma conta externa (nesse caso utilizei o gmail).

Segue o código:

import java.util.Date;
import java.util.Properties;

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

public class EnviarEMail {

 public static void main(String[] args) {
  
  Properties p = new Properties();  
  p.put("mail.host", "smtp.gmail.com"); //CONFIGURAÇÃO DO GMAIL
  p.put("mail.smtp.starttls.enable","true");
  p.put("mail.smtp.port", "587");
  p.put("mail.smtp.auth", "true");

  Authenticator auth = new Authenticator() {
   
    public PasswordAuthentication getPasswordAuthentication() {
     return new PasswordAuthentication("meu_email@gmail.com", "minha_senha");
    }};

   try{
    Session session = Session.getInstance(p, auth);  
    MimeMessage msg = new MimeMessage(session);
 
    //DEFINE O ENDEREÇO DO REMETENTE
    InternetAddress[] de = {new InternetAddress("remetente@mail.com")};
 
    msg.setFrom(de[0]);
    msg.setReplyTo(de); //INFORMA O ENDEREÇO DE RESPOSTA
  
    msg.setRecipient(Message.RecipientType.TO, new InternetAddress("destinatario_1@mail.com"));
 
    //DEFINE A DATA DO ENVIO
    msg.setSentDate(new Date());
    msg.setSubject("Assunto da mensagem");
    
    String mensagem = "Aqui vem o conteúdo do e-mail";
    
    msg.setText(mensagem);

    //DEFINE A CODIFICAÇÃO DO TEXTO DA MENSAGEM. NESSE CASO HTML.
    msg.setContent(mensagem, "text/html");
 
    Transport.send(msg);
    
    System.out.println("Mensagem enviada com sucesso!");
    
  }catch (Exception e) {
   e.printStackTrace();
  }
 }
}

Para enviar o e-mail para mais de uma pessoa, basta adicionar um destinatário conforme segue:
//ENVIA COMO UMA CÓPIA
msg.addRecipient(Message.RecipientType.CC, new InternetAddress("destinatario_2@mail.com"));
//ENVIA COMO UMA CÓPIA OCULTA
msg.addRecipient(Message.RecipientType.BCC, new InternetAddress("destinatario_3@mail.com"));

Também é possível enviar um e-mail para várias pessoas de uma só vez:
msg.setRecipients(Message.RecipientType.BCC, new InternetAddress[]{new InternetAddress("destinatario_1@mail.com"), 
 new InternetAddress("destinatario_2@mail.com"), new InternetAddress("destinatario_3@mail.com")});

Isso fará com que os destinatários 1, 2 e 3 recebam o mesmo e-mail.
Notem que o RecipientType está definido como BCC (Cópia oculta). Isso significa que nenhum destinatário poderá visualizar a lista de destinatário.

Essa dica me ajudou muito. Espero que ajude mais pessoas.

Abraços!!!

Nenhum comentário:

Postar um comentário