我有一个已经被docker化的spring mvc应用程序。请参阅此链接the way I dockerized。在进行容器化之前,部署在tomcat中的普通 war 能够使用主机smtp.gmail.com和端口587发送电子邮件。

我的bean定义是这样的:

<beans:bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <beans:property name="host" value="smtp.gmail.com" />
    <beans:property name="port" value="587" />
    <beans:property name="username" value="xxxxxx" />
    <beans:property name="password" value="xxxxx" />
    <beans:property name="javaMailProperties">
         <beans:props>
              <beans:prop key="mail.smtp.auth">true</beans:prop>
              <beans:prop key="mail.smtp.starttls.enable">true</beans:prop>
         </beans:props>
    </beans:property>
    </beans:bean>

现在我明白了:
    org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
  nested exception is:
        java.net.ConnectException: Connection refused (Connection refused). Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
  nested exception is:
        java.net.ConnectException: Connection refused (Connection refused); message exception details (1) are:
Failed message 1:
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
  nested exception is:
        java.net.ConnectException: Connection refused (Connection refused)
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)

最佳答案

查看您提供的链接,并假设这正是为Dockerfile复制的内容,您需要为邮件客户端公开一个附加端口。

如果您还不知道,默认情况下,在创建容器时,它不会将其任何端口发布到外界。

在Dockerfiles中,您可以使用EXPOSE
在您的情况下,您需要EXPOSE 587启用SMTP通信

另外,将来如果您需要使用其他协议(protocol)公开其他端口,则可以使用
EXPOSE 587/tcp(默认为tcp)

如果您想了解更多关于EXPOSE的信息,我从Docker Docs获得了我的信息:https://docs.docker.com/engine/reference/builder/

关于docker - 无法从Docker容器内部发送邮件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56852480/

10-11 10:27