Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc SMTP连接在354之后被拒绝,仅来自与SMTP后缀部署在同一计算机上的web服务器_Spring Mvc_Tomcat_Jakarta Mail_Postfix - Fatal编程技术网

Spring mvc SMTP连接在354之后被拒绝,仅来自与SMTP后缀部署在同一计算机上的web服务器

Spring mvc SMTP连接在354之后被拒绝,仅来自与SMTP后缀部署在同一计算机上的web服务器,spring-mvc,tomcat,jakarta-mail,postfix,Spring Mvc,Tomcat,Jakarta Mail,Postfix,我有个奇怪的问题。我的SMTP服务器部署在linux主机(postfix/dovecot)上。我有一个基于SpringMVC+Tomcat的web应用程序。如果我从本地macbook连接到Lunix服务器(Centos)上的SMTP服务器,则消息可以正常发送。然而,当我在Linux系统上的Tomcat7上部署web应用程序(使用可信的CA证书SSL)时,它在从服务器接收354后给了我一个连接拒绝异常。我还为smtp生成了开放ssl证书,并将其添加到jdk/jre/lib/security/cac

我有个奇怪的问题。我的SMTP服务器部署在linux主机(postfix/dovecot)上。我有一个基于SpringMVC+Tomcat的web应用程序。如果我从本地macbook连接到Lunix服务器(Centos)上的SMTP服务器,则消息可以正常发送。然而,当我在Linux系统上的Tomcat7上部署web应用程序(使用可信的CA证书SSL)时,它在从服务器接收354后给了我一个连接拒绝异常。我还为smtp生成了开放ssl证书,并将其添加到jdk/jre/lib/security/cacert中的可信证书中。我在macbook和linux服务器上都尝试过smtp和smtps。在dev上,这两种方法都有效。在linux(prod)上,两者都失败。请注意,在dev和prod中,它都能够进行身份验证和登录。只有在收到SMTP的“354 End data with.”响应后,开发人员和产品人员的行为才会有所不同

从my spring appServerContext.xml:

            <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>


真的
5000
真的
真的
UTF-8
真的
真的
465
javax.net.ssl.SSLSocketFactory
真的
真的
真的
从开发日志进行SMTP调试:

354 End data with <CR><LF>.<CR><LF>
..
From: Test User <testuser@mydomain.com>
To: princess_yvonne@gmail.com
Message-ID: <1833254786.2.1468329021927.JavaMail.local@Yvonne-Koks-MacBook-  Pro.local>
Subject: Acknowledgement
MIME-Version: 1.0
354使用结束数据。
..
发件人:测试用户
致:公主_yvonne@gmail.com
消息ID:
主题:确认
MIME版本:1.0
从prod(smtp和smtps在同一位置失败,并出现相同错误)

数据
354使用结束数据。
发送、关闭、抛出时调试SMTP:IOException:
java.net.ConnectException:在的java.net.PlainSocketImpl.socketConnect(本机方法)上拒绝连接
java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)java.net.socksocketimpl.connect(socksocketimpl.java:392)java.net.Socket.Socket.connect(Socket.java:579)java:182)sun.net.www.http.HttpClient.openServer(HttpClient.java:527)上的sun.security.ssl.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:160)上的sun.net.NetworkClient.doConnect(NetworkClient.java:180)上的sun.security.ssl.ssl.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:625)在sun.net.www.protocol.https.HttpsClient.(HttpsClient.java:275)在sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371)在sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)在sun.net.www.protocol.http.HttpURLConnection(HttpURLConnection.java:933)上在sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)在sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1301)在sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)上在org.springframework.core.io.UrlResource.getInputStream(UrlResource.java:168)在org.springframework.mail.javamail.MimeMessageHelper$1.getInputStream(MimeMessageHelper.java:1093)在javax.activation.DataHandler.writeTo(DataHandler.java:305)在javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1485)上javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:865)javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:462)com.sun.mail.handlers.multipart\u mixed.writeTo(multipart\u mixed.java:103)javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:889)javax.activation.DataHandler.writeTo(DataHandler.java:317)在javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1485)在javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:865)在javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:462)在com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:103)在javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:889)在javax.activation.DataHandler.writeTo(DataHandler.java:317)在javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1485)在javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1773)在com.sun.mail.smtp.SMTPTransport.sendmage(SMTPTransport.java:1119)上在org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:433)在org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345)在org.springframework.mail.javamail.JavaMailSenderImpl.senderimpl.send(JavaMailSenderImpl.java:340)上
我已经穷尽了寻找确切的问题。虽然有连接被拒绝的例子,但我注意到没有一个是在354之后出现的,当时与smtp服务器在同一个框中

非常感谢您的帮助,请提前!

摆脱此问题


您是否将URLDASURCE用于您发送的邮件的部分内容?当JavaMail尝试访问您邮件的部分内容时,连接将被删除,这需要到某个服务器的https连接。正是https连接被删除,导致SMTP连接被删除。

@bill shannon正确地指出了这一点。这确实是一个png图像的URLResource问题。我将其更改为ServletContextResource,并且它正在工作。 希望有人会觉得这很有用,从而节省沮丧和时间。
特别感谢Bill Shannon把它钉得如此正确!!!

你确实是对的@Bill Shannon,100%正确。我将该URLResource更改为ServletContextResource,它开始工作。你拯救了我的一周,让我度过了美好的一天。非常感谢你。上帝保佑!!!
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)