web-dev-qa-db-fra.com

Impossible de se connecter à l'hôte SMTP: smtp.gmail.com, port: 587; L'exception imbriquée est la suivante: Java.net.ConnectException: la connexion a expiré: connect

Voici le code de l'application. J'ai essayé d'exécuter cela en utilisant Eclipse IDE. J'ai également ajouté tous les fichiers jar de courrier électronique Java requis, à savoir dsn.jar,imap.jar,mailapi.jar,pop3.jar,smtp.jar,mail.jar. Mais cela donne l’erreur suivante Could not connect to SMTP Host: smtp.gmail.com, port: 587.

Aucun pare-feu ne bloque l’accès car une réponse est envoyée à smtp.gmail.com . Je l’ai même essayé de cette façon:

javax.mail.MessagingException: Impossible de se connecter à l'hôte SMTP: smtp.gmail.com, port: 587; exception imbriquée est la suivante: Java.net.ConnectException: Connexion expirée: connectez-vous à l'adresse com.Sun.mail.smtp.SMTPTransport.openServer (SMTPTransport.Java:1972) à l'adresse com.Sun.mail.smtp.SMTPTransport.protocolConnect (SMTPTransport.Java:642) à javax.mail.Service.connect (Service.Java:317) à javax.mail.Service.connect (Service.Java:176) à javax.mail.Service.connect (Service.Java:125) sur javax.mail.Transport.send0 (Transport.Java:194) à javax.mail.Transport.send (Transport.Java:124) sur PlainTextEmailSender.sendPlainTextEmail (PlainTextEmailSender.Java:50) sur PlainTextEmailSender.main (PlainTextEmailSender.Java:73) Causée par: Java.net.ConnectException: Connexion expirée: connect sur Java.net.DualStackPlainSocketImpl.connect0 (Méthode native) sur Java.net.DualStackPlainSocketImpl.socketConnect (Source inconnue) sur Java.net.AbstractPlainSocketImpl.doConnect (Source inconnue) sur Java.net.AbstractPlainSocketImpl.connectToAddress (Source inconnue) sur Java.net.AbstractPlainSocketImpl.connect (Source inconnue) sur Java.net.PlainSocketImpl.connect (Source inconnue) sur Java.net.SocksSocketImpl.connect (Source inconnue) sur Java.net.Socket.connect (Source inconnue) sur Java.net.Socket.connect (Source inconnue) sur com.Sun.mail.util.SocketFetcher.createSocket (SocketFetcher.Java:319) à l'adresse com.Sun.mail.util.SocketFetcher.getSocket (SocketFetcher.Java:233) à l'adresse com.Sun.mail.smtp.SMTPTransport.openServer (SMTPTransport.Java:1938)

    package net.codejava.mail;

    import Java.util.Date;
    import Java.util.Properties;

    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;

    public class PlainTextEmailSender {

        public void sendPlainTextEmail(String Host, String port,
                final String userName, final String password, String toAddress,
                String subject, String message) throws AddressException,
                MessagingException {

            // sets SMTP server properties
            Properties properties = new Properties();
            properties.put("mail.smtp.Host", Host);
            properties.put("mail.smtp.port", port);
            properties.put("mail.smtp.auth", "true");
            properties.put("mail.smtp.starttls.enable", "true");

            // creates a new session with an authenticator
            Authenticator auth = new Authenticator() {
                public PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(userName, password);
                }
            };

            Session session = Session.getInstance(properties, auth);

            // creates a new e-mail message
            Message msg = new MimeMessage(session);

            msg.setFrom(new InternetAddress(userName));
            InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
            msg.setRecipients(Message.RecipientType.TO, toAddresses);
            msg.setSubject(subject);
            msg.setSentDate(new Date());
            // set plain text message
            msg.setText(message);

            // sends the e-mail
            Transport.send(msg);

        }

        /**
         * Test the send e-mail method
         *
         */
        public static void main(String[] args) {
            // SMTP server information
            String Host = "smtp.gmail.com";
            String port = "587";
            String mailFrom = "user_name";
            String password = "password";

            // outgoing message information
            String mailTo = "email_address";
            String subject = "Hello my friend";
            String message = "Hi guy, Hope you are doing well. Duke.";

            PlainTextEmailSender mailer = new PlainTextEmailSender();

            try {
                mailer.sendPlainTextEmail(Host, port, mailFrom, password, mailTo,
                        subject, message);
                System.out.println("Email sent.");
            } catch (Exception ex) {
                System.out.println("Failed to sent email.");
                ex.printStackTrace();
            }
        }
    }
6
zainab rizvi

Comme je l'ai dit, il n'y a rien de mal avec votre code. Au besoin, essayez de supprimer la partie Authentification pour voir si cela fonctionne:

    public void sendPlainTextEmail(String Host, String port,
            final String userName, final String password, String toAddress,
            String subject, String message) throws AddressException,
            MessagingException {

        // sets SMTP server properties
        Properties properties = new Properties();
        properties.put("mail.smtp.Host", Host);
        properties.put("mail.smtp.port", port);
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
// *** BEGIN CHANGE
        properties.put("mail.smtp.user", userName);

        // creates a new session, no Authenticator (will connect() later)
        Session session = Session.getDefaultInstance(properties);
// *** END CHANGE

        // creates a new e-mail message
        Message msg = new MimeMessage(session);

        msg.setFrom(new InternetAddress(userName));
        InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
        msg.setRecipients(Message.RecipientType.TO, toAddresses);
        msg.setSubject(subject);
        msg.setSentDate(new Date());
        // set plain text message
        msg.setText(message);

// *** BEGIN CHANGE
        // sends the e-mail
        Transport t = session.getTransport("smtp");
        t.connect(userName, password);
        t.sendMessage(msg, msg.getAllRecipients());
        t.close();
// *** END CHANGE

    }

C’est le code que j’utilise chaque jour pour envoyer des dizaines de courriels à partir de mon application, et son fonctionnement est garanti à 100% - à condition que smtp.gmail.com:587 soit accessible, bien sûr.

0
walen

Email réussi à travers Gmail en utilisant JDK 7 avec ci-dessous Gmail paramètres .

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

  1. 2-Step Verification: Off
  2. Allow less secure apps: ON
  3. App Passwords: 1 password (16 caractères), a plus tard remplacé le mot de passe actuel par ceci.

utilisé les dépendances suivantes:

spring-core:4.2.2
spring-beans:4.2.2
spring-context:4.2.2
spring-context-support:4.2.2
spring-expression:4.2.2
commons-logging:1.2

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

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

        //Spring Framework JavaMailSenderImplementation    
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.gmail.com");
        mailSender.setPort(465);

        //setting username and password
        mailSender.setUsername(String.valueOf(resourceList.get(0)));
        mailSender.setPassword(String.valueOf(resourceList.get(1)));

        //setting Spring JavaMailSenderImpl Properties
        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");
        mailProp.put("mail.smtp.user", String.valueOf(resourceList.get(0)));

        //preparing Multimedia Message and sending
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setTo(toMailId);
            helper.setSubject("I achieved the Email with Java 7 and Spring");
            helper.setText(htmlMessage, true);//setting the html page and passing argument true for 'text/html'

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

    }

}

J'espère que cela aidera quelqu'un.

0
ArifMustafa