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

7 respostas
J

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());

7 Respostas

A

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 = "[email removido]";

 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:

J

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:

A

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 removido]";
        String mailTo = "[email removido]";
        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");
        }};
    }
}
J

É 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

A

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.

A

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

J

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!

Criado 11 de maio de 2012
Ultima resposta 11 de mai. de 2012
Respostas 7
Participantes 2