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.
Qualque dúvida, crítica ou sugestão, fico à disposição.
10 comentários:
Olá Jabes Felipe meu nome é Marcos e estou fazendo aqui minha aplicação tmb com JMail eme deparei com o seu poste muito bom, e melhor ainda funciona, pois tem muita coisa na net q não funciona. Enfim, mas como eu posso anexar uma imagem da minha escolha com JFileChooser? Eu consigo pegar o caminho absoluto da imagem e jogar em um JTextFild ou JLabel, mas a imagem não vai. O bom e o certo era poder anexar qualquer imagem e arquivo de qualquer lugar do computador, vc sabe como ficaria isso nessa aplicação? A minha aplicação ta aqui no 4shared tmb http://www.4shared.com/file/qrgE7LFq/gmail_desktop.html com o titulo de Gmail Desktop.
Olá Marcos, respondi essa dúvida por email!
Jabes muito obrigado pela atenção.... Eu vi o email valeu, qualquer coisa se eu puder ajudar tmb só falar...ok?
Olá Jabes, programo um pouquinho de java e refiz exatamente o que postou e tive problemas
Segue:
javax.mail.AuthenticationFailedException: failed to connect, no password specified?
at javax.mail.Service.connect(Service.java:329)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at sendemail.SendEmail.send(SendEmail.java:99)
at sendemail.SendEmail.main(SendEmail.java:112)
Ele parou exatamente na linha do Transport.send(mailMessage);
gera uma exception
Sabe o que possa ser?
Desde já agradeço
Ok Philipe, vi seu e-mail, que bom que conseguir resolver!!!
Olá Jabes, agradeço sua colaboração postando esse código, precisei pesquisar por referencias e me ajudou bastante, excelente trabalho meu amigo - Parabéns...
Seria interessante que respondesse para todos, pois a dúvida de uma pessoa pode ser a de outras.
Bom dia Jabes Felipe, tenho a mesma duvida que o Marcos será que poderia me auxiliar?
Como eu posso anexar uma imagem da minha escolha com JFileChooser? Eu consigo pegar o caminho absoluto da imagem e jogar em um JTextFild ou JLabel, mas a imagem não vai. O bom e o certo era poder anexar qualquer imagem e arquivo de qualquer lugar do computador
poderia me enviar esse código por email? não estou conseguindo baixar.
email: receberemail02@gmail.com
Postar um comentário