Enviando e-mail usando GMail

Nesse post eu irei criar uma classe que envia e-mail HTML de um servidor com autenticação usando SSL. Como exemplo, utilizaremos uma conta do GMail.

Primeiro passo é criar a conta do GMail (ou usar a sua). Acesse o site: http://www.gmail.com e clique em Criar uma conta (Create an account). Siga os passos e anote a senha. Faça o download da API do Java Mail no site: http://www.oracle.com/technetwork/java/index-138643.html e descompacte-a.

Crie um novo projeto, coloque no classpath (Build Path no Eclipse e Library no Netbeans) o arquivo mail.jar que está dentro do pacote que você fez download.

package br.com.thiagovespa.email.utils;

import java.util.Properties;

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

public class SSLMailSender {

	public static void sendMail(String host, int port, final String username,
			final String password, String from, String to, String subject,
			String content) throws AddressException, MessagingException {

		Properties props = new Properties();
		props.put("mail.smtp.host", host);
		props.put("mail.smtp.socketFactory.port", port);
		props.put("mail.smtp.socketFactory.class",
				"javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.port", port);

		Session session = Session.getDefaultInstance(props,
				new javax.mail.Authenticator() {
					@Override
					protected PasswordAuthentication getPasswordAuthentication() {
						return new PasswordAuthentication(username, password);
					}
				});

		Message message = new MimeMessage(session);
		message.setFrom(new InternetAddress(from));
		message.setRecipients(Message.RecipientType.TO,
				InternetAddress.parse(to));
		message.setSubject(subject);
		message.setContent(content, "text/html");

		Transport.send(message);

	}

	public static void main(String[] args) {
		try {
			sendMail("smtp.gmail.com", 465, "usuario@gmail.com",
					"senha", "usuario@gmail.com",
					"destino@gmail.com", "Teste",
					"<html><body><b>Conteúdo</b></body></html>");
			System.out.println("E-mail enviado!");
		} catch (AddressException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

Na linhas 20-26 são criadas as propriedades para a criação da sessão de e-mail a ser utilizada (linha 28). É utilizado o método getDefaultInstance para criar a sessão, em alguns casos, caso não funcione utilize o getInstance ao invés do getDefaultInstance.

A sessão de e-mail é criada utilizando autenticação (linha 32). Da linha 36 a 41 construímos a mensagem e na linha 43 enviamos. Ainda está faltando o tratamento de erro, mas para enviar o e-mail é só executar o código alterando das linhas 49 a 52 com os seus dados.

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6