API Java Mail - Usando o GMailL

114 respostas
gabrielmassote

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.

114 Respostas

G

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.

gabrielmassote

Obrigado gelo_sp…

Ja foi alterado…

Abraco a todos…

T

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!

gabrielmassote

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!

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.

T

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

Abraços!

el_loko

Muito bom…

Parabéns pelo Post

:smiley:

B

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:

leonardogo

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

GJhames

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

cristianonasciment

opa, vlw mesmo brother !!!

cristianonasciment

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

<%@ page language="java" contentType="text/htm"
    pageEncoding="ISO-8859-1"
    import="meupacote.SendMail"
    %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Enviando meu primeiro E-mail com Gmail</title>
</head>
<body>
<%
SendMail sm = new SendMail();

sm.sendMail("[email removido]","[email removido]","Email Automático","Mensagem do email"); 
%>
<h1>A mensagem foi enviada com sucesso</h1>
</body>
</html>
erro:
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: </head>
18: <body>
19: <%
20: SendMail sm = new SendMail();
21: 
22:  
23:  sm.sendMail("[email removido]","[email removido]","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.
gabrielmassote

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

E

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???

gabrielmassote

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

E

Valew cara, vou dar uma olhada

L

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

gabrielmassote

Agradeço a todos…

qualquer dúvida só postar que tentarei ajudar.

Boa notie para todos.

renatocustodio

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???

Testa na porta 587.

renatocustodio

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

ftxavierrio

Olá, eu não conheço muito bem essas Mail API, alguém sabe o que eu preciso alterar pra enviar o email no formato html?

Valeu,

[]'s

claytoncastelli

Caso esteja usando proxy tente adicionar ao código:

props.setProperty(proxySet,true);

props.setProperty(socksProxyHost,192.168.155.1);

props.setProperty(socksProxyPort,1080);

Muito bom seu exemplo, no entanto eu esta com problema na execução por causa de proxy.

Isso resolveu meu problema.

gabrielmassote

Legal claytoncastelli…

vou adicionar na explicacao la em cima logo que tiver um tempo…
sempre que tiver algo novo vamos adicionando…

obrigado e abracos

claytoncastelli

Eu tb nao conheço muito sobre esse assunto.

Eu mudei um pouco o exemplo do nosso amigo, mais algumas coisa que achei na net, e consegui enviar arquivo para o meu e-mail.

package test.mail;

import java.io.File;

import java.util.Properties;
import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.activation.FileDataSource;

import javax.mail.Authenticator;

import javax.mail.BodyPart;

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;

public class AttachExample {

public static void main (String args[]) throws Exception

{
Properties props = new Properties(); 
 
  String from = "[email removido]"; 
  String to = "[email removido]";
  String filename = "bla.html";
// Get system properties

final String username = <a>"[email removido]</a>";

final String password = minhaSenha;
props.setProperty("proxySet","true");
  props.setProperty("socksProxyHost","192.168.155.1");
  props.setProperty("socksProxyPort","1080");

 props.put("mail.transport.protocol", "smtp"); //define protocolo de envio como SMTP  
  props.put("mail.smtp.starttls.enable","true");   
  props.put("mail.smtp.host", "smtp.gmail.com"); //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", "465"); //porta  
  props.put("mail.smtp.socketFactory.port", "465"); //mesma porta para o socket  
  props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");  
  props.put("mail.smtp.socketFactory.fallback", "false");      


  Session session = Session.getDefaultInstance(props, 
                       new Authenticator(){
                          protected PasswordAuthentication getPasswordAuthentication() {
                             return new PasswordAuthentication(username, password);
                          }});
// Define message

Message message = new MimeMessage(session);

message.setFrom(new InternetAddress(from));

message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

message.setSubject(Hello JavaMail Attachment);

// Create the message part

BodyPart messageBodyPart = new MimeBodyPart();

// Fill the message

messageBodyPart.setText(Heres the file);

// Create a Multipart

Multipart multipart = new MimeMultipart();

// Add part one

multipart.addBodyPart(messageBodyPart);

// // Part two is attachment // // Create second body part

messageBodyPart = new MimeBodyPart();

// Get the attachment

DataSource source = new FileDataSource(new File(src\file\ + filename));

// Set the data handler to the attachment

messageBodyPart.setDataHandler(new DataHandler(source));

// Set the filename

messageBodyPart.setFileName(filename);

// Add part two

multipart.addBodyPart(messageBodyPart);

// Put parts in message

message.setContent(multipart);

// Send the message

Transport.send(message);

}

}
renatocustodio

Uma boa alternatica é o uso da commons mail, do grupo Apache e que internamente usa a API do java mail, mas deixa as coisas ridicularmente mais fáceis.

http://commons.apache.org/email/

gabrielmassote

Tudo bem renatocustodio?

eu tentei usar a commons mail para enviar para o gmail, nao funfo nao…se alguem conseguir posta ai pq realmente é mto mais facil…

abraco a todos…

vou editar o topico em breve com as opcoes de proxy e arquivo

renatocustodio

Eu tinha em casa até um trabalho de faculdade que fiz usando commons mail que enviava um email e com um boleto feito com a jboleto em anexo para um email de uma pessoa qualquer cadastrada no banco. Depois quando eu estiver em casa eu posto o exemplo da classe que utilizei…

gabrielmassote

Ok…funcionando a gente cria um novo topoico…

pois mta gente quer utilizar e as vezes nao da certo…

claytoncastelli
SimpleEmail email = new SimpleEmail();
	
	try {
		email.setDebug(true);
		email.setHostName("smtp.gmail.com");
		email.setAuthentication("[email removido]","minhaSenha");			
		email.setSSL(true);
		email.addTo("[email removido]");
		email.setFrom("[email removido]");
		email.setSubject("Teste");
		email.setMsg("Bla...Bla");
		email.send();

	} catch (EmailException e) {

		System.out.println(e.getMessage());

	}

Isso foi o que eu precisei fazer para usar a API do jakarta commons.
Os jars que eu adicionei ao meu projeto foram:
javaMail: mail.jar
commons-email-1.1: commons-email-1.1.jar

Tudo funcionou.

Depois eu faço um exemplo com arquivo e mando aqui também, fica realmente mais fácil usando o jakarta-commons.

felipeguerra
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
  nested exception is:
	java.net.SocketException: Connection reset by peer: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
	at javax.mail.Service.connect(Service.java:275)
	at javax.mail.Service.connect(Service.java:156)
	at TesteEmail.sendMail(TesteEmail.java:91)
	at TesteEmail.main(TesteEmail.java:123)
Caused by: java.net.SocketException: Connection reset by peer: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
	at java.net.Socket.connect(Socket.java:516)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:549)
	at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
	... 5 more

