我有一個需要發送smtps消息到綠色郵件服務器的騾流。如何將smtps消息發送到獨立的綠色郵件服務器
騾子流使用具有配置密鑰庫和信任的SMTPS連接器:
<smtps:connector name="SMTPS_Connector" validateConnections="true" doc:name="SMTP"> <smtps:tls-client path="${keystore.path}" storePassword="${keystore.password}"/> <smtps:tls-trust-store path="${truststore.path}" storePassword="${truststore.password}"/> </smtps:connector>
我訛詐服務器使用默認值開始。
當我調用我的流量發送一封電子郵件,我得到以下日誌:
在騾子日誌:
ERROR 2017年3月17日19:33:38106 [Default_HTTP_Connector.receiver。 06] org.mule.exception.DefaultMessagingException策略: ************************************** ******************************************消息:無法連接到郵件傳輸。代碼
:MULE_ERROR - 2 ----------------------------------------- ---------------------------------------異常堆棧是: 1.找不到可信任的證書(sun.security.validator.ValidatorException)
sun.security.validator.SimpleValidator:396(空) 2. sun.security.validator.ValidatorException:沒有可信證書發現(javax.net.ssl.SSLHandshakeException)
太陽.security.ssl.Alerts:192 (http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/net/ssl/SSLHandshakeException.html) 3.無法連接到SMTP主機:本地主機,端口:3465(javax.mail.MessagingException的)com.sun.mail.smtp.SMTPTransport:1706 (http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/mail/MessagingException.html) 4.無法連接到郵件傳輸。 (org.mule.api.endpoint.EndpointException)
org.mule.transport.email.SmtpMessageDispatcher:67 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/endpoint/EndpointException.html) --------------------- -------------------------------------------------- ---------根異常堆棧跟蹤:sun.security.validator.ValidatorException: 在 沒有發現可信任的證書sun.security.validator.SimpleValidator.buildTrustedChain(SimpleValidator.java:396) at sun。 security.validator.SimpleValidator.engineValidate(SimpleValidator.java:134) at sun.security.validator.Validator.validate(Validator.java:260) + 3 more(set debug level logging or'-Dmule.verbose.exceptions =真實'的一切)
在訛詐服務器日誌:
ERROR 2017年3月17日19:33:38086 [SMTPS:本地主機:3465 < -/127.0.0.1:27671] com.icegreen .greenmail.smtp.SmtpHandler:意外錯誤處理 連接,quitting = javax.net.ssl.SSLException:連接已被 shutdown:javax.net.ssl.SSLHandshakeException:收到致命警報: certificate_unknown at sun.security.ssl .SSLSocketImpl.checkEOF(SSLSocketImpl.java:1508)at sun.security.ssl.AppInputStream.read(AppInputStream.java:92)at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java :325)at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)at java.io.InputStreamReader.read(InputStreamReader.java:184)處 java.io.BufferedReader中 java.io.BufferedReader.fill(BufferedReader.java:154)在 java.io.BufferedReader.readLine(BufferedReader.java:317)。的readLine(BufferedReader.java:382)在 com.icegreen.greenmail.smtp.SmtpConnection.receiveLine(SmtpConnection.java:57) 在 com.icegreen.greenmail.smtp.SmtpHandler.handleCommand(SmtpHandler.java:82) at com.icegreen.greenmail.smtp.SmtpHandler.run(SmtpHandler.java:56) at com.icegreen.greenmail.server.AbstractServer $ 1.run(AbstractServer.java:163) at java.lang.Thread.run (Thread.java:745)導致: javax.net.ssl.SSLHandshakeException:收到致命警報: certificate_unknown在 sun.security.ssl.Alerts.getSSLException(Alerts.java:192)在 sun.security.ssl.Alerts.getSSLException(Alerts.java:154)在 sun.security.ssl.SSLSocketImpl.recvAlert(在sun.security.ssl上的sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1344) 。 SSLSocketImpl.writeRecord(SSLSocketImpl.java:721) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)at sun。 nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)at sun.nio.c s.StreamEncoder.implFlush(StreamEncoder.java:295)at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)at java。 io.PrintWriter.flush(PrintWriter.java:320)at com.icegreen.greenmail.util.InternetPrintWriter.println(InternetPrintWriter.java:91) at com.icegreen.greenmail.util.InternetPrintWriter.println(InternetPrintWriter.java :196) 在 com.icegreen.greenmail.smtp.SmtpConnection.send(SmtpConnection.java:48) 在 com.icegreen.greenmail.smtp.SmtpHandler.sendGreetings(SmtpHandler.java:76) 在com.icegreen .greenmail.smtp.SmtpHandler.run(SmtpHandler.java:53) ... 2更多
似乎我需要在我的Greenmail服務器上指定一個密鑰庫,但我找不到辦法做到這一點。
我試圖把一個greenmail.jks密碼 '的changeit' 在classpath中,但它給我上啓動這個錯誤:
ERROR 2017年3月17日17:42:24185 [SMTPS:本地主機:3465] com.icegreen.greenmail.util.DummySSLServerSocketFactory:無法 創建和初始化SSL java.security.UnrecoverableKeyException: 不能 sun.security.provider.KeyProtector.recover(KeyProtector.java:328)恢復關鍵在 sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:138) at sun.s ecurity.provider.JavaKeyStore $ JKS.engineGetKey(JavaKeyStore.java:55) at java.security.KeyStore.getKey(KeyStore.java:804)at sun.security.ssl.SunX509KeyManagerImpl。(SunX509KeyManagerImpl.java:131) 在 sun.security.ssl.KeyManagerFactoryImpl $ SunX509.engineInit(KeyManagerFactoryImpl.java:68) 在javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:259) 在 com.icegreen.greenmail.util.DummySSLServerSocketFactory (DummySSLServerSocketFactory。的java:56) 在 com.icegreen.greenmail.util.DummySSLServerSocketFactory.getDefault(DummySSLServerSocketFactory.java:87) 在 com.icegreen.greenmail.server.AbstractServer.openServerSocket(AbstractServer.java:63) 在 COM .icegreen.greenmail.server.AbstractServer.initServerSocket(AbstractServer.java:115) at com.icegreen.greenmail.server.AbstractServer.run(AbstractServer.java:86) 線程「smtps:localhost:3465」中的異常 java.lang.IllegalStateException:無法在 com.icegreen.greenmail.util.DummySSLServerSocketFactory中創建和初始化SSL(DummySSLServerSocketFactory.java:65) at com.icegreen.greenmail.util.DummySSLServerSocketFactory.getDefault(DummySSLServerSocketFactory.java:87) 在 com.icegreen.greenmail.server.AbstractServer.openServerSocket(AbstractServer.java:63) 在 com.icegreen.greenmail.server .AbstractServer.initServerSocket(AbstractServer.java:115) at com.icegreen.greenmail.server.AbstractServer.run(AbstractServer.java:86) 導致:java.security.UnrecoverableKeyException:無法在sun.security恢復密鑰 .provider.KeyProtector.recover(KeyProtector.java:328) 在 sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:138) 在 sun.security.provider.JavaKeySto再$ JKS.engineGetKey(JavaKeyStore.java:55) 在java.security.KeyStore.getKey(KeyStore.java:804)在 sun.security.ssl.SunX509KeyManagerImpl。(SunX509KeyManagerImpl.java:131) 在 的太陽。 security.ssl.KeyManagerFactoryImpl $ SunX509.engineInit(KeyManagerFactoryImpl.java:68) 在javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:259) 在 com.icegreen.greenmail.util.DummySSLServerSocketFactory(DummySSLServerSocketFactory。 java:56)
嗨馬里奧。是的,我使用了keytool。我所做的就是設置商店的密碼並確認'changeit'。如果您熟悉綠色郵件DummySSLServerSocketFactory,並且查看源代碼,則可以看到密碼被硬編碼爲值'changeit'。不熟悉套接字工廠的工作方式,所以我仍在研究如何使用/設置密鑰庫和證書密碼。 – victor