Erro com email [ RESOLVIDO ]

13 respostas
D

Olá amigos, estou tentando enviar emails, com o gmail consigo normal, mas com o hotmail não vai, estou usando assim “smtp.live.com”, já tentei com a porta 25,465,587. E também não consigo enviar pelo pc da empresa, pois existe um proxy, alguém sabe como resolver?

13 Respostas

drsmachado

djJoe:

Olá amigos, estou tentando enviar emails, com o gmail consigo normal, mas com o hotmail não vai, estou usando assim “smtp.live.com”, já tentei com a porta 25,465,587. E também não consigo enviar pelo pc da empresa, pois existe um proxy, alguém sabe como resolver?

A API JavaMail não possui suporte à configurações de proxy.

D

drsmachado:

A API JavaMail não possui suporte à configurações de proxy.

Estou usando commons-mail, e quanto ao hotmail você tem alguma dica?

drsmachado

djJoe:
drsmachado:

A API JavaMail não possui suporte à configurações de proxy.

Estou usando commons-mail, e quanto ao hotmail você tem alguma dica?


commons-mail utiliza JavaMail como base, tanto que é uma das dependências.
Primeiro, alguma exceção é lançada?
Segundo, a documentação diz o que a respeito de proxy?

leandrow3b

Tenta esse exemplo.

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   
     */    
    public SendMail() {
        mailSMTPServer = "smtp.gmail.com";    
        mailSMTPServerPort = "465";    
    }    
       
    SendMail(String mailSMTPServer, String mailSMTPServerPort) {  
        this.mailSMTPServer = mailSMTPServer;    
        this.mailSMTPServerPort = mailSMTPServerPort;    
    }    
        
    public void sendMail(String from, String to, String subject, String message) {    
            
        Properties props = new Properties();    
   
                // Caso queira utilizar 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 ("seu_email_de_envio","senha_do_email");    
            
        Session session = Session.getDefaultInstance(props, auth);    
        session.setDebug(true); //Habilita o LOG das ações executadas durante o envio do email    
     
        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, "seu_email_de_envio", "senha_do_email");    
            msg.saveChanges(); // don't forget this    
            //envio da mensagem    
            tr.sendMessage(msg, msg.getAllRecipients());    
            tr.close();    
        } catch (Exception e) {    
            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);    
    }    
}
leandrow3b

Fiz com o Gmail e hotmail e funcionou bacana!
caso não tenha a lib mail ai, me passa teu email que te envio!
flws…

D

Tentei com esse código que você postou e não deu certo, olha o erro gerado juntamente com o debug:

run:
DEBUG: JavaMail version 1.4ea
DEBUG: java.io.FileNotFoundException: C:\Program Files\Java\jdk1.6.0_19\jre\lib\javamail.providers (O sistema não pode encontrar o arquivo especificado)
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: java.io.FileNotFoundException: C:\Program Files\Java\jdk1.6.0_19\jre\lib\javamail.address.map (O sistema não pode encontrar o arquivo especificado)
DEBUG: setDebug: JavaMail version 1.4ea
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: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 SendMail.sendMail(SendMail.java:85)
	at SimpleAuth.main(SendMail.java:117)
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:529)
	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:232)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
	... 5 more
CONSTRUÍDO COM SUCESSO (tempo total: 29 segundos)
leandrow3b

você adicionou lib mail a class path?

D

Sim, como informei, o problema é com o proxy.

leandrow3b

Posta ai tua classe com as tuas configurações, claro sem suas informações privadas.

E

Teste isso em um lugar sem proxy.

Muitos proxies (principalmente em empresas grandes) não deixam você se conectar a nada, absolutamente nada, exceto a web sites nas portas 80 e 443. E isso porque elas normalmente filtram os sites também.

Na vefdade, estou para ver uma empresa que tenha um proxy que deixe você acessar as portas do Gmail ou Hotmail.

D

Ok amigo, segue abaixo:

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   
     */    
    public SendMail() {
        mailSMTPServer = "smtp.gmail.com";    
        mailSMTPServerPort = "465";    
    }    
       
    SendMail(String mailSMTPServer, String mailSMTPServerPort) {  
        this.mailSMTPServer = mailSMTPServer;    
        this.mailSMTPServerPort = mailSMTPServerPort;    
    }    
        
    public void sendMail(String from, String to, String subject, String message) {    
            
        Properties props = new Properties();    
   
                // Caso queira utilizar um SERVIDOR PROXY descomente essa parte e atribua as propriedades do SERVIDOR PROXY utilizado    
                  
                props.setProperty("proxySet","true");   
                props.setProperty("socksProxyHost","http://proxy"); // IP do Servidor Proxy   
                props.setProperty("socksProxyPort","80");  // 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 ("[email removido]","MinhaSenha");    
            
        Session session = Session.getDefaultInstance(props, auth);    
         //Habilita o LOG das ações executadas durante o envio do email    
     
        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, "[email removido]", "MinhaSenha");    
            msg.saveChanges(); // don't forget this    
            //envio da mensagem    
            tr.sendMessage(msg, msg.getAllRecipients());    
            tr.close();    
        } catch (Exception e) {    
            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);    
    } 
    
    
    public static void main(String []args){
        
        SendMail send = new SendMail();
        send.sendMail("[email removido]","[email removido]","teste","Email com javaMail");
    }
}
E

Só não se esquecer que 99% das empresas não configuram proxies com SOCKS justamente para evitar que seja usado algum outro email que não o corporativo. Portanto, o programa acima é válido apenas se a empresa tiver um proxy configurado com SOCKS, o que costuma ser muito raro.

D

Ok amigos, muito obrigado a todos que me ajudaram!!

Posso dar o tópico como resolvido, pois é justamente como o nosso amigo entanglement informou. Eu trabalho na Oi e tou tentando enviar pela rede dela e, um funcionario informou que nem o outlook funciona nessa rede é quase tudo bloqueado, Obrigado!

Criado 27 de abril de 2012
Ultima resposta 28 de abr. de 2012
Respostas 13
Participantes 4