API Java Mail - Usando o GMailL

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

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.

1 curtida

Valeu Gabriel.

Muito bom o material.

Coloca o código entre as tags “CODE”, pois fica mais legível.

Um grande abraço e valeu pela ajuda.

Obrigado gelo_sp…

Ja foi alterado…

Abraco a todos…

Caramba, muito bom Gabriel! Parabéns!

Eu ainda não testei a sua classe mas irei faze-lo o mais breve possível.

É de atitures como essa que a comunidade Java precisa!

Parabéns novamente e continue assim!

Abraços!

[quote=TiagoTC]Caramba, muito bom Gabriel! Parabéns!

Eu ainda não testei a sua classe mas irei faze-lo o mais breve possível.

É de atitures como essa que a comunidade Java precisa!

Parabéns novamente e continue assim!

Abraços!

[/quote]

Agora que estou obtendo um nivel maior de programcao em JAVA, sempre que possivel estarei postando Topicos com as maiores especificacoes possiveis para que o entendimento seja completo.

Obrigado!

Abraco a todos.

Acabei de testar a sua classe. Funcionou perfeitamente! :smiley:

Abraços!

Muito bom…

Parabéns pelo Post

:smiley:

Otimo topico!!!Tive dificuldade uma vez de enviar emails do yahoo utilizando o javamail,mas acho que o yahoo barra…
Mas do gmail funfou certinho!!! :slight_smile:

Muito obrigado!!
Iniciativas assim nos mostram a importância e o valor desse fórum

existe algum servidor por aí que nao precise de autenticação? só para efeitos de testes.

opa, vlw mesmo brother !!!

brother, tentei criar um exemplo pra testar sua aplicação, e estou apanhando.
a classe SendMail é igual a q está nessa página

index.jsp

[code]<%@ page language=“java” contentType=“text/htm”
pageEncoding=“ISO-8859-1”
import=“meupacote.SendMail”
%>

Enviando meu primeiro E-mail com Gmail <% SendMail sm = new SendMail();

sm.sendMail("katatall@gmail.com","cristianonasciment@gmail.com",“Email Automático”,“Mensagem do email”);
%>

A mensagem foi enviada com sucesso

[/code]

erro:

[code]HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 20 in the jsp file: /index.jsp
The constructor SendMail() is not visible
17:
18:
19: <%
20: SendMail sm = new SendMail();
21:
22:
23: sm.sendMail("katatall@gmail.com","cristianonasciment@gmail.com",“Email Automático”,“chaaaaaaaaaaaaaama”);

Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.[/code]

gewton

nao conheco muito sobre servidores, mas creio que hoje todos usem autenticacao…

cristianonasciment

voce ta dando um import da classe SendMail na sua pagina .JSP?

se nao tiver deve ser isso o erro…
aguardo uma resposta

Tenti rodar o exemplo mas da pau…
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;

Mudei para o meu usuario e senha do gmail mas não funciona…

O que seria???

Tudo bem estevanbc?

o e-mail de origem é do gmail? e consequentemente o mesmo que voce colocou a senha e usuario??
esse erro nao vi ainda por aqui nao…

ontem teve uma amiga do forum que estava com problemas porque a conexao dela utilizava proxy…

qualquer coisa so postar…
ate

Valew cara, vou dar uma olhada

Explendido! :smiley: Funcionou de primeira,parabéns pela iniciativa :wink:

Agradeço a todos…

qualquer dúvida só postar que tentarei ajudar.

Boa notie para todos.

[quote=estevanbc]Tenti rodar o exemplo mas da pau…
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;

Mudei para o meu usuario e senha do gmail mas não funciona…

O que seria???[/quote]

Testa na porta 587.

smtp.uol.com.br (acho que na porta 25 mesmo)