API Java Mail - Usando GMail
Devido eu ficar dias tentando enviar um e-mail da minha conta gmail para qualquer outra conta existente, e apos ter conseguido com muito custo. Resolvi postar aqui como enviar email a partir de uma conta GMAIL.
Novo Tópico: API Commons Mail - Utilizando Gmail Link: http://www.guj.com.br/posts/list/104645.java
O Tópico sobre a API Java Mail será grande mas com os minimos detalhes para que possa ser enviado o Email desejado.
Parte 1 - Download API JavaMail
- Primeiro acesse o site http://java.sun.com/products/javamail/downloads/index.html
- Faça o download da versão JavaMail 1.4.1
- Abra o arquivo e selecione o arquivo mail.jar e a pasta lib e coloque em qualquer lugar que desejar.De preferencia em algum lugar relacionado ao projeto em desenvolvimento. O resto são exemplo e etc.
Parte 2 - Setando o classpath
- como uso o eclipse, eu apenas adiciono a API JavaMail no meu Path do projeto que estou usando, caso quem não usar o eclipse procure uma forma de setar o classpath, porque o resto do tutorial é aplicavel a todos os tipos de ferramenta.
- clique com o botão direito e vá na opção Build Path e depois em Configute Build Path….
- abrira uma janela, e nela vá na aba Libraries e depois clique no botao Add External JARs….
- vá aonde esta o arquivo mail.jar e adicione ele. Pronto, API JavaMail adicionada ao Path.
Parte 3 - Classe para enviar E-Mail
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class SendMail {
private String mailSMTPServer;
private String mailSMTPServerPort;
/*
* quando instanciar um Objeto ja sera atribuido o servidor SMTP do GMAIL
* e a porta usada por ele
*/
SendMail() { //Para o GMAIL
mailSMTPServer = "smtp.gmail.com";
mailSMTPServerPort = "465";
}
/*
* caso queira mudar o servidor e a porta, so enviar para o contrutor
* os valor como string
*/
SendMail(String mailSMTPServer, String mailSMTPServerPort) { //Para outro Servidor
this.mailSMTPServer = mailSMTPServer;
this.mailSMTPServerPort = mailSMTPServerPort;
}
public void sendMail(String from, String to, String subject, String message) {
Properties props = new Properties();
// quem estiver utilizando um SERVIDOR PROXY descomente essa parte e atribua as propriedades do SERVIDOR PROXY utilizado
/*
props.setProperty("proxySet","true");
props.setProperty("socksProxyHost","192.168.155.1"); // IP do Servidor Proxy
props.setProperty("socksProxyPort","1080"); // Porta do servidor Proxy
*/
props.put("mail.transport.protocol", "smtp"); //define protocolo de envio como SMTP
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.host", mailSMTPServer); //server SMTP do GMAIL
props.put("mail.smtp.auth", "true"); //ativa autenticacao
props.put("mail.smtp.user", from); //usuario ou seja, a conta que esta enviando o email (tem que ser do GMAIL)
props.put("mail.debug", "true");
props.put("mail.smtp.port", mailSMTPServerPort); //porta
props.put("mail.smtp.socketFactory.port", mailSMTPServerPort); //mesma porta para o socket
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
//Cria um autenticador que sera usado a seguir
SimpleAuth auth = null;
auth = new SimpleAuth ("seuusuarioparalogin","suasenhaparalogin");
//Session - objeto que ira realizar a conexão com o servidor
/*Como há necessidade de autenticação é criada uma autenticacao que
* é responsavel por solicitar e retornar o usuário e senha para
* autenticação */
Session session = Session.getDefaultInstance(props, auth);
session.setDebug(true); //Habilita o LOG das ações executadas durante o envio do email
//Objeto que contém a mensagem
Message msg = new MimeMessage(session);
try {
//Setando o destinatário
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
//Setando a origem do email
msg.setFrom(new InternetAddress(from));
//Setando o assunto
msg.setSubject(subject);
//Setando o conteúdo/corpo do email
msg.setContent(message,"text/plain");
} catch (Exception e) {
System.out.println(">> Erro: Completar Mensagem");
e.printStackTrace();
}
//Objeto encarregado de enviar os dados para o email
Transport tr;
try {
tr = session.getTransport("smtp"); //define smtp para transporte
/*
* 1 - define o servidor smtp
* 2 - seu nome de usuario do gmail
* 3 - sua senha do gmail
*/
tr.connect(mailSMTPServer, "seuusuarioparalogin", "suasenhaparalogin");
msg.saveChanges(); // don't forget this
//envio da mensagem
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(">> Erro: Envio Mensagem");
e.printStackTrace();
}
}
}
//clase que retorna uma autenticacao para ser enviada e verificada pelo servidor smtp
class SimpleAuth extends Authenticator {
public String username = null;
public String password = null;
public SimpleAuth(String user, String pwd) {
username = user;
password = pwd;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication (username,password);
}
}
Parte 4 - Usando a Classe
- Apenas cire um objeto da classe SendMail. Podendo passar para o contrutor o servidor que quer usar, ou o padrao ja definido na classe(RECOMENDADO)
- 1 Opcao:
SendMail sm = new SendMail(“smtp.gmail.com”,“465”);
sm.sendMail(origem,destino,assunto,mensagem);
- 2 Opcao:
SendMail sm = new SendMail();
sm.sendMail(origem,destino,assunto,mensagem);
Conclusão:
Creio que coloquei tudo de importante aqui, caso tenha esquecido algo e tenha ocorrido algum erro na classe de voces. Me mande uma mensagem que estarei respondendo o mais breve possivel.
Observação:
- Eu fiz uma peneira na internet pois o trabalho foi duro ate conseguir enviar o email. Caso tenha alguma parte de codigo de outra pessoa aqui, agradeco pois foi muito util.
- Quem tiver algum material útil a ser colocado neste tópico só sugerir.
Obrigado a todos e espero que seja util.