Eu não consegui enviar, conforme o erro acima diz… :cry:

claytoncastelli

Blz Felipe!!

Primeiro me desculpe pois faltou falar um jar activation.

javaMail: mail.jar (http://java.sun.com/products/javamail/downloads/index.html)
commons-email-1.1: commons-email-1.1.jar (http://commons.apache.org/downloads/download_email.cgi)
activation: activation.jar (http://java.sun.com/javase/technologies/desktop/javabeans/jaf/downloads/index.html)

Esses foram os jars que eu usei para o exemplo.

Tenta fazer um teste usando o seu e-mail do gmail tanto como origem(from) como destino(to) ou seja por exemplo:

[email removido]

email.setAuthentication(<a>"[email removido]</a>",sua senha do gmail);

email.setSSL(true);

email.setFrom(<a>"[email removido]</a>");

email.addTo(<a>"[email removido]</a>");

[email removido] e apenas um exemplo, tem que ser seu e-mail válido no gmail.

Você também pode mudar a porta usando o método setSmtpPort(aPortNumber):

email.setSmtpPort(aPortNumber);

Qualquer coisa posta seu código ai para eu ver, ou um exemplo que retrate bem a maneira de como você montou.

Falou!!

felipeguerra

Estou ‘debaixo’ de um proxy…deve ser isso!

claytoncastelli

Também estou usando proxy, fiz um teste antes de mandar essa resposta para você, e funcionou da mesma forma.

Caso eu descubra como evitar esse erro posto blz.

gabrielmassote

BLz pessoal?

to voltando de ferias e ja vou atualizar o topico com as seguintes informacoes:

  • utilizando proxy
  • adicionando arquivo (anexos)

logo em seguida vou fazer outro topico para o envio de emails utilizando a commons e coloco como autores todos os que colaboraram com o exemplo.

Abraco a todos.

claytoncastelli

[color=blue] Enviando arquivos em formato HTML usando uma URL [/color]

[color=red] Esse exemplo foi tirado da pagina do Apache referente ao Jakarta Commons, apenas alterei para funcionar na minha maquina. [/color]

exemplo original

// Create the email message
		HtmlEmail email = new HtmlEmail();
		
		try {
			
			email.setHostName("smtp.gmail.com");
			
			email.setAuthentication("[email removido]","minhaSenha");
			email.setSSL(true);
			
			email.setFrom("[email removido]");
			email.addTo("[email removido]");

			email.setSubject("Test email with inline image");

			// embed the image and get the content id
			URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
			String cid = email.embed(url, "Apache logo");

			// set the html message
			email.setHtmlMsg("<html>The apache logo - <img src=\"cid:" + cid
					+ "\"></html>");

			// set the alternative message
			email.setTextMsg("Your email client does not support HTML messages");

			// send the email
			email.send();

		} catch (EmailException e) {
			
			System.out.println(e.getMessage());
	
		} catch (MalformedURLException e) {
			
			System.out.println(e.getMessage());
			
		}
claytoncastelli

[color=blue] Enviando arquivos em formato HTML usando um arquivo local[/color]

[color=red] Esse exemplo foi tirado da pagina do Apache referente ao Jakarta Commons, apenas alterei para funcionar na minha maquina. [/color]

exemplo original

// Create the email message
		HtmlEmail email = new HtmlEmail();
		
		try {
			
			email.setHostName("smtp.gmail.com");
			
			email.setAuthentication("[email removido]","minhasenha");
			email.setSSL(true);
			
			email.setFrom("[email removido]");
			email.addTo("[email removido]");

			email.setSubject("Teste usando arquivo local");

			// embed the image and get the content id
			
			File file = new File("C:/Documents and Settings/Desktop/images/logo/logo.png");			
			
			String cid = email.embed(file, "Apache logo using local file");

			// set the html message
			email.setHtmlMsg("<html>The apache logo - <img src=\"cid:" + cid + "\"></html>");

			// set the alternative message
			email.setTextMsg("Your email client does not support HTML messages");

			// send the email
			email.send();

		} catch (EmailException e) {
			
			System.out.println(e.getMessage());
	
		}
hopster

cara, muito bom teu tutorial.

porém está dando o erro:

javax.mail.MessagingException: Could not connect to SMTP host: <a href="http://smtp.gmail.com">smtp.gmail.com</a>, port: 465;

nested exception is:

java.net.ConnectException: Connection timed out: connect

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391)

at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)

at javax.mail.Service.connect(Service.java:288)

at javax.mail.Service.connect(Service.java:169)

at teste.SendMail.sendMail(SendMail.java:87)

at teste.Main.main(Main.java:20)

Caused by: java.net.ConnectException: Connection timed out: connect

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)

at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)

at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

at java.net.Socket.connect(Socket.java:519)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550)

at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)

at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)

at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163)

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)

… 5 more

será que é do proxy? alguém tem alguma idéia?

gabrielmassote

voce ta colocando sua senha e seu login certo e na parte que tem que colocar?

hopster

sim sim

gabrielmassote

os problemas que eu tive que davam esse erro era quando eu deixava de colocar informacoes sobre login certo e quando minha conexao estava ruim. Entao pode ser proxy, claro que se voce estiver utilizando.

Se estiver utilizando de uma olhada em mensagens anteriores que tem explicando como faz…vou atualizar o exemplo para suportar proxy…

abracao…se der certo comunica a gente…

hopster

no meu debug aparece…

“DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 465, isSSL false”

isSSL não tinha que ser true?

gabrielmassote

é dizem que sim…

mas aqui ta como false e cabei de testar e enviou…

tenta usar o exemplo de commons do pessoal…eu particularmente acho mais facil…so que na epoca nao tinha conseguido mandar…
assim que sobrar um tempo vou criar outro topico para envio de email pela api commons…

desculpe nao resolver seu problema…

renatocustodio

Eu sempre setei o ssl como true para entrar no GMAIL. E geralmente uso outra porta e não a 465. Acho que era a 587. Em um artigo que eu havia lido eles disseram que pode ser uma ou outra…

hopster

tranquilo…
o commons tb uso, e está dando o mesmo erro… tenho q ver mesmo

hopster

renatocustodio,

como tu setou o ssl?

hopster
props.put("mail.smtp.ssl", "true");

tentei assim, mas continua false

claytoncastelli

Achei um link com alguns problemas que poderiam estar causando erro na porta 465.

O mais provavel pelo que li deve ser firewall.

problemas relacionados

hopster

entendi… realmente… eu tentei um telnet na porta 465 e não ta dando… vou tentar fora desta rede…

renatocustodio

hopster:
renatocustodio,

como tu setou o ssl?


No commons algo como: email.setSSL(true);

Onde email é uma varíável do tipo simpleMail, HtmlMail, etc…

