[Resolvido] Erro ao enviar email - Can't send command to SMTP host

Bom dia!

Estou tentando fazer um envio de email, mas acabei batendo em um erro que não estou conseguindo resolver…

O erro é o seguinte : [javax.mail.MessagingException: Can’t send command to SMTP host; nested exception is: java.net.SocketException: Connection closed by remote host]

Estou utilizando as seguintes propriedades:

Properties p = new Properties();
p.setProperty("mail.smtp.starttls.enable", "true");
p.setProperty("mail.transport.protocol", "smtp");
p.setProperty("mail.smtp.host", ConfiguracaoGlobal.getConfiguracaoGlobal().getServidorSTMP());
p.setProperty("mail.smtp.port", ConfiguracaoGlobal.getConfiguracaoGlobal().getPorta());
p.setProperty("mail.smtp.auth", ConfiguracaoGlobal.getConfiguracaoGlobal().getAutentificacao().toString());

Você está utilizando commons-email?

para enviar um e-mail basta fazer isso:

public class EnviarEmail {

 private static final String HOST = "smtp.gmail.com";
 private static final String USER = "usuarioEmail";
 private static final String PW = "senhaEmail";
 private static final String OG = "teste@gmail.com";

 public static Email conectar() throws EmailException {
 Email email = new SimpleEmail();
 email.setHostName(HOST);
 email.setSmtpPort(587);
 email.setAuthenticator(new DefaultAuthenticator(USER, PW));
 email.setTLS(true);
 email.setFrom(OG);
 return email;
 }

 public static void enviar(Mensagem novaMensagem) throws EmailException {
 Email email = new SimpleEmail();
 email = conectaEmail();
 email.setSubject(mensagem.getTitulo());
 email.setMsg(mensagem.getMensagem());
 email.addTo(mensagem.getDestino());
 String resposta = email.send();
 }
 }

com o common-email, ele já deixa tudo de mão beijada :smiley:

Cara, estou usando o javax.mail e não tenho como trocar, a não ser que altere várias coisas… Gostaria de resolver o problema do jeito que está :frowning:

tenta com esse modelo então:

package org.kodejava.example.mail;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;

public class GmailSendEmailSSL {
    public static final String USERNAME = "username";
    public static final String PASSWORD = "password";

    public static void main(String[] args) throws Exception {
        //
        // Email information such as from, to, subject and contents.
        //
        String mailFrom = "email@gmail.com";
        String mailTo = "email@gmail.com";
        String mailSubject = "SSL - Gmail Send Email Demo";
        String mailText = "SSL - Gmail Send Email Demo";

        GmailSendEmailSSL gmail = new GmailSendEmailSSL();
        gmail.sendMail(mailFrom, mailTo, mailSubject, mailText);
    }

    private void sendMail(String mailFrom, String mailTo,
                          String mailSubject, String mailText)
            throws Exception {

        Properties config = createConfiguration();

        //
        // Creates a mail session. We need to supply username and
        // password for Gmail authentication.
        //
        Session session = Session.getInstance(config, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(
                        GmailSendEmailSSL.USERNAME,
                        GmailSendEmailSSL.PASSWORD
                );
            }
        });

        //
        // Creates email message
        //
        Message message = new MimeMessage(session);
        message.setSentDate(new Date());
        message.setFrom(new InternetAddress(mailFrom));
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo));
        message.setSubject(mailSubject);
        message.setText(mailText);

        //
        // Send a message
        //
        Transport.send(message);
    }

    private Properties createConfiguration() {
        return new Properties() {{
            put("mail.smtp.host", "smtp.gmail.com");
            put("mail.smtp.auth", "true");
            put("mail.smtp.port", "465");
            put("mail.smtp.socketFactory.port", "465");
            put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        }};
    }
}

É exatamente assim que estou trabalhando com a minha classe. Meu problema está nas properties…

Tentei adicionar estas duas :

put("mail.smtp.socketFactory.port", "465");  
put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 

Mas continua dando erro, agora diz o seguinte: Unrecognized SSL message

Tem o link no próprio api do javamail falando desse tipo de erro, o link direto pra ele é esse aqui, você está tentando enviar um email seguro por uma porta insegura.

ah, um detalhe, se você está enviando um e-mail com SSL, você deve utilizar smtps

Não tinha jeito, mas acabei resolvendo escolhendo um email de outro servidor para servir como email padrão de envio…

Valeu pela força!