Enviar email em Java dando erro. [RESOLVIDO]

15 respostas
W

Pessoal, estou a vários dias pesquisando pra fazer um código pra enviar email usando o gmail. Mas nada está funcionando.
Quero fazer uma aplicação simples mesmo, apenas executando o main e enviando o email.
Se alguém puder ajudar, agradeço.

segue o código que fiz baseado no tutorial do Paulo silveira
[url]http://www.guj.com.br/articles/21[/url]

package br.com.email.classes;


import java.util.Date;
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;

import org.apache.commons.mail.EmailException;

public class EnviaEmail {

	public static void main(String[] args) throws EmailException {

		EnviaEmail enviaEmail = new EnviaEmail();
		enviaEmail.sendEmail();
	}
	
	public void sendEmail(){
		Properties p = new Properties();
		p.put("mail.host", "smtp.gmail.com");
		p.put("mail.stmp.port", "587");
		Authenticator auth = new TesteAuth();
		Session session = Session.getInstance(p, auth);   
		MimeMessage msg = new MimeMessage(session);
		
		try {   
		    // "de" e "para"!!   
		    msg.setFrom(new InternetAddress("[email removido]"));   
		    msg.setRecipient(Message.RecipientType.TO, new InternetAddress("[email removido]"));   
		    // nao esqueca da data!   
		    // ou ira 31/12/1969 !!!   
		    msg.setSentDate(new Date());   
		    msg.setSubject("Teste envio de email em Java");   
		    msg.setText("Teste envio de email em Java");
		    // evniando mensagem (tentando)   
		    Transport.send(msg);   
		}   
		catch (AddressException e) {   
		    e.printStackTrace();   
		}   
		catch (MessagingException e) {   
			e.printStackTrace();   
		}
	}
	
	class TesteAuth extends Authenticator{
		  
	    public TesteAuth(){   
	        getPasswordAuthentication();   
	    }   
	       
	    public PasswordAuthentication getPasswordAuthentication() {   
	  
	        String username, password;   
	        username = "meu_usuario_no_gmail";   
	        password = "minha_senha";   
	  
	        return new PasswordAuthentication(username, password);   
	    }   
	}
}
Segue o erro que ocorre na linha:
MimeMessage msg = new MimeMessage(session);
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 25;
  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 javax.mail.Service.connect(Service.java:121)
	at javax.mail.Transport.send0(Transport.java:190)
	at javax.mail.Transport.send(Transport.java:120)
	at br.com.email.classes.EnviaEmail.sendEmail(EnviaEmail.java:45)
	at br.com.email.classes.EnviaEmail.main(EnviaEmail.java:24)
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:525)
	at java.net.Socket.connect(Socket.java:475)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:284)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:227)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672)
	... 8 more

15 Respostas

H

Vc está tomando timed out. A porta está correta?

É aquela mesmo?

W

Oi jakefrog,
a porta tá certa
http://mail.google.com/support/bin/answer.py?hl=pt&answer=13287
O erro ocorre na linha abaixo e não está pegando a porta, pois no erro mostra que não está conseguindo conectar na porta 25, mas eu setei a 587. Será que o código tá errado?

MimeMessage msg = new MimeMessage(session);
F

Nesse post tem um exemplo

W
Nesse post tem um exemplo http://www.guj.com.br/java/106280-melhor-maneira-de-enviar-e-mail-com-java
Executei o exemplo do link acima, coloquei meu usuário e senha do gmail, tentei com as portas 465 e depois 587, mas dá erro.
public void enviaEmailSimples() throws EmailException {   
           
        SimpleEmail email = new SimpleEmail();   
        email.setHostName("smtp.gmail.com"); // o servidor SMTP para envio do e-mail   
        email.addTo("[email removido]", "Guilherme"); //destinatário   
        email.setFrom("[email removido]", "Eu"); // remetente   
        email.setSubject("Teste -> Email simples"); // assunto do e-mail   
        email.setMsg("Teste de Email utilizando commons-email"); //conteudo do e-mail   
        email.setAuthentication("teste", "xxxxx");   
        email.setSmtpPort(465);   
        email.setSSL(true);   
        email.setTLS(true);   
        email.send();     
    }
Eu comentei as linhas abaixo pois não são reconhecidas. [color=red]The method setSSL(boolean) is undefined for the type SimpleEmail[/color] Será que falta algum jar? Estou usando o commons-email-1.0.jar
email.setSSL(true);   
email.setTLS(true);
F

Nesse exemplo utilizei o commons-email-1.1.jar
Tente atualizar e avise se funcionou

A

ve se isso lhe ajuda

abrass

:wink:

F

Está em casa, ou a rede que está usando possui proxy/firewall? Sua conexão com SMTP pode estar sendo barrada.

W

Alterei as libs para commons-email-1.2.jar, commons-email-1.2-javadoc.jar e commons-email-1.2-sources.jar e os métodos setSSL e setTLS foram reconhecidos.
Mas continua dando erro. É preciso configurar algo no GMAIL?

Exception in thread "main" org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:587 at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242) at org.apache.commons.mail.Email.send(Email.java:1267) at br.com.email.classes.CommonsMail.enviaEmailSimples(CommonsMail.java:35) at br.com.email.classes.CommonsMail.<init>(CommonsMail.java:14) at br.com.email.classes.CommonsMail.main(CommonsMail.java:118) Caused by: 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:313) at javax.mail.Service.connect(Service.java:172) at javax.mail.Service.connect(Service.java:121) at javax.mail.Transport.send0(Transport.java:190) at javax.mail.Transport.send(Transport.java:120) at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1232) ... 4 more 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:525) 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) ... 11 more

[quote]ve se isso lhe ajuda


Já vi esse tópico, não ajudou. vlw

Agora não estou em casa, mas já executei de casa e tb deu erro. Vou executar hj a noite de casa com as alterações que fiz pra ver vai.

J

Experimenta usar outra conta de email OU troca a porta…

F

Estas são as configurações que estou usando para enviar email. Mas estou utilizando Spring. O endereço, porta e etc, que estou usando seguem abaixo:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
	     <property name="host" value="smtp.gmail.com" />
	     <property name="port" value="465" />
	     <property name="protocol" value="smtps" />
	     <property name="username" value="[email removido]"/>
	     <property name="password" value="sua_senha"/>
	     <property name="javaMailProperties">
	             <props>
	             <prop key="mail.smtps.auth">true</prop>
	             <prop key="mail.smtps.starttls.enable">true</prop>
	             <prop key="mail.smtps.debug">true</prop>
	             </props>
             </property>
 </bean>
W

Executando de casa, funcionou. Provavelmente era bloqueado no trabalho.
Mais uma coisa, como faço pra ver o log das execuções? Li em algum tópico que dava pra habilitar, mas não achei mais o link.

Obrigado pela ajuda.

W

Esquece, já encontrei, é só colocar setDebug(true).

Obrigado a todos.

F

Já passei por isso. Horas pesquisando e era o proxy da rede barrando. rs
Primeiro dia dedicado a ajudar no GUJ e já ajudei alguns, tem muita gente iniciando, com dúvidas, legal.

Bons códigos.

F

Já passei por isso. Horas pesquisando e era o proxy da rede barrando. rs
Primeiro dia dedicado a ajudar no GUJ e já ajudei alguns, tem muita gente iniciando, com dúvidas, legal.

Bons códigos.

W

Então fredericomaia10, na verdade eu testava em casa e no trampo, mas só ontem com as ajudas que achei o código certo, depois foi só descartar a questão do proxy. abç.

Criado 19 de janeiro de 2011
Ultima resposta 20 de jan. de 2011
Respostas 15
Participantes 6