hopster

ok… deu certo em outra rede… deve ser o firewall da empresa mesmo…

gabrielmassote

Tudo bem Pessoal?

Como autor do tópico foram feitas duas atualizações:

Abraço a todos e bom proveito.

L

A porta 465 é somente para o abençoado outlook.
Para utilizar o gmail com outros clientes de email, basta utilizar a porta 587 TSL.

This Works Fine!
.NET Forever!

gabrielmassote

como é apenas para o outlook se funciona para esta aplicacao e perfeitamente?

abraços

marthian_2

Dá erro:

DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 587, isSSL false

Erro: Envio Mensagem

javax.mail.MessagingException: Unknown SMTP host: <a href="http://smtp.gmail.com">smtp.gmail.com</a>;

nested exception is:

java.net.UnknownHostException: <a href="http://smtp.gmail.com">smtp.gmail.com</a>

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1389)

at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)

at javax.mail.Service.connect(Service.java:288)

at javax.mail.Service.connect(Service.java:169)

at sendEmail.sendMail(sendEmail.java:96)

at Main.main(Main.java:6)

Caused by: java.net.UnknownHostException: <a href="http://smtp.gmail.com">smtp.gmail.com</a>

at java.net.PlainSocketImpl.connect(Unknown Source)

at java.net.SocksSocketImpl.connect(Unknown Source)

at java.net.Socket.connect(Unknown Source)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)

at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source)

at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)

at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163)

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)

… 5 more

Já usei a porta 465 tb…

Obs.: Uso o proxy AnalogX.

props.setProperty(proxySet,true);

props.setProperty(socksProxyHost,192.168.0.101);

props.setProperty(socksProxyPort,6588);

É a configuração que uso no IE pra me conectar à internet.

O

Olá a todos.

Eu encontrei em um fórum sa Sun de como enviar e-mail através do Gmail. Esse código funciona independente se vc está usando proxy ou não.

O link é esse: http://forums.sun.com/thread.jspa?threadID=617974.

Baseado nesse link, eu criei a seguinte classe:

import java.util.Properties;
import java.util.Properties;
import javax.mail.Authenticator;
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 GmailMailer {

	// Host do Gmail
	private String SMTP_HOST_NAME;

	// Login do usuário
	private String SMTP_AUTH_USER;

	// Senha do usuário
	private String SMTP_AUTH_PWD;

	// E-mail do remetente
	private String emailFromAddress;

	// Título do e-mail
	private String emailSubjectTxt;

	// Conteúdo do e-mail
	private String emailMsgTxt;

	// E-mails dos destinatários
	private String[] emailList;

	public GmailMailer() {
		SMTP_HOST_NAME = "gmail-smtp.l.google.com";
		SMTP_AUTH_USER = "[email removido]";
		SMTP_AUTH_PWD = "xxxx";
	}

	public void sendEmail(String fromAddress, String[] toAddress, String subjectTxt, String messageTxt) throws Exception{
		emailFromAddress = fromAddress;
		emailList = toAddress;
		emailSubjectTxt = subjectTxt;
		emailMsgTxt = messageTxt;

		boolean debug = false;
		java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

		// Configurando o endereço SMTP do host 
		Properties props = new Properties();
		props.put("mail.transport.protocol", "smtp");
		props.put("mail.smtp.starttls.enable", "true");
		props.put("mail.smtp.host", SMTP_HOST_NAME);
		props.put("mail.smtp.auth", "true");

		// Caso o e-mail precise de autenticação
		Authenticator auth = new SMTPAuthenticator();
		Session session = Session.getDefaultInstance(props, auth);

		session.setDebug(debug);

		// Criando a mensagem
		Message msg = new MimeMessage(session);

		// Adicionando o e-mail do remetente
		InternetAddress addressFrom = new InternetAddress(emailFromAddress);
		msg.setFrom(addressFrom);

		// Adicionando os e-mails dos destinatários
		InternetAddress[] addressTo = new InternetAddress[emailList.length];
		for (int i = 0; i < emailList.length; i++) {
			addressTo[i] = new InternetAddress(emailList[i]);
		}
		msg.setRecipients(Message.RecipientType.TO, addressTo);

		// Adicionando o título do e-mail
		msg.setSubject(emailSubjectTxt);
		
		// Adicionando o conteúdo do e-mail
		msg.setContent(emailMsgTxt, "text/plain");
		Transport.send(msg);
	}

	/**
	 * Autentica o usuário quando o servidor SMTP requisita
	 */
	private class SMTPAuthenticator extends javax.mail.Authenticator {

		public PasswordAuthentication getPasswordAuthentication() {
			String username = SMTP_AUTH_USER;
			String password = SMTP_AUTH_PWD;
			return new PasswordAuthentication(username, password);
		}
	}

}

Para executar ele, eu criei outra classe abaixo:

public class TesteGmailMailer {

	public static void main(String[] args) {
		GmailMailer mail = new GmailMailer();
		String[] listaEmails = {"[email removido]","[email removido]"};
		try {
			mail.sendEmail("[email removido]",
							listaEmails, 
						   "Teste de envio de email", 
						   "Isso é um teste");
			System.out.println("E-mail enviado com sucesso");
		} catch (Exception e) {
			System.out.println("Não foi possível enviar o e-mail");
			e.printStackTrace();
		}
	}
}
hopster

aqui não funcionou com proxy…

S

Alguem sabe me dizer como eu faço para ocultar o remetente ou colocar um outro endereço? Obrigado!!!

T

O Gmail, por motivos de segurança, não deixa você alterar o remetente.

M

olá pessoal
fiz um programa para envio de email
usei os exemplos acima e funcionou 100%
mas agora mudei o servidor, que não é gmail, e dá erro, não envia
o que pode ser ? firewall ? abrir portas do modem ?

erro

javax.mail.MessagingException: Exception reading response;
  nested exception is:
	javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
	at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1764)
	at com.sun.mail.smtp.SMT ...........
gabrielmassote

Tudo bem marcoscorso?

Nao sei ao certo qual 'e o motivo, mas se for o hotmail ele nao utiliza smtp pelo que vi quando fiz este tutorial.
Assim, voce tem que setar as configuracoes do seu email de origem ( servidor ) para que funcione o codigo. Tente tirar SSL.

Foquei no gmail, pois era a dificuldade do pessoal.

Nao sei se estou certo quando a minha resposta, mas espero que ajude a tomar algum rumo.

Abracos,
Gabriel Massote Prado.

THG_Carvalho

Show!!!
Ótimo material Gabriel!

O problema acima do estevanbc, é porque ele deve ter colocado o usuario e a senha aqui:

