2016-04-13 22 views
4

郵便番号JavaMailSenderImplを使用してメールを送信しています。設定がされて、次のメールを送信できません - javax.net.ssl.SSLException:認識できないSSLメッセージ、平文接続?

<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 

コンソールログがあるので、これはSSL証明書に関連していないことを

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 

我々は確信しています同じサーバーに配備されている他のWebアプリケーション同じ構成。ここで何が問題になるのでしょうか?

+0

設定は正しいですか? SMTP SSLポートは通常25以上ではありません465 – Leon

+0

Positive。同じサーバー内の異なるアプリケーションは同じ設定を持ち、電子メールを送信できます。 – ArunM

答えて

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

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

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

平文の接続は、認識できないのですか?あなたがポート25 mail.smtp.ssl.enableのために、すなわち、ポートに応じて、両方の暗黙的または明示的なSSLを使用してではなく、どちらかのことを確認して、それを修正するには

はfalseにする必要があります。

+0

私はこれを試してみます。しかし、混乱しているのは、同じTomcatサーバー内の別のアプリケーションで両方を有効にし、メールがうまく動作することです。ここには、Tomcatのデプロイされたアプリケーション固有のものはありますか? – ArunM

+0

@ArunM:TLS内でTLSを行うのは意味がないため、暗黙的なTLSが既に実行されている場合、明示的なTLS(STARTTLS)を試行しないと思います。つまり、 'mail.smtp.starttls.enable'は' mail.smtp.ssl.enable'が真であり、したがってポート465(smtps)を持つすべての接続がうまく動作すれば暗黙的に無視されます。 –

関連する問題