2016-07-12 5 views
-2

이상한 문제가 있습니다. 내 SMTP 서버가 리눅스 호스트 (postfix/dovecot)에 배포됩니다. Spring MVC + Tomcat 기반의 웹 애플리케이션이있다. 로컬 맥북에서 Lunix 서버 (Centos)의 SMTP 서버에 연결하면 메시지가 제대로 전송됩니다. 그러나 Linux 시스템에서 Tomcat 7 (신뢰할 수있는 CA 인증서 SSL 포함)에 웹 응용 프로그램을 배포하면 서버에서 354 수신 후 Connection에서 거부 된 예외를 제공하게됩니다. 또한 smtp에 대한 열린 SSL 인증서를 생성하고 jdk/jre/lib/security/cacert의 신뢰할 수있는 인증서에 추가했습니다. 나는 맥북과 리눅스 서버에서 모두 smtp와 smtps를 시도했다. dev에, 둘 다 작동합니다. 리눅스 (prod)에서는 둘 다 실패합니다. dev와 prod 모두에서 인증 및 로그인 할 수 있습니다. 그것은 '354 End data with.'이후입니다. SMTP에서 응답, dev 및 prod의 동작이 다릅니다. 내 스프링 appServerContext.xml에서smtp 접미사와 동일한 컴퓨터에 배포 된 웹 서버에서만 354 이후에 SMTP 연결이 거부되었습니다.

: - dev에 로그에서

  <property name="host" value="${linux.host}" /> 
      <property name="port" value="${linux_ssl.port}" /> 
      <property name="username" value="${username}" /> 
      <property name="password" value="${password}" /> 
      <property name="protocol" value="smtps" /> 

    <property name="javaMailProperties"> 
     <props> 
      <prop key="mail.smtps.auth">true</prop> 
      <prop key="mail.smtps.connectiontimeout">5000</prop> 
      <prop key="mail.smtps.sendpartial">true</prop> 
      <prop key="mail.smtps.userset">true</prop> 
      <prop key="mail.mime.charset">UTF-8</prop> 
      <prop key="mail.smtps.isSecure">true</prop> 
      <prop key="mail.smtps.requiresAuthentication">true</prop> 
      <prop key="mail.smtps.port">465</prop> 
      <prop key="mail.smtps.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> 
      <prop key="mail.smtps.socketFactory.fallback">true</prop> 
      <prop key="mail.smtps.starttls.enable">true</prop> 
      <prop key="mail.debug">true</prop> 
      <!-- <prop key="mail.smtps.ssl.checkserveridentity">true</prop> 
      <prop key="mail.smtps.ssl.trust">*</prop> --> 
     </props> 
    </property> 
</bean> 

SMTP 디버깅 : 자극에서

354 End data with <CR><LF>.<CR><LF> 
.. 
From: Test User <[email protected]> 
To: [email protected] 
Message-ID: <[email protected] Pro.local> 
Subject: Acknowledgement 
MIME-Version: 1.0 

(SMTP 및 SMTPS 모두가 함께 같은 장소에서 실패 같은 오류)

DATA 
354 End data with <CR><LF>.<CR><LF> 
DEBUG SMTP: IOException while sending, closing, THROW: 
java.net.ConnectException: Connection refused at  java.net.PlainSocketImpl.socketConnect(Native Method) at  
java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)at  java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:625) at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:160) at sun.net.NetworkClient.doConnect(NetworkClient.java:180) at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:275) at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:933) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1301) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) at org.springframework.core.io.UrlResource.getInputStream(UrlResource.java:168) at org.springframework.mail.javamail.MimeMessageHelper$1.getInputStream(MimeMessageHelper.java:1093) at javax.activation.DataHandler.writeTo(DataHandler.java:305) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1485) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:865) at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:462) at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:103) at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:889) at javax.activation.DataHandler.writeTo(DataHandler.java:317) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1485) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:865) at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:462) at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:103) at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:889) at javax.activation.DataHandler.writeTo(DataHandler.java:317) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1485) at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1773) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1119) at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:433) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340) 

정확한 문제를 철저히 조사했습니다. ConnectionRefused의 예가 있지만, smtp 서버와 동일한 상자에있을 때 354 직후에 온 것은 아무 것도 없습니다.

미리 도움을 주셔서 감사합니다.

답변

0

socket factory stuff, you don't need it을 제거하십시오.

보내는 메시지 내용의 일부로 URLDataSource를 사용하고 있습니까? JavaMail이 일부 서버에 https 연결이 필요한 메시지 내용의 일부에 액세스하려고하면 연결이 끊어집니다. 그것은 드롭되고있는 SMTP 연결을 일으키는 https 연결입니다.

+0

실제로 @Bill Shannon이 100 % 정확합니다. 해당 URLResource를 ServletContextResource로 변경하고 작업을 시작했습니다. 너는 내 주를 구하고 하루를 보냈다. 정말 고맙습니다. 신의 축복! – Yvonne

0

이 문제는 @ bill-shannon이 지적했습니다. 실제로 문제였던 PNG 이미지의 URLResource였습니다. ServletContextResource로 변경하고 작동 중입니다. 누군가가 유용하다고 생각하고 좌절감과 시간을 절약 할 수 있기를 바랍니다. Bill Shannon에게 특별 감사를드립니다!