class SimpleAuth extends Authenticator {
	public String username = null;
	public String password = null;

Que deveria está aqui:

//Cria um autenticador que sera usado a seguir  
         SimpleAuth auth = null;  
         auth = new SimpleAuth ("seuusuarioparalogin","suasenhaparalogin");

Valeu pelo tópico!

gabrielmassote

Tudo bem Pessoal?

Desculpa a demora em responder alguns tópicos mas estava com o e-mail errado no meu perfil, então não estava recebendo atualizações.
Agora estou de volta.

[]'s, Gabriel.

MaxWeber

Muito bom a sua classe gabrielmassote!

Voce saberia como enviar uma imagem no corpo da mensagem?

gabrielmassote

MaxWeber:

Muito bom a sua classe gabrielmassote!

Voce saberia como enviar uma imagem no corpo da mensagem?

Então Max, tem uma outra API, a Commons Mail que tem essa alternativa e bem mais fácil. E ainda tem a opção de enviar email HTML, caso precise mandar algo mais elaborado pro e-mail.
obs: parte html não está no tutorial, so me pedir se quiser.

Segue o tópico: http://www.guj.com.br/posts/list/104645.java

De uma olhada e me fale qualquer coisa.

[]'s

MaxWeber

gabrielmassote:
MaxWeber:

Muito bom a sua classe gabrielmassote!

Voce saberia como enviar uma imagem no corpo da mensagem?

Então Max, tem uma outra API, a Commons Mail que tem essa alternativa e bem mais fácil. E ainda tem a opção de enviar email HTML, caso precise mandar algo mais elaborado pro e-mail.
obs: parte html não está no tutorial, so me pedir se quiser.

Segue o tópico: http://www.guj.com.br/posts/list/104645.java

De uma olhada e me fale qualquer coisa.

[]'s

Ok, valew…vou dar uma olhada.

C

kra eu tava procurando isso faz tempo

mto bom testei aqui funcionou lindamente

mto bom, parabéns, grande abraço

aureliolima

Cara muito bom teu código… bem documentado… vai ser muito útil pra mim, pois funcionou direitinho. Parabéns!

Abraço!

M

Olá gabrielmassote,

Bom, eu estou precisando de uma classe para enviar e-mail, na verdade eu já tinha conseguido implementar, mas da noite para o dia (literalmente) deixou de funcionar e sempre exibe o mesmo erro… não sei o motivo porque eu não alterei nada no código, enfim… Na busca de solucionar, vi seu tutorial e segui a risca, só alterei os endereços de e-mail e a sua respectiva senha. Ao executar, deu o mesmo erro…

javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465; nested exception is: java.net.ConnectException: Connection timed out: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525) at javax.mail.Service.connect(Service.java:291) at javax.mail.Service.connect(Service.java:172) at egrupo.SendMail.sendMail(SendMail.java:105) at egrupo.SendMail.main(SendMail.java:121) Caused by: java.net.ConnectException: Connection timed out: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:519) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550) at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141) at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:284) at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:201) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672) ... 5 more

Bom, aguardo anciosa por uma resposta.

Desde já muito agradecida.

aureliolima

estás colocando todos os imports certinho?
Usei esta mesma classe e coloquei estes:

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;
kemperacc
cristianonasciment:
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

<%@ page language="java" contentType="text/htm"
    pageEncoding="ISO-8859-1"
    import="meupacote.SendMail"
    %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Enviando meu primeiro E-mail com Gmail</title>
</head>
<body>
<%
SendMail sm = new SendMail();

