이상한 문제가 있습니다. 내 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 직후에 온 것은 아무 것도 없습니다.
미리 도움을 주셔서 감사합니다.
실제로 @Bill Shannon이 100 % 정확합니다. 해당 URLResource를 ServletContextResource로 변경하고 작업을 시작했습니다. 너는 내 주를 구하고 하루를 보냈다. 정말 고맙습니다. 신의 축복! – Yvonne