web-dev-qa-db-ja.com

メールを送信できません-javax.net.ssl.SSLException:認識できないSSLメッセージ、プレーンテキスト接続?

Spring JavaMailSenderImplを使用してメールを送信しています。以下は設定です

 <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="Host" value="${Host}"/>
        <property name="port" value="${port}"/>
        <property name="username" value="${mail.username}"/>
        <property name="password" value="${mail.password}"/>
        <property name="javaMailProperties">
            <props>
                <!-- Use SMTP transport protocol -->
                <prop key="mail.transport.protocol" >${mail.transport.protocol}</prop>
                <!-- Use SMTP-AUTH to authenticate to SMTP server -->
                <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
                <!-- Use TLS to encrypt communication with SMTP server -->
                <prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop>
                <prop key="mail.debug">false</prop>
                <prop key="mail.smtp.ssl.enable">true</prop>
            </props>
        </property>
    </bean>

プロパティファイル:-

Host=XXXX.XXXX.XX
port=25
mail.username=xxxxxxxx
mail.password=xxxxxxx
mail.transport.protocol=smtp
mail.smtp.auth=true
mail.smtp.starttls.enable=true

コンソールログ

Exception in thread "taskExecutor-2" org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP Host: XXXX.XXXX.XX, port: 25;
      nested exception is:
            javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?. Failed messages: javax.mail.MessagingException: Could not connect to SMTP Host: XXXX.XXXX.XX, port: 25;
      nested exception is:
            javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?; message exception details (1) are:
    Failed message 1:
    javax.mail.MessagingException: Could not connect to SMTP Host: XXXX.XXXX.XX, port: 25;
      nested exception is:
            javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
            at com.Sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.Java:1934)
            at com.Sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.Java:638)
            at javax.mail.Service.connect(Service.Java:295)
            at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.Java:389)
            at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.Java:340)
            at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.Java:336)
            at com.XXXX.Mailer$1.run(Mailer.Java:52)
            at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1145)
            at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615)
            at Java.lang.Thread.run(Thread.Java:744)
    Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
            at Sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.Java:671)
            at Sun.security.ssl.InputRecord.read(InputRecord.Java:504)
            at Sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.Java:927)
            at Sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.Java:1312)
            at Sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:1339)
            at Sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:1323)
            at com.Sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.Java:507)
            at com.Sun.mail.util.SocketFetcher.getSocket(SocketFetcher.Java:238)
            at com.Sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.Java:1900)
            ... 9 more

同じサーバーにデプロイされ、同じ構成で完全にEメールを送信する他のWebアプリケーションがあるため、これはSSL証明書とは関係がないと確信しています。ここの問題は何でしょうか?

11
ArunM
<prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop>
<prop key="mail.smtp.ssl.enable">true</prop>

TCP接続(ポート465)の直後の暗黙的なSSLの場合はmail.smtp.ssl.enable、またはSTARTTLSコマンドを使用した明示的なSSL(ポート25)の場合はmail.smtp.starttls.enableが必要です。ただし、現在の両方をtrueに設定したプロパティ。

これは、TCPポート25に接続し、そこでSSLハンドシェイクを試行することを意味します。サーバーがSMTPダイアログからプレーンテキストグリーティングを送信し、予想されるSSLハンドシェイクを送信しないため、これは失敗します。したがって、あなたは得る

認識できないSSLメッセージ、プレーンテキスト接続?

これを修正するには、暗黙的または明示的なSSLを使用する必要がありますが、ポートによっては両方を使用しないでください。つまり、ポート25の場合、mail.smtp.ssl.enableはfalseにする必要があります。

12
Steffen Ullrich