Pular para o conteúdo

Enviando emails com autenticação SMTP

Olá!

Para enviar um email Java Mail com autenticação no servidor smtp siga os passos.

É preciso um classe que extenda

javax.mail.Authenticator

é nela onde será informado o usuário e a senha do servidor smtp.

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class Autenticacao extends Authenticator {
  protected PasswordAuthentication
  			getPasswordAuthentication() {

  System.out.println("Autenticando...");
  return new PasswordAuthentication("usuario","senha");
  }
}

Dica: as vezes é necessário informar ao servidor o usuário “completo”, por exemplo, jose@soares.com.br ao invés de somente jose.
Abaixo está a classe que envia o email.

 import java.util.Properties;
 import javax.mail.Message;
 import javax.mail.MessagingException;
 import javax.mail.Session;
 import javax.mail.Transport;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeBodyPart;
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMultipart;

public class EnviaEmail {

  private static Session session = null;
  private static final String contentType = "text/html";

  private static String servidor = "localhost";

 /*
  * Método para enviar email em html
  */

  public void enviarEmailHtml(String assunto,
  			String mensagem, String de)  throws MessagingException {

  String emailPara = "Roberto <roberto@xxxx.xxx.xx>";
  Properties props = new Properties();
  props.put("mail.smtp.host", servidor);
  props.put("mail.smtp.auth", "true");
  session = Session.getDefaultInstance(props, new Autenticacao());

  Message message = new MimeMessage(session);
  InternetAddress endMail = new InternetAddress(emailPara);
  message.addRecipient(Message.RecipientType.TO, endMail);

  InternetAddress fromEmail = new InternetAddress(de);

  message.setFrom(fromEmail);

  message.setSubject(assunto);

  MimeMultipart mpRoot = new MimeMultipart("mixed");
  MimeMultipart mpContent = new MimeMultipart("alternative");

  MimeBodyPart mbp1 = new MimeBodyPart();
  mbp1.setContent(mensagem.toString(), contentType);
  mpContent.addBodyPart(mbp1);

  MimeBodyPart contentPartRoot = new MimeBodyPart();

  contentPartRoot.setContent(mpContent);
  mpRoot.addBodyPart(contentPartRoot);
  message.setContent(mpRoot);
  message.saveChanges();
  System.out.println("Conectado...");
  Transport.send(message);
  System.out.println("Enviado.");
  }
}

Os comandos que diferenciam o envio autenticado são:

// informa que é necessário fazer a autenticação
props.put("mail.smtp.auth", "true");

// Onde geralmente se vê passando null
//agora é passado um Authenticator
Session.getDefaultInstance(props, new Autenticacao());

Update – 01/09/2008
Para enviar um email usando o servidor do GMail use o método abaixo:

public void enviarEmail(String emailDest, String nomeDest,
			String emailRemet, String nomeRemet,
                        String assunto, String corpo)
			throws Exception {

		Properties prop = System.getProperties();
		prop.put("mail.smtp.host", "smtp.gmail.com");
		prop.put("mail.smtp.auth", "true");
		prop.put("mail.debug", "true");
		prop.put("mail.smtp.debug", "true");
		prop.put("mail.mime.charset", "ISO-8859-1");
		prop.put("mail.smtp.port", "465");
		prop.put("mail.smtp.starttls.enable", "true");
		prop.put("mail.smtp.socketFactory.port", "465");
		prop.put("mail.smtp.socketFactory.fallback", "false");
		prop.put("mail.smtp.socketFactory.class",
				"javax.net.ssl.SSLSocketFactory");

		Authenticator auth = new Authenticator() {
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("email@gmail.com",
						"Senha"); // Senha do gmail
			}
		};

		Session session = Session.getInstance(prop, 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);
	}

Até mais,
Roberto

Marcações:

Deixe um comentário

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