it-swarm.com.de

Es konnte keine Verbindung zum SMTP-Host hergestellt werden: smtp.gmail.com, Port: 587; geschachtelte Ausnahme ist: Java.net.ConnectException: Zeitüberschreitung der Verbindung: Verbindung

Hier ist der Code der Anwendung. Ich habe versucht, dies mit Eclipse IDE auszuführen. Ich habe auch alle erforderlichen Java-Mail-JAR-Dateien hinzugefügt, nämlich dsn.jar,imap.jar,mailapi.jar,pop3.jar,smtp.jar,mail.jar. Es wird jedoch der folgende Fehler Could not connect to SMTP Host: smtp.gmail.com, port: 587 ausgegeben.

Es gibt keine Firewall, die den Zugriff blockiert, weil auf ping smtp.gmail.com eine Antwort empfangen wird. Ich habe es sogar so versucht:

javax.mail.MessagingException: Verbindung zum SMTP-Host konnte nicht hergestellt werden: smtp.gmail.com, Port: 587; Verschachtelte Ausnahme ist: Java.net.ConnectException: Verbindungszeitpunkt out: connect unter com.Sun.mail.smtp.SMTPTransport.openServer (SMTPTransport.Java:1972) unter com.Sun.mail.smtp.SMTPTransport.protocolConnect (SMTPTransport.Java:642 ) bei javax.mail.Service.connect (Service.Java:317) bei javax.mail.Service.connect (Service.Java:176) bei javax.mail .Service.connect (Service.Java:125) Unter javax.mail.Transport.send0 (Transport.Java:194) Unter javax.mail.Transport.send (Transport.Java:124 ) um PlainTextEmailSender.sendPlainTextEmail (PlainTextEmailSender.Java:50) um PlainTextEmailSender.main (PlainTextEmailSender.Java:73) verursacht. Zeitüberschreitung der Verbindung : connect unter Java.net.DualStackPlainSocketImpl.conn ect0 (native Methode) unter Java.net.DualStackPlainSocketImpl.socketConnect (unbekannte Quelle) unter Java.net.AbstractPlainSocketImpl.doConnect (unbekannte Quelle) unter Java.net.AbstractPlainSocketImpl .connectToAddress (unbekannte Quelle) bei Java.net.AbstractPlainSocketImpl.connect (unbekannte Quelle) bei Java.net.PlainSocketImpl.connect (unbekannte Quelle) bei Java.net. SocksSocketImpl.connect (unbekannte Quelle) Bei Java.net.Socket.connect (unbekannte Quelle) Bei Java.net.Socket.connect (unbekannte Quelle) Bei com.Sun .mail.util.SocketFetcher.createSocket (SocketFetcher.Java:319) unter com.Sun.mail.util.SocketFetcher.getSocket (SocketFetcher.Java:233) unter 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

Wie gesagt, mit Ihrem Code stimmt nichts. Wenn Sie etwas testen möchten, löschen Sie den Authentifizierungsteil, um zu sehen, ob das funktioniert:

    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

    }

Das ist der Code, den ich jeden Tag verwende, um Dutzende von E-Mails aus meiner Anwendung zu senden, und er ist zu 100% garantiert - sofern smtp.gmail.com:587 natürlich erreichbar ist.

0
walen

E-Mail erfolgreich durch Gmail mit JDK 7 mit den folgenden GmailNAME _ Einstellungen .

Gehen Sie zu GmailNAME _ Settings > Accounts and Import > Other Google Account settings > und unter Sign-in & security

  1. 2-Step Verification: Off
  2. Allow less secure apps: ON
  3. App Passwords: 1 password (16 Zeichen lang), später das aktuelle Passwort durch dieses ersetzt.

verwendet folgende maven Abhängigkeiten:

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>

und mein Quellcode ist:

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

    }

}

Hoffe das wird jemandem helfen.

0
ArifMustafa

Versuchen Sie diese Schritte

Schritt 2: Mail von Ihrem Gerät oder Ihrer Anwendung senden

Wenn Sie eine Verbindung über SSL oder TLS herstellen, können Sie E-Mails an jeden mit smtp.gmail.com senden.

Hinweis: Bevor Sie mit der Konfiguration beginnen, empfehlen wir, App-Kennwörter für das gewünschte Konto einzurichten. Weitere Informationen finden Sie unter Anmelden mit App-Kennwörtern und Verwalten der Sicherheitseinstellungen eines Benutzers.

Stellen Sie über Port 465 eine Verbindung zu smtp.gmail.com her, wenn Sie SSL verwenden. (Stellen Sie eine Verbindung über Port 587 her, wenn Sie TLS verwenden.) Melden Sie sich mit einem Google-Nutzernamen und einem Google-Passwort zur Authentifizierung an, um eine Verbindung mit SSL oder TLS herzustellen. Stellen Sie sicher, dass der von Ihnen verwendete Benutzername den CAPTCHA Word-Bestätigungstest deaktiviert hat, der bei der ersten Anmeldung angezeigt wird.

0
criscan

Für alle, die noch auf einfache Weise nach der Antwort suchen, hier die Antwort:

Schritt 1: Die meisten Anti-Virus-Programme blockieren das Senden von E-Mails vom Computer über eine interne Anwendung. Wenn Sie also eine Fehlermeldung erhalten, müssen Sie Ihr Anti-Virus-Programm deaktivieren, während Sie diese E-Mail-Sendemethoden/APIs aufrufen.

Schritt 2: Der SMTP-Zugriff auf Google Mail ist standardmäßig deaktiviert. Befolgen Sie diese Schritte, um der Anwendung das Senden von E-Mails über Ihr Google Mail-Konto zu ermöglichen

  1. Öffnen Sie den Link: https://myaccount.google.com/security?pli=1#connectedapps
  2. Setzen Sie in der Sicherheitseinstellung "Weniger sichere Apps zulassen" auf [~ # ~] bei [~ # ~] .

Schritt 3: Hier ist ein Codeausschnitt aus dem von mir verwendeten Code, der problemlos funktioniert. Von EmailService.Java:

private Session getSession() {
    //Gmail Host
    String Host = "smtp.gmail.com";
    String username = "[email protected]";
    //Enter your Gmail password
    String password = "";

    Properties prop = new Properties();
    prop.put("mail.smtp.auth", true);
    prop.put("mail.smtp.starttls.enable", "true");
    prop.put("mail.smtp.Host", Host);
    prop.put("mail.smtp.port", 587);
    prop.put("mail.smtp.ssl.trust", Host);

    return Session.getInstance(prop, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });
}

Ich habe auch einen Blog-Beitrag und eine funktionierende Anwendung auf GitHub mit diesen Schritten geschrieben. Bitte überprüfen Sie: http://softwaredevelopercentral.blogspot.com/2019/05/send-email-in-Java.html

0