web-dev-qa-db-fra.com

MailConnectException: impossible de se connecter à l'hôte, port: smtp.gmail.com, 465; délai d'attente -1

Je dois envoyer un courrier électronique à partir de mon application en utilisant Gmail en tant que serveur SMTP. Ceci est ma classe de connecteur de messagerie et j'ai défini les valeurs dans un fichier de propriétés séparé.

    public class EmailConnector {


    public static Session sessionCreate() {
        final String fromEmail = ConfigurationManager.getInstance().getProperty(EmailConfig.SENDER_EMAIL.toString());

        final String password = ConfigurationManager.getInstance().getProperty(EmailConfig.SENDER_PASSWORD.toString());

        Properties props = new Properties();
        props.put("mail.smtp.Host", ConfigurationManager.getInstance().getProperty(EmailConfig.SMTP_Host.toString()));

        props.put("mail.smtp.socketFactory.port",
                ConfigurationManager.getInstance().getProperty(EmailConfig.SSL_PORT.toString()));

        props.put("mail.smtp.socketFactory.class",
                ConfigurationManager.getInstance().getProperty(EmailConfig.SSL_FACTORY_CLASS.toString()));

        props.put("mail.smtp.auth",
                ConfigurationManager.getInstance().getProperty(EmailConfig.SMTP_AUTHENTICATION.toString()));

        props.put("mail.smtp.port", ConfigurationManager.getInstance().getProperty(EmailConfig.SMTP_PORT.toString()));

        Authenticator auth = new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(fromEmail, password);
            }
        };
        return Session.getDefaultInstance(props, auth);
    }
}

Propriétés:

#Email send configuration
SENDER_EMAIL = [email protected]
SENDER_PASSWORD = abcalert321
SMTP_Host = smtp.gmail.com
SSL_PORT = 465
SMTP_AUTHENTICATION = true
SMTP_PORT = 465
SSL_FACTORY_CLASS = javax.net.ssl.SSLSocketFactory

Ensuite, j'ai implémenté une classe d'expéditeur de courrier, appelée "GroupEmail.class" 

public class GroupEmail {

    public void sendEmail() throws IOException {
        String recipient = "[email protected]";

        Session session = EmailConnector.sessionCreate();
        /* subject of email */
        String emailSubject = "ABC_Alert";
        try {
            MimeMessage msg = new MimeMessage(session);
            msg.addHeader("Content-type", "text/HTML; charset=UTF-8");
            msg.addHeader("format", "flowed");
            msg.addHeader("Content-Transfer-Encoding", "8bit");

            msg.setFrom(new InternetAddress("[email protected]", "ABC Alerts"));

            msg.setReplyTo(InternetAddress.parse("[email protected]"));

            msg.setSubject(emailSubject, "UTF-8");

            msg.setSentDate(new Date());
            /* buyer email address */
            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient));

            /* Create the message body part */
            msg.setText("A new Test-Alert from AB_Alerts");

            /* Send message */
            Transport.send(msg, "[email protected]", "abcalert321");

        } catch (MessagingException | UnsupportedEncodingException e) {
            SystemLogger.logErrorMessege(this, e);
        }
    }

}

Après tout, j’ai appelé "GroupEmail.class" à un endroit où je devais déclencher l’envoi du courrier électronique. 

GroupEmail groupEmail = new GroupEmail();
        groupEmail.sendEmail(); 

J'ai utilisé le serveur Tomcat v8 sur localhost et lorsque l'application fonctionne, j'ai l'exception ci-dessous.

98656 [http-nio-8080-exec-9] ERROR it.codegen.rnd.cgalert.notification.template.email.GroupEmail  - Couldn't connect to Host, port: smtp.gmail.com, 465; timeout -1
com.Sun.mail.util.MailConnectException: Couldn't connect to Host, port: smtp.gmail.com, 465; timeout -1;
  nested exception is:
    Java.net.SocketException: Permission denied: connect
    at com.Sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.Java:2100)
    at com.Sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.Java:699)
    at javax.mail.Service.connect(Service.Java:388)
    at javax.mail.Service.connect(Service.Java:246)
    at javax.mail.Service.connect(Service.Java:195)
    at javax.mail.Transport.send0(Transport.Java:254)
    at javax.mail.Transport.send(Transport.Java:124)
..more
3
NmaD

Corrigez ces erreurs erreurs courantes dans JavaMail .

Suivez les astuces de débogage de connexion dans JavaMail FAQ .

Il est fort probable qu'un pare-feu ou un produit antivirus vous empêche de vous connecter.

Si Tomcat est exécuté avec un gestionnaire de sécurité Java, le JavaMail FAQ contient des informations sur la configuration des autorisations de sécurité . Si cela ne résout pas le problème, le JavaMail FAQ contient également des informations sur les problèmes de débogage liés aux autorisations de sécurité .

Ai-je mentionné que vous devriez lire le JavaMail FAQ ? :-)

2
Bill Shannon

Je sais que c'est une réponse très tardive, mais je souhaite partager mon expérience lorsque je suis confronté au même problème et que j'ai essayé presque Java core mail api, Apache mail api et Spring également pour MimeMessage.

J'ai essayé plus de 50 fois avec Java JDK 1.7.0_80 et échoué à plusieurs reprises avec l'exception soumise ci-dessus, puis je suis passé à JDK 1.8.0_151.

Avant d’illustrer le code source, j’aimerais partager ma configuration.

Allez à Gmail> Settings> Other Google Account settings sous Accounts and Import> Sign-in & security.

Autoriser les applications moins sécurisées: OFF (mon application n'est pas moins sécurisée)

Vérification en 2 étapes: Off

Mots de passe de l'application (Cliquez dessus pour que Google génère un mot de passe de 16 caractères, puis modifiez votre mot de passe Gmail avec ce mot de passe de 16 caractères (sans espace)).

 Google Generated App Password

Maintenant, mon code source est:

import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.swing.JOptionPane;
import Java.util.List;
import Java.util.Properties;

public class Email {

    public final void prepareAndSendEmail(String htmlMessage, String toMailId) {

        final OneMethod oneMethod = new OneMethod();
        final List<char[]> resourceList = oneMethod.getValidatorResource();

        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.gmail.com");
        mailSender.setPort(465);

        mailSender.setUsername(String.valueOf(resourceList.get(0)));
        mailSender.setPassword(String.valueOf(resourceList.get(1)));

        //from email id and password
        System.out.println("Username is : " + String.valueOf(resourceList.get(0)).split("@")[0]);
        System.out.println("Password is : " + String.valueOf(resourceList.get(1)));

        Properties mailProp = mailSender.getJavaMailProperties();
        mailProp.put("mail.transport.protocol", "smtp");
        mailProp.put("mail.smtp.auth", "true");
        mailProp.put("mail.smtp.starttls.enable", "true");
        mailProp.put("mail.smtp.starttls.required", "true");
        mailProp.put("mail.debug", "true");
        mailProp.put("mail.smtp.ssl.enable", "true");

        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setTo(toMailId);
            helper.setSubject("Welcome to Subject Part");
            helper.setText(htmlMessage, true);

            //Checking Internet Connection and then sending the mail
            if(OneMethod.isNetConnAvailable())
                mailSender.send(mimeMessage);
            else
                JOptionPane.showMessageDialog(null, "No Internet Connection Found...");
        } catch (MessagingException e) {
            e.printStackTrace();
        }

    }

}

et les enregistrements de débogage Spring mail sont indiqués ci-dessous:

Username is : exampleusername
Password is : abcdefghijklmnop
DEBUG: JavaMail version 1.6.0
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,Oracle], com.Sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.Sun.mail.smtp.SMTPTransport,Oracle], com.Sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.Sun.mail.imap.IMAPSSLStore,Oracle], com.Sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.Sun.mail.pop3.POP3SSLStore,Oracle], com.Sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.Sun.mail.imap.IMAPStore,Oracle], com.Sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.Sun.mail.pop3.POP3Store,Oracle]}
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.Sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.Sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.Sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.Sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.Sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.Sun.mail.smtp.SMTPTransport,Oracle]}
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.Sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to Host "smtp.gmail.com", port 465, isSSL true
220 smtp.gmail.com ESMTP 12sm62330270pfr.147 - gsmtp
DEBUG SMTP: connected to Host "smtp.gmail.com", port: 465

EHLO Administrator
250-smtp.gmail.com at your service, [157.48.195.205]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
DEBUG SMTP: STARTTLS requested but already using SSL
DEBUG SMTP: protocolConnect login, Host=smtp.gmail.com, [email protected], password=<non-null>
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 
DEBUG SMTP: Using mechanism LOGIN
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<Administrator@Administrator>
250 2.1.0 OK 12sm62330270pfr.147 - gsmtp
RCPT TO:<[email protected]>
250 2.1.5 OK 12sm62330270pfr.147 - gsmtp
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   [email protected]
DATA
354  Go ahead 12sm62330270pfr.147 - gsmtp
Date: Mon, 19 Feb 2018 18:55:29 +0530 (IST)
To: [email protected]
Message-ID: <2023168072.2.1519046734494@Administrator>
Subject: Welcome to Subject Part
MIME-Version: 1.0
Content-Type: multipart/mixed; 
    boundary="----=_Part_0_1884507527.1519046720984"

------=_Part_0_1884507527.1519046720984
Content-Type: multipart/related; 
    boundary="----=_Part_1_1634862487.1519046721031"

------=_Part_1_1634862487.1519046721031
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<!DOCTYPE html>
<html>
Your html page source code is here
</html>

------=_Part_1_1634862487.1519046721031--

------=_Part_0_1884507527.1519046720984--
.
250 2.0.0 OK 1519046738 12sm62330270pfr.147 - gsmtp
DEBUG SMTP: message successfully delivered to mail server
QUIT
221 2.0.0 closing connection 12sm62330270pfr.147 - gsmtp

Vérifiez également que votre connexion Internet, vos paramètres antivirus et votre accès au pare-feu ne sont pas interrompus. Nous espérons que cela aidera beaucoup de personnes à perdre du temps.

0
ArifMustafa