sexta-feira, 26 de agosto de 2011

Enviar e-mail com anexo em Java usando o gmail.

Olá Pessoal,

Depois de um longo periodo sem postar, neste post, vou mostrar como mandar email com anexo em java, e para testar o nosso envio de email, vamos usar o gmail. Neste exemplo será usado a API javax.mail, teremos apenas uma classe que irá mandar uma imagem em anexo usando o protocolo do gmail.
No final do post, o projeto estará disponível para download.

package com.blogspot.jabesfelipe.email;

import java.io.InputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;
import javax.mail.util.ByteArrayDataSource;

/**
* Classe para enviar email em anexo usando o Gmail.
*
* @author jabes.cunha
*
*/
public class EnviaEmail {
public static void main(String[] args) {
new EnviaEmail().enviar();
}

public void enviar() {
try {

//usuario e senha do seu gmail
final String usuario = "jabesfelipe@gmail.com";
final String senha = "mandioca";

//config. do gmail
Properties mailProps = new Properties();
mailProps.put("mail.transport.protocol", "smtp");
mailProps.put("mail.smtp.starttls.enable","true");
mailProps.put("mail.smtp.host", "smtp.gmail.com");
mailProps.put("mail.smtp.auth", "true");
mailProps.put("mail.smtp.user", usuario);
mailProps.put("mail.debug", "true");
mailProps.put("mail.smtp.port", "465");
mailProps.put("mail.smtp.socketFactory.port", "465");
mailProps.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
mailProps.put("mail.smtp.socketFactory.fallback", "false");

//eh necessario autenticar
Session mailSession = Session.getInstance(mailProps, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(usuario, senha);
}
});
mailSession.setDebug(false);

//config. da mensagem
Message mailMessage = new MimeMessage(mailSession);

//remetente
mailMessage.setFrom(new InternetAddress(usuario));

//destinatario
mailMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(usuario));

//mensagem que vai no corpo do email
MimeBodyPart mbpMensagem = new MimeBodyPart();
mbpMensagem.setText("Segue em anexo, imagem do novo focus hath.");

//partes do email
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbpMensagem);
//imagem que sera enviada em anexo, ta no mesmo diretorio da classe.
String imagem = "focusHath2011.jpg";
InputStream is = getClass().getResourceAsStream(imagem);

//setando o anexo
MimeBodyPart mbpAnexo = new MimeBodyPart();
mbpAnexo.setDataHandler(new DataHandler(new ByteArrayDataSource(is, "application/image")));
mbpAnexo.setFileName(imagem);
mp.addBodyPart(mbpAnexo);

//assunto do email
mailMessage.setSubject("Novo Focus Hath 2011");
//seleciona o conteudo
mailMessage.setContent(mp);

//envia o email
Transport.send(mailMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
}
EnviaEmail.java

A classe, está documentada, explicando os passos a passos, o e-mail que será enviado, ficará conforme imagem abaixo:

Para quem quiser baixar o projeto desenvolvido, clique aqui.
Qualque dúvida, crítica ou sugestão, fico à disposição.

Jabes Felipe RSS Feed Jabes Felipe