web-dev-qa-db-ja.com

MailConnectException:ホストに接続できませんでした、ポート:smtp.gmail.com、465;タイムアウト-1

SMTPサーバーとしてGmailを使用して、アプリケーションからメールを送信する必要があります。これは私のメールコネクタクラスであり、別のプロパティファイルに値を設定しています

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

プロパティ:

#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

次に、「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);
        }
    }

}

結局、メールの送信をトリガーする必要がある場所で「GroupEmail.class」を呼び出しました。

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

ローカルホストでTomcat v8サーバーを使用しましたが、アプリケーションが機能するときに、次の例外が発生しました。

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
4
NmaD

これらを修正 JavaMailの一般的な間違い

JavaMail FAQの接続デバッグのヒント に従ってください。

ファイアウォールまたはウイルス対策製品が原因で接続できない可能性があります。

TomcatがJavaセキュリティマネージャで実行されている場合、 JavaMail FAQにセキュリティ権限の設定に関する情報があります 。それができない場合ヘルプ、 JavaMail FAQにはセキュリティ権限に関する問題のデバッグに関する情報もあります

JavaMail FAQ をお読みください。 :-)

2
Bill Shannon

私はこれが非常に遅い答えであることを知っていますが、同じ問題に直面し、ほぼJavaコアメールAPI、ApacheメールAPIとSpringも試したときの経験を共有したいと思いますMimeMessageの場合。

Java JDK 1.7.0_80で50回以上試しましたが、上記の例外により繰り返し失敗し、JDK 1.8.0_151に移動しました。

ここで、ソースコードを説明する前に、私の設定を共有したいと思います。

Other Google Account settings> Accounts and Importの下のGmail> Settings> Sign-in & securityに移動します。

安全性の低いアプリを許可:オフ(アプリケーションの安全性が低くないことを意味します)

2段階認証:オフ

App Passwords(それをクリックすると、Googleが16文字の長さのパスワードを生成します。後で、この16文字の長さのパスワードでGmailパスワードを変更します(スペースなし))。

Google Generated App Password

今、私のソースコードは:

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

    }

}

Spring mailデバッグログは以下のとおりです。

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

また、インターネット接続、ウイルス対策設定、ファイアウォールアクセスが中断されていないかどうかを確認してください。これにより、多くの時間が無駄になるのを防ぐことができます。

0
ArifMustafa