Erro envio de email [RESOLVIDO]

Já testei de várias formas o envio de email utilizando o gmail, mas sempre dá esse erro, segue abaixo, código e erro.

[code]public class Email {
//hostmail do servidor de email que será usado para envio
static String hostName = “smtp.gmail.com”;
static String nomeRemetente = “Eu”;
static String remetente = "remetente@gmail.com";
static String destinatarios = “destinatario@xxxzz.com.br”;
static String assuntoEmail = “teste email”;
static String mensagemRmail = “testando envio de email utilizando o JAVA”;
static String usuarioEmail = “usuario_gmail”;
static String senhaEmail = “senha_gmail”;
static int portaEnvio = 465;

public static void enviarEmail() throws EmailException{
    
    SimpleEmail email = new SimpleEmail();
    //configura o hostname
    email.setHostName(hostName);
    //configura porta de envio
    email.setSmtpPort(portaEnvio);
    //adiciona os emails de destino
    email.addTo(destinatarios);
    //configura o email do remetente
    email.setFrom(remetente, nomeRemetente);
    //adiciona o assunto
    email.setSubject(assuntoEmail);
    //mensagem do email
    email.setMsg(mensagemRmail);
    //autenticacao no servidor
    email.setSSL(true);
    email.setTLS(true);
    //usuario e senha do remetente
    email.setAuthentication(usuarioEmail, senhaEmail);
    email.send();
}

}[/code]

Classe para executar:

[code]public class Testes {

public static void main(String args[]) throws InterruptedException, FileNotFoundException, IOException, EmailException {
    
    Email.enviarEmail();
    
}

}[/code]

Sempre retorna esse erro, já tentei sem autenticação, somente com um tipo de autenticação, com os 2 tipos de autenticação ssl tls, porta 465 e 587, hostname “smtp.gmail.com” e “smtp.googlemail.com”, sempre me retorna o erro abaixo? Existe a possibilidade de estar com erro nos imports? baixei alguma biblioteca errada? segue abaixo o erro quando o programa é executado:

Exception in thread "main" org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:465 at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242) at org.apache.commons.mail.Email.send(Email.java:1267) at diariooficial.Email.enviarEmail(Email.java:48) at diariooficial.Testes.main(Testes.java:18) Caused by: javax.mail.NoSuchProviderException: smtp at javax.mail.Session.getService(Session.java:784) at javax.mail.Session.getTransport(Session.java:720) at javax.mail.Session.getTransport(Session.java:660) at javax.mail.Session.getTransport(Session.java:640) at javax.mail.Session.getTransport(Session.java:697) at javax.mail.Transport.send0(Transport.java:192) at javax.mail.Transport.send(Transport.java:124) at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1232) ... 3 more Java Result: 1 CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Verifica se você colocou o smtp.jar no classpath do seu aplicativo.

Utilizo os seguintes arquivos para enviar um Java Mail: dsn.jar, imap.jar, mailapi.jar, pop3.jar, smtp.jar.

wiliamps

A porta de smtp do google não é a 465, mas sim a 587. Abaixo solução completa para validar o endereço e enviar um e-mail html utilizando o Commons E-mail.

public static boolean validaEmail(String email) {
        Pattern p = Pattern.compile(".+@.+\\.[a-z]+");
        Matcher m = p.matcher(email);
        if (m.matches()) {
            return false;
        } else {
            return true;
        }
    }

public static HtmlEmail conectaEmail() throws EmailException, NoSuchProviderException, MessagingException {
        String hostname = "smtp.gmail.com";
        String username = "seu@gmail.com";
        String password = "****";
        String emailOrigem = "seu@gmail.com";
        HtmlEmail email = new HtmlEmail();
        email.setHostName(hostname);
        email.setSmtpPort(587);
        email.setAuthenticator(new DefaultAuthenticator(username, password));
        email.setTLS(true);
        email.setFrom(emailOrigem, "Destinatário");
        email.setDebug(true);
        email.setCharset(HtmlEmail.ISO_8859_1);
        Properties props = new Properties();
        props.setProperty(hostname, "smtp");
        props.setProperty("mail.smtp.host", "smtp.gmail.com");
        props.setProperty("mail.smtp.auth", "true");
        props.setProperty("mail.smtp.port", "" + 587);
        props.setProperty("mail.smtp.starttls.enable", "true");
        Session mailSession = Session.getInstance(props, new DefaultAuthenticator(username, password));
        email.setMailSession(mailSession);
        return email;
}

public static void enviaEmailHtml(String email, String titulo, String texto) {
        try {
            HtmlEmail mensagem = conectaEmail();
            mensagem.addTo(email); 
            mensagem.setSubject(titulo);
            ServletContext sc = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
            File img = new File(sc.getRealPath("") + "/resources/imagens/logoMarca.png");
            mensagem.setHtmlMsg("<html><center><p>"
                    + "<img src=cid:" + mensagem.embed(img) + ">"
                    + texto + "</p></center></html>");
            mensagem.buildMimeMessage();
            Message m = mensagem.getMimeMessage();
            Transport transport = mensagem.getMailSession().getTransport("smtp");
            transport.connect(mensagem.getHostName(), 587, null, null);
            transport.sendMessage(m, m.getAllRecipients());
            System.out.println("E-mail enviado para: " + email);
        } catch (MessagingException ex) {
            Logger.getLogger(FacesUtils.class.getName()).log(Level.SEVERE, null, ex);
        } catch (EmailException ex) {
            Logger.getLogger(FacesUtils.class.getName()).log(Level.SEVERE, null, ex);
        }
}

Utilizo a porta 465 sem nenhum problema para usar o GMail no Java Mail.

Acredito que é problema mesmo de JAR não colocado no classpath ou você está numa rede que precisa de proxy para acessar a Internet. Mas o Java Mail não trabalha com proxy.

wiliamps

Oi, tudo bem? Veja que ele utiliza TLS e a porta para esta conexão segura é a 587 e não a 465.

Dados do Gmail para conexão POP3/SMTP:

Servidor de recebimento de e-mails (POP3) - requer SSL: pop.gmail.com
Usar SSL: sim
Porta: 995

Servidor de e-mails enviados (SMTP) - requer TLS ou SSL: smtp.gmail.com
Usar autenticação: sim
Porta para TLS/STARTTLS: 587
Porta para SSL: 465

Se ele desabilitar o TLS e deixar somente SSL deve funcionar. O e-mail requer ou um ou outro e não os dois como ele está utilizando.

[quote=wiliamps]Utilizo a porta 465 sem nenhum problema para usar o GMail no Java Mail.

Acredito que é problema mesmo de JAR não colocado no classpath ou você está numa rede que precisa de proxy para acessar a Internet. Mas o Java Mail não trabalha com proxy.

wiliamps
http://oracle2java.blogspot.com/[/quote]

Agora funcionou hehehe, na verdade faltou importar o smpt.jar, esqueci :-), não preciso importar pop3 nem imap, já que só vou enviar email e não receber.
Valeu pela ajuda galera. :slight_smile:
Abraço a todos.