Nous envoyons du courrier en utilisant Spring JavaMailSenderImpl. Voici la configuration
<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>
Fichier de propriétés: -
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
Journaux de la console
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
Nous sommes convaincus que cela n'est pas lié au certificat SSL car il existe d'autres applications Web déployées sur le même serveur qui envoient parfaitement des e-mails avec la même configuration. Quel pourrait être le problème ici ?
<prop key="mail.smtp.starttls.enable">${mail.smtp.starttls.enable}</prop>
<prop key="mail.smtp.ssl.enable">true</prop>
Vous voulez soit mail.smtp.ssl.enable
pour SSL implicite directement après TCP connect (port 465) ou mail.smtp.starttls.enable
pour SSL explicite à l'aide de la commande STARTTLS (port 25). Mais avec vos propriétés actuelles, vous définissez les deux sur true.
Cela signifie qu'il fera une TCP connexion au port 25 et y tentera une négociation SSL. Cela échouera car le serveur envoie un message d'accueil en texte brut à partir de la boîte de dialogue SMTP et non la négociation SSL attendue. Ainsi vous obtenez
Message SSL non reconnu, connexion en texte brut?
Pour le corriger, assurez-vous que vous utilisez SSL implicite ou explicite, mais pas les deux en fonction du port, c'est-à-dire pour le port 25 mail.smtp.ssl.enable
devrait être faux.