sm.sendMail("[email removido]","[email removido]","Email Automático","Mensagem do email"); 
%>
<h1>A mensagem foi enviada com sucesso</h1>
</body>
</html>
erro:
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: </head>
18: <body>
19: <%
20: SendMail sm = new SendMail();
21: 
22:  
23:  sm.sendMail("[email removido]","[email removido]","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.

tenta mudar a declaracao do construtor da classe sendmail para public:

//de:
SendMail(){...}

//para
public SendMail(){...}
M

Oi aureliolima,

O problema era com a conexão, mais felizmente consegui resolver!

Minha rede estava configurada para obter um endereço IP automaticamente, guando setei um endereço fixo, funcionou :D!

Obrigada por responder!

gabrielmassote

Já estava vindo responder sua dúvida.
Aqui na faculdade não consigo enviar pelo mesmo motivo.

Bom que conseguiu resolver.

Grande abraço.

aureliolima

Que bom que funcionou Mabel…

Abraço!

eumagnun

Vlw GabrielMassote funcionou numa boa.

Obrigado cara. :smiley:

J

Desculpa por reabiri o topico, mas estou com uma duvida na leitura de emails no Gmail.

Ao fazer a leitura e nao apagar as mensagens, Depois de algumas tentativas, ele diz que nao encontra mais nenhuma mensagem. Mas ao acessar a conta, elas se encontram la.

Alguem saberia me dizer se tem outro Folder que ficam essas mensagens?

M

Blz pessoal!!!
Sei que o tópico é antigo, mas ainda muito util, por isso um link que o colega passou não funciona mais, então segue o link abaixo para baixar o activation.jar, postado aqui mesmo nesse fórum:
http://www.guj.com.br/posts/list/30056.java
Valeu, até mais!!!

claytoncastelli:
Blz Felipe!!

Primeiro me desculpe pois faltou falar um jar activation.

javaMail: mail.jar (http://java.sun.com/products/javamail/downloads/index.html)
commons-email-1.1: commons-email-1.1.jar (http://commons.apache.org/downloads/download_email.cgi)
activation: activation.jar (http://java.sun.com/javase/technologies/desktop/javabeans/jaf/downloads/index.html)

Esses foram os jars que eu usei para o exemplo.

Tenta fazer um teste usando o seu e-mail do gmail tanto como origem(from) como destino(to) ou seja por exemplo:

[email removido]

email.setAuthentication(<a>"[email removido]</a>",sua senha do gmail);

email.setSSL(true);

email.setFrom(<a>"[email removido]</a>");

email.addTo(<a>"[email removido]</a>");

[email removido] e apenas um exemplo, tem que ser seu e-mail válido no gmail.

Você também pode mudar a porta usando o método setSmtpPort(aPortNumber):

email.setSmtpPort(aPortNumber);

Qualquer coisa posta seu código ai para eu ver, ou um exemplo que retrate bem a maneira de como você montou.

Falou!!

A

Vc está de Parabens gabriel!!!
Estava como um louco procurando, inclusive aqui no guj e nada dava certo, mas seu código rodou tranquilamente.

Parabéns novamente!!!

A

UUUOOLLLL \0/
Pessoal apesar do tópico ser muito antigo mas creio que ajuda muita gente.
Depois de apanhar muito, descobri (sem pesquisar no google \o/) como mandar no corpo do email
um texto com acentos e demais caracteres especiais.

texto simples

//Setando o conteúdo/corpo do email msg.setContent(message,"text/plain");

texto completo

//Setando o conteúdo/corpo do email msg.setContent(message,"text/html;charset=UTF-8");

O teste foi feito enviando do Gmail para o Hotmail porém acredito que funcione para todos provedores.

Gabriel, caso julgue interessante, inclua no post original.

Abraço a todos…E fiquem com Deus!!!

iagodantascg

Camamba Gabriel. Muito bom mesmo.
Obrigado pela ajuda. :wink:

DZR

Opa pessoas!

Estou desenvolvendo um sistema para a minha empresa.
Preciso enviar e-mail pelo sistema.

O exemplo está ótimo. Compreendi-o sem muito esforço. Porém estou com um problema.
O servidor de e-mail da minha empresa não precisa de autenticação para enviar e-mail. E no exemplo, precisa enviar um usuário para autenticar.

O erro que aparece é o :

DEBUG: JavaMail version 1.4.3
DEBUG: URL jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/imap.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/imap.jar!/META-INF/javamail.providers
DEBUG: URL jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/pop3.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/pop3.jar!/META-INF/javamail.providers
DEBUG: URL jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/smtp.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/smtp.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsy stems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: URL jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/smtp.jar!/META-INF/javamail.address.map
DEBUG: successfully loaded resource: jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/smtp.jar!/META-INF/javamail.address.map
DEBUG: setDebug: JavaMail version 1.4.3
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "192.168.2.5", port 25, isSSL false
>> Erro: Envio Mensagem
javax.mail.MessagingException: Could not connect to SMTP host: 192.168.2.5, port: 25;
  nested exception is:
	java.net.ConnectException: Connection refused: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
	at javax.mail.Service.connect(Service.java:291)
	at javax.mail.Service.connect(Service.java:172)
	at controle.EnviarEmail.sendMail(EnviarEmail.java:94)
	at controle.TesteCommons.main(TesteCommons.java:12)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
	at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:284)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:201)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672)
	... 5 more

Pelo o que eu entendi, a conexão foi recusada.
Será que foi no servidor de e-mail da empresa?

P.S.: Ainda não testei o código FORA da empresa. Hoje a noite testarei em casa e testarei, mas seu alguém jã puder me ajudar, agradeceria.

R

É capaz de estar sendo barrado por algum proxy.

DZR

Pensei nisso também.
Nesta parte do código tem até uma solução para uso de proxy

// 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.XXX.XXX"); // IP do Servidor Proxy 
                 props.setProperty("socksProxyPort","XXXX");  // Porta do servidor Proxy

OBS: Não coloquei o proxy real da empresa por segurança...

Aqui tem muitos aplicativos que só conectam depois do proxy configurado, porém eles precisam colocar um usuário e uma senha.
Quais parametros eu setaria ali para colocar usuário e senha do proxy?

Obrigado.

EDIT: Acabei de ler que não tem parametros de usuário e senha para o socks proxy... Alguém teria outra idéia de como resolveria isso?

DZR

Opa pessoas!

Desculpem estar fazendo outra postagem.
O erro de connection refuse eu consegui resolver. O problema era com o anti vírus da empresa que estava barrando a porta 25, junto com o servidor smtp.
Esta é a parte boa.
A parte ruim éq o erro agora mudou.

Aqui está o erro:

DEBUG: JavaMail version 1.4.3
DEBUG: URL jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/imap.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/imap.jar!/META-INF/javamail.providers
DEBUG: URL jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/pop3.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/pop3.jar!/META-INF/javamail.providers
DEBUG: URL jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/smtp.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/smtp.jar!/META-INF/javamail.providers
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsy stems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: URL jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/smtp.jar!/META-INF/javamail.address.map
DEBUG: successfully loaded resource: jar:file:/C:/Program%20Files/Java/tomcat/lib/lib/smtp.jar!/META-INF/javamail.address.map
DEBUG: setDebug: JavaMail version 1.4.3
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "192.168.2.5", port 25, isSSL false
>> Erro: Envio Mensagem
javax.mail.MessagingException: Could not connect to SMTP host: 192.168.2.5, port: 25;
  nested exception is:
	javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
	at javax.mail.Service.connect(Service.java:291)
	at javax.mail.Service.connect(Service.java:172)
	at modelo.SendMail.sendMail(SendMail.java:93)
	at modelo.TesteEmail.main(TesteEmail.java:8)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
	at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:503)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:234)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672)
	... 5 more

Alguém poderia me ajudar agora?

Só mais uma coisa: O nosso servidor de e-mail não exige autenticação. E o cõdigo que estou usando é o mesmo da primeira página.

OBS:
Com o exemplo do tutorial abaixo, funcionou corretamente: http://www.guj.com.br/java/104645-api-commons-mail---usando-gmail/1

Se alguém puder me ajudar a sanar a dúvida do problema acima, agradeceria.

rogerio.alcantara

Salve salve galera do GUJ, tudo bom?

Por favor, me perdoem por reabrir o tópico, mas acho que vcs podem me ajudar.

Eu não tinha encontrado esse tópico antes, então abri um novo comentando sobre uma dificuldade que estou tendo ao usar o GMail como SMTP: http://www.guj.com.br/java/238119-gmail-smtp–keytool-the-trustanchors-parameter-must-be-non-empty

Acontece que reparei que esse problema que eu tenho, só ocorre no servidor de produção.

Na minha máquina de desenvolvimento, o email é enviado normalmente. E detalhe: na minha máquina de desenvolvimento, eu não precisei criar nenhum certificado usando o keytool nem nada.

Será algum problema de ambiente?

Permissão talvez?

Agradeço antecipadamente e fico no aguardo de qualquer ajuda.

johmjohm

Ola galera!!

Topico muito bom!!!

Mas tive um probleminha quando fui testar o codigo postado!

O erro que da e o seguinte:

>> Erro: Envio Mensagem javax.mail.MessagingException: Unknown SMTP host: stmp.gmail.com; nested exception is: java.net.UnknownHostException: stmp.gmail.com at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1932) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638) at javax.mail.Service.connect(Service.java:295) at javax.mail.Service.connect(Service.java:176) at validar.EnviarEmail.enviarEmail(EnviarEmail.java:99) at validar.TesteCpf.main(TesteCpf.java:35) Caused by: java.net.UnknownHostException: stmp.gmail.com at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source) at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source) at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288) at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:205) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900) ... 5 more

e algum problema com o stmp.gmail

Como resolve-lo?

Desde ja agradeco!!! :smiley:

cristianchiess

Gabriel, muito bom teu post… me quebro um galho que tu nem sabe… muito obrigado…

F

