[RESOLVIDO] Ajuda com JAVA MAIL - erro no SMTP

Gente, estou criando um projeto Web e precisa fazer a velha função: “esqueci minha senha”, que deve mandar um e-mail pra pessoa com a a tal senha.

Antes de tudo, como nunca fiz nada assim, estou simplesmente tentando conseguir enviar um e-mail (depois penso no quesito de enviar a senha propriamente dita). Estou usando o JAVA MAIL e depois de pesquisar bastante cheguei nesse código:


    import java.util.*;  
    import javax.mail.*;  
    import javax.mail.internet.*;  
    import javax.activation.*;  
      
    public class mail{  
        private String to, from, host;  
        private Properties properties;  
        private Session session;  
        public mail(){  
              
        }  
      public String execute(){  
          to = "meuemail@minhaempresa.com.br";  
          from = "outroemail@gmail.com";  
          host = "smtp.ihostexchange.net";  
            
         properties = System.getProperties();  
         properties.setProperty("mail.smtp.host",host);
           
         session = Session.getDefaultInstance(properties);  
      
          try{  
             MimeMessage message = new MimeMessage(session);  
               
             message.setFrom(new InternetAddress(from));  
             message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));  
             message.setSubject("teste");  
             message.setText("teste de envio");  
             // enviando o email  
             Transport.send(message);  
             System.out.println("Email enviado com sucesso");  
          }catch (MessagingException e) {  
             e.printStackTrace();  
          }  
          
       System.out.println("CHEGOU ATÉ AQUI");
      return "ENVIADO";
      }
         
    }  

o return está aí pq estou usando Struts. Enfim, o codigo até “executa” (indo para a minha tela sucesso.jsp) mas aparece o seguinte erro:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.ihostexchange.net, port: 25;
  nested exception is:
	java.net.ConnectException: Connection timed out: connect
	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:295)
	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 estudos.mail.execute(mail.java:33)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
	at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
	at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
	at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
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 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)
	... 71 more
CHEGOU ATÉ AQUI

tenho quase certeza que o problema está relacionado ao SMTP (nem sei direito o que é isso), então se alguém puder me dar qualquer ajuda eu ficarai muito grato.
Qualquer dica ja ajudaria muito.

SMTP : http://pt.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol

os dados do seu SMTP estão corretos? por acaso vc consegue configurar um outlook ou thunderbird com essas informações?

no guj tem ótimos posts com exemplos, já pesquisou?

http://www.guj.com.br/java/87637-api-java-mail—usando-o-gmaill
http://www.guj.com.br/articles/21
http://www.guj.com.br/java/44358-javamail—como-utilizar
http://www.guj.com.br/java/17754-enviando-e-mail-com-javaxmail
http://www.guj.com.br/search?cx=partner-pub-9448585618971060%3A4001950301&cof=FORID%3A10&ie=UTF-8&q=java+mail&x=0&y=0&siteurl=www.guj.com.br%2F#1066

att,

acredito que esteja faltando a autenticação no teu servidor de e-mail.

Sugiro a utilização utilização da Apache Cammons Email Tutorial

ja li todos esses links e até agora nada
sobre o SMTP eu ja configurei o Outlook com esses dados então acredito que estão certos

no seu código vc não faz autenticação no servidor de envio de emails.

no primeiro link q eu postei tem o seguinte código:

[quote]
//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);  [/quote]

att,

realmente faltava algumas configurações de autentificação do SMTP.
consegui resolver e agora ja esta funcionando certinho.

Obrigado pela ajuda!!
segue o codigo pra quem tiver essa mesma duvida:
lembrando que esse está configurando com o servidor do Gmail, ou seja o remetentene precisa ser um e-mail do gmail

[code]Properties propriedades = new Properties();
propriedades.put(“mail.smtp.auth”, “true”);
propriedades.put(“mail.host”, “smtp.gmail.com”);
propriedades.put(“mail.smtp.port”, “465”);
propriedades.put(“mail.smtp.socketFactory.class”, “javax.net.ssl.SSLSocketFactory”);
propriedades.put(“mail.smtp.socketFactory.fallback”, “false”);

	Authenticator autenticador = new Authenticator() {
		protected PasswordAuthentication getPasswordAuthentication() {
			return new PasswordAuthentication("DIGITE SEU E-MAIL GMAIL AQUI", "DIGITE SUA SENHA AQUI");
		}
	};

	Session session = Session.getInstance(propriedades, autenticador);
	MimeMessage mensagem = new MimeMessage(session);

	try {
		String assunto = "Olá";
		String corpo  = "<html><head></head><body><h1>Olá</h1></body></html>";
		String remetente = "EMAIL REMETENTE";
		String destinatario = "EMAIL DESTINATÁRIO";

		// Agora só é preciso adicionar estas informações na mensagem.

		mensagem.setFrom(new InternetAddress(remetente));
		mensagem.setRecipient(Message.RecipientType.TO, new InternetAddress(destinatario));
		mensagem.setSentDate(new Date());
		mensagem.setSubject(assunto);
		mensagem.setContent(corpo, "text/html");
		Transport.send(mensagem);
	}
	catch (AddressException e) {
		System.out.println(e.getMessage());
	}
	catch (MessagingException e) {
		System.out.println(e.getMessage());
	}[/code]