Fala pessoal. O tópico é antigo, mas acho que trago uma nova discussão.

Eu tinha um código usando JavaMail que enviava emails pelo gmail perfeitamente. Foi testado e estava em pleno uso em várias máquinas. Mas simplesmente de uma hora para outra o programa não funciona mais, digo não envia mais emails. Não alterei nem uma linha do código e o mesmo parou de funcionar.

Em testes eu obtive o seguinte erro, tanto em redes com e sem proxy.

DEBUG: JavaMail version 1.4.4
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
Exception in thread "main" javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
  nested exception is:
	java.net.SocketException: Malformed reply from SOCKS server
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
	at javax.mail.Service.connect(Service.java:317)
	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 main.SimpleSSLMail.test(SimpleSSLMail.java:49)
	at main.SimpleSSLMail.main(SimpleSSLMail.java:21)
Caused by: java.net.SocketException: Malformed reply from SOCKS server
	at java.net.SocksSocketImpl.readSocksReply(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
	... 8 more

O programa fica na linha DEBUG SMTP: trying to connect to host “smtp.gmail.com”, port 587, isSSL false durante um tempão. Depois recebo a exceção. Isso está ocorrendo em todas as máquinas que eu testo. Já testei com o servidor da BOL e ocorre a mesma coisa. Pesquisei em vários lugares e não encontrei nada que pudesse me ajudar.

Alguém está tendo, ou teve, problema similar?

mirrah

o link do activation está off

mirrah

pow cara, valeu mesmo pelo mini tutorial, eu teste o codigo fonte em um outro PC e funcionou certinho!!

brigadão! :smiley:

MarcusSaad

Valeu pelo tutorial amigo! Excelente qualidade!

ruben_m

Valeu pelo tutorial ! adorei

rbortolon

Amigos,

Consegui implementar das 2 formas porém estou com dúvida.

Se eu defino a origem como um e-mail válido (exemplo do hotmail ou até mesmo do gmail que não é o mesmo de destino) ele chega da seguinte forma (em anexo está o header da mensagem)

de : [email removido] [email removido]
para : "[email removido]" [email removido]

É como se eu tivesse enviado “em nome de” [email removido] mas na verdade eu quero que chegue com o nome que o usuário preencher no meu formulário de contato.

Segue abaixo uma das maneiras que utilizei como teste.

SimpleEmail email = new SimpleEmail();
	
		try {
			email.setDebug(true);
			email.setHostName("smtp.gmail.com");
			email.setSmtpPort(465);
			email.setAuthentication("[email removido]","minhasenha");
			email.setSSL(true);
			email.addTo("[email removido]");
			email.setFrom("[email removido]");
			email.setSubject("Quero Info - RECLAMAÇÃO - Rodrigo Bortolon");
			email.setMsg("Olá, Teste de mensagem");
			email.send();
		
		} catch (EmailException e) {
			
	
		}

Obrigado!
Rodrigo Bortolon

rbortolon

rbortolon:
Amigos,

Consegui implementar das 2 formas porém estou com dúvida.

Se eu defino a origem como um e-mail válido (exemplo do hotmail ou até mesmo do gmail que não é o mesmo de destino) ele chega da seguinte forma (em anexo está o header da mensagem)

de : [email removido] [email removido]
para : "[email removido]" [email removido]

É como se eu tivesse enviado “em nome de” [email removido] mas na verdade eu quero que chegue com o nome que o usuário preencher no meu formulário de contato, que neste exemplo eu inseri como "[email removido]".

Segue abaixo uma das maneiras que utilizei como teste.

SimpleEmail email = new SimpleEmail();
	
		try {
			email.setDebug(true);
			email.setHostName("smtp.gmail.com");
			email.setSmtpPort(465);
			email.setAuthentication("[email removido]","minhasenha");
			email.setSSL(true);
			email.addTo("[email removido]");
			email.setFrom("[email removido]");
			email.setSubject("Quero Info - RECLAMAÇÃO - Rodrigo Bortolon");
			email.setMsg("Olá, Teste de mensagem");
			email.send();
		
		} catch (EmailException e) {
			
	
		}

Obrigado!
Rodrigo Bortolon

Pessoal,

Hoje me dei conta, lendo melhor o inicio do tópico que o nosso amigo Gabriel criou, que a rotina serve para envio de mensagens de uma conta para outras quaisquer e não o recebimento correto ?

Serviria então para a distribuição de mensagens do sistema para 1 ou n endereços de e-mail. 

Para o meu caso onde no meu sistema há um formulário de contato, poderia utilizar as instruções abaixo sem a instrução "mail.smtp.user" ? Vou testar hoje a noite para verificar se funciona da maneira que citei.
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");

Grato,
Rodrigo Bortolon

F

Pessoal,

Alguem sabe o porque dessa exception? Desde já agradeço!

354 Go ahead u19sm136972ybm.4 javax.activation.UnsupportedDataTypeException: plain/text at javax.activation.DataHandler.writeTo(DataHandler.java:78) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1476) at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1772) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1099) at org.os.smartschool.commons.Mail.sendMail(Mail.java:107) at org.os.app.smartschool.SmartSchoolReadZoneSubscriber.tagArrived(SmartSchoolReadZoneSubscriber.java:78) at org.rifidi.edge.core.app.api.service.tagmonitor.impl.ReadZoneMonitoringServiceImpl$1.update(ReadZoneMonitoringServiceImpl.java:105) at com.espertech.esper.core.StatementResultServiceImpl.processDispatch(StatementResultServiceImpl.java:252) at com.espertech.esper.core.StatementResultServiceImpl.execute(StatementResultServiceImpl.java:213) at com.espertech.esper.core.UpdateDispatchViewBase.execute(UpdateDispatchViewBase.java:75) at com.espertech.esper.core.UpdateDispatchFutureSpin.execute(UpdateDispatchFutureSpin.java:85) at com.espertech.esper.dispatch.DispatchServiceImpl.dispatchFromQueue(DispatchServiceImpl.java:57) at com.espertech.esper.dispatch.DispatchServiceImpl.dispatch(DispatchServiceImpl.java:31) at com.espertech.esper.core.EPRuntimeImpl.dispatch(EPRuntimeImpl.java:1043) at com.espertech.esper.core.EPRuntimeImpl.processThreadWorkQueue(EPRuntimeImpl.java:648) at com.espertech.esper.core.EPRuntimeImpl.processWrappedEvent(EPRuntimeImpl.java:414) at com.espertech.esper.core.EPRuntimeImpl.processEvent(EPRuntimeImpl.java:380) at com.espertech.esper.core.EPRuntimeImpl.sendEvent(EPRuntimeImpl.java:210) at org.rifidi.edge.core.services.esper.internal.EsperReceiver.run(EsperReceiver.java:81) at java.lang.Thread.run(Thread.java:662)

willianpolis

Parabens pelo artigo.

SirDominque
//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 */

Eu posso mudar isto , para isso :

//Cria um autenticador que sera usado a seguir  
        SimpleAuth auth = null;  
   String userx;
   String passy;
userx = JOptionPane.showInputDialog(null,"Insira nome de usuário");
passy = JOptionPane.showInputDialog (null,"insira senha");

         auth = new SimpleAuth (userx,passy);  
          
        //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 */

Posso fazer isso ?

X

Alguem fez esse exemplo do potico com JSF??
Se sim, pode mi ajudar??

X

Oq são esses origem,destino,assunto,mensagem ???
De onde eu pego esses valores?

denisspitfire

xandi_m5:
gabrielmassote:

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);

Oq são esses origem,destino,assunto,mensagem ???
De onde eu pego esses valores?


Vamos lá. Voce pode escrever substituindo esses valores por variaveis do tipo string mas escrevendo os valores para mandar o e-mail.

sm.sendMail("SEU E-MAIL","EMAIL DE DESTINO(quem vai receber o e-mail saca?)","ASSUNTO","TEXTO DO E-MAIL(escreve aqui oque a pessoa vai receber");
denisspitfire

Galera seguinte…
classe

package br.com.enginesystem.disparador;

public class TestaSendMail {
	public static void main(String[] args) {
		SendMail sm = new SendMail("smtp.gmail.com","465");

		sm.sendMail("????","????","Email Automático","Mensagem do email"); 
	}
}

erro

DEBUG: JavaMail version 1.4.1
DEBUG: not loading file: /usr/lib/jvm/java-6-openjdk/jre/lib/javamail.providers
DEBUG: java.io.FileNotFoundException: /usr/lib/jvm/java-6-openjdk/jre/lib/javamail.providers (No such file or directory)
DEBUG: !anyLoaded
DEBUG: not loading resource: /META-INF/javamail.providers
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: !anyLoaded
DEBUG: not loading resource: /META-INF/javamail.address.map
DEBUG: not loading file: /usr/lib/jvm/java-6-openjdk/jre/lib/javamail.address.map
DEBUG: java.io.FileNotFoundException: /usr/lib/jvm/java-6-openjdk/jre/lib/javamail.address.map (No such file or directory)
DEBUG: setDebug: JavaMail version 1.4.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false
220 mx.google.com ESMTP a30sm94367565yhe.18
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465

EHLO denis-pc
250-mx.google.com at your service, [201.68.133.249]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
c2V1dXN1YXJpb3BhcmFsb2dpbg==
334 UGFzc3dvcmQ6
c3Vhc2VuaGFwYXJhbG9naW4=
535-5.7.1 Username and Password not accepted. Learn more at
535 5.7.1 http://support.google.com/mail/bin/answer.py?answer=14257 a30sm94367565yhe.18
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false
220 mx.google.com ESMTP d25sm94474647yhe.4
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465

EHLO denis-pc
250-mx.google.com at your service, [201.68.133.249]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
c2V1dXN1YXJpb3BhcmFsb2dpbg==
334 UGFzc3dvcmQ6
c3Vhc2VuaGFwYXJhbG9naW4=
535-5.7.1 Username and Password not accepted. Learn more at
535 5.7.1 http://support.google.com/mail/bin/answer.py?answer=14257 d25sm94474647yhe.4
>> Erro: Envio Mensagem
javax.mail.AuthenticationFailedException
	at javax.mail.Service.connect(Service.java:319)
	at javax.mail.Service.connect(Service.java:169)
	at br.com.enginesystem.disparador.SendMail.sendMail(SendMail.java:93)
	at br.com.enginesystem.disparador.TestaSendMail.main(TestaSendMail.java:7)

Alguem da uma luz pls

icemagno

Olá amigo.
Acho que a resposta está na linha 38/39:

Visite “Meu cliente não aceita meu nome de usuário e minha senha” em

http://support.google.com/mail/bin/answer.py?answer=14257

para saber o motivo.

EDT: Corrigidos erros de português… :wink:

P

Daria para enviar um anexo no JavaMail sendo que o arquivo é um url, isso java EE, rodando local, eu tenho supondo //123.456.7.8/MyFiles/index.html. Valeu

icemagno

Olá.
Você quer enviar um arquivo ou uma URL ?
Se for uma URL basta escrevê-la no texto da mensagem.

Abraço.

EDT:
PS: Não esqueça de usar o ponto de interrogação, assim a gente sabe que você tem uma dúvida e não que está afirmando algo.

P

Não eu quero enviar o arquivo e este arquivo tem de aparecer no corpo do email eu vi a Commons mail e ele tem o HtmlEmal, só que na hora de setar a minha URL como a embaixo ele da um exeption, saberia como eu faço isso segue o código:

ublic void _htmlMail(String _to, String to_name, String subject,String message, String anexo)
    {
        mail = new HtmlEmail(); 
        try
        {
            System.out.println(anexo);
            System.out.println(_to +" "+to_name); 
            
              URL url = new URL(anexo);
              String cid = mail.embed(url, "Newsletter"); 
                 
            mail.setHtmlMsg("&lt;html&gt;"+message+" - <img >&lt;/html&gt;");
            mail.setTextMsg("Seu servidor de e-mail não suporta mensagem HTML");           
            mail.setHostName("smtp.bilheteria.com"); // o servidor SMTP para envio do e-mail  
            mail.addTo(_to, to_name); //destinatário  
            mail.setFrom("[email removido]", "Newsletter"); // remetente  
            mail.setSubject(subject); // assunto do e-mail  
            mail.setMsg(message); //conteudo do e-mail  
            mail.setAuthentication("[email removido]", "teatro");  
            mail.setSmtpPort(25); // porta
            mail.setSSL(false);   // SSL
            mail.setTLS(true);    // starttls
            mail.setDebug(true);  // debug true=on , false=off                        
            mail.send();          // envia email 
        }
        catch(MalformedURLException | EmailException er)
        {
            System.err.println(er);
        }

    }
icemagno
pedro.deus:
Não eu quero enviar o arquivo e este arquivo tem de aparecer no corpo do email eu vi a Commons mail e ele tem o HtmlEmal, só que na hora de setar a minha URL como a embaixo ele da um exeption, saberia como eu faço isso segue o código:
ublic void _htmlMail(String _to, String to_name, String subject,String message, String anexo)
    {
        mail = new HtmlEmail(); 
        try
        {
            System.out.println(anexo);
            System.out.println(_to +" "+to_name); 
            
              URL url = new URL(anexo);
              String cid = mail.embed(url, "Newsletter"); 
                 
            mail.setHtmlMsg("&lt;html&gt;"+message+" - <img >&lt;/html&gt;");
            mail.setTextMsg("Seu servidor de e-mail não suporta mensagem HTML");           
            mail.setHostName("smtp.bilheteria.com"); // o servidor SMTP para envio do e-mail  
            mail.addTo(_to, to_name); //destinatário  
            mail.setFrom("[email removido]", "Newsletter"); // remetente  
            mail.setSubject(subject); // assunto do e-mail  
            mail.setMsg(message); //conteudo do e-mail  
            mail.setAuthentication("[email removido]", "teatro");  
            mail.setSmtpPort(25); // porta
            mail.setSSL(false);   // SSL
            mail.setTLS(true);    // starttls
            mail.setDebug(true);  // debug true=on , false=off                        
            mail.send();          // envia email 
        }
        catch(MalformedURLException | EmailException er)
        {
            System.err.println(er);
        }

    }

Amigo, mande um exemplo dos parametros que você está passando, principalmente o "anexo".
Outra coisa que não deve estar relacionada com seu problema, mas é uma dica : o HTML do corpo tá incorreto.
O ideal é que vc crie uma pequena página HTML e verifique o resultado. Depois cole o código.
Ah, o fato do anexo ser exibido na própria mensagem normalmente é um comportamento do CLIENTE.
Se vc anexa uma imagem, por exemplo, alguns clientes de webmail sabem apontar internamente para aquela imagem sem que vc precise
fazer um download, mas vc não sabe de antemão qual será esse endereço, então não daria para vc apontar ele no HTML da sua mensagem.

Abraço.

P

Então eu fiz um teste ontem de noite implementando o método cópia usando o JCIFS após a cópia eu fiz o seguinte

File file = new File("/home/pedro/index.html");


    {
        mail = new HtmlEmail(); 
        try
        {
            System.out.println(anexo);
            System.out.println(_to +" "+to_name); 

            URL url;
        
            url=new URL(file.toURL());
            System.out.println(url);
            //String cid = mail.embed(new URLDataSource(new URL(anexo)), "Newsletter");            
             
           // mail.setHtmlMsg("&lt;html&gt;"+message+" - <img >&lt;/html&gt;");
            mail.setTextMsg("Seu servidor de e-mail não suporta mensagem HTML");           
            mail.setHostName("smtp.bilheteria.com");                            // o servidor SMTP para envio do e-mail  
            mail.addTo(_to, to_name);                                           // destinatário  
            mail.setFrom("[email removido]", "Newsletter");            // remetente  
            mail.setSubject(subject);                                           // assunto do e-mail  
            mail.setMsg(message);                                               // conteudo do e-mail  
            mail.setAuthentication("[email removido]", "teatro");      // autenticação
            mail.setSmtpPort(25);                                               // porta
            mail.setSSL(false);                                                 // SSL
            mail.setTLS(true);                                                  // starttls
            mail.setDebug(true);                                                // debug true=on , false=off                        
            mail.send();                                                        // envia email 
        }
        catch(MalformedURLException | EmailException er)
        {
            System.err.println(er);
        }

E ai funcionou o caminho no servidor que eu passei para minha classe SMBCopy (JCIFS) é file: //123.456.7.8/MyFiles/index.html, e meu local file é file://UNIX/4123/index.html ai eu faço SmbFile i cpoy to SmbFile j.

J

Galera, fiz esse exemplo ai, mas não consegui.

Deu o Seguinte Erro:

DEBUG: JavaMail version 1.4.5
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
DEBUG: Tables of loaded providers
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: setDebug: JavaMail version 1.4.5
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false
>> Erro: Envio Mensagem
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
  nested exception is:
	java.net.ConnectException: Connection timed out: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
	at javax.mail.Service.connect(Service.java:295)
	at javax.mail.Service.connect(Service.java:176)
	at Send.SendMail.sendMail(SendMail.java:92)
	at Send.Teste.main(Teste.java:14)
Caused by: java.net.ConnectException: Connection timed out: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
	at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:319)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:207)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938)
	... 5 more

A classe main que chama a classe sendMail ficou assim:

ackage Send;


public class Teste {
	public static void main(String args[]){
		
		SendMail send = new SendMail();
		
		String from = "[email removido]";
		String to = "[email removido]";
		String subject = "Teste Java Mail";
		String message = "Teste Java Mail";
		
		send.sendMail(from, to, subject, message);
	}

}

O que pode estar errado,não encontro de jeito algum.

andersonolisilva

Vlw Gabriel Massote
Excelente material parabéns… !!!

Funcionou de primeira…

tiagomourabrandao

Parabéns pelo tópico! Criei uma conta aqui só pra te agradecer! Me ajudou muito em meus projetos!

J

Sou muito iniciante,mas queria saber como utilizar.

aqui dá erro pois não contem metodo principal!

se alguem poder me disponilizar o jar em [email removido]
ou algo em que eu possa ver como é o funcionamento,apenas para fins educativos desde já muito grato a todos.
fiquem com deus.

danilovazb

Galera, sabem se tem como alterar o “EHLO danilo”

Exemplo, quando mando um e-mail para alguém, na identificação vai o nome do computador(HOSTNAME) que está enviando, teria como alterar esse campo por meios de properties do javamail?

Não sei se consegui ser claro, mas caso não consigam entender me avisem.

H

como está seu código?

uhitlei1

Brother, Sei que é atrasado a resposta neste post, mas gostei muito da sua classe,
mas VLW!!!
muito bom esse exemplo.
Parabens

jorge.david

Rodei a aplicação localmente e funcionou. Quando faço o upload para o servidor recebo a seguinte mensagem:

Someone recently tried to use an application to sign in to your Google Account - [email removido].

We prevented the sign-in attempt in case this was a hijacker trying to access your account. Please review the details of the sign-in attempt:
Friday, June 21, 2013 1:43:56 AM UTC
IP Address: 174.142.48.58 (server7.integrator.com.br.)
Location: Canada

If you do not recognize this sign-in attempt, someone else might be trying to access your account. You should sign in to your account and reset your password immediately.

Reset password

If this was you, and you are having trouble accessing your account, complete the troubleshooting steps listed at http://support.google.com/mail?p=client_login

Sincerely,
The Google Accounts team

Como posso fazer para resolver este problema?

C

Ressuscitando,

Fiquei dois dias quebrando a cabeça para fazer funcionar o envio de e-mail, na minha máquina não funcionava (SO. Windows) na máquina de meu amigo funcionava (SO. Linux - Ubuntu), resumindo em minha máquina não funcionava por que o avast bloqueava o envio de email.

Sucesso pessoal!

Criado 11 de abril de 2008
Ultima resposta 26 de jul. de 2013
Respostas 114
Participantes 58