我想从本地主机(mac或linux)发送电子邮件到某个地方(比方说发送到几个gmail地址)。只发送电子邮件,从不接收电子邮件,就像通知推送系统一样。
我知道mac/linux有一个"sendmail“程序,但现在我需要用spring boot release 2.0发送电子邮件。
在我的苹果电脑上:$ which sendmail /usr/sbin/sendmail
我在http://www.baeldung.com/spring-email上通读了spring boot电子邮件教程,并在我的代码中进行了类似的配置,但它不起作用。在本教程中,mailsendr的“主机”是"smtp.gmail.com",在这种情况下,我需要“主机”是本地主机(我的spring启动应用程序将在其上运行的机器)。
以下是我在application.properties中的电子邮件配置:
spring.mail.host=localhost
spring.mail.port=25
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.auth=false
spring.mail.properties.mail.smtp.starttls.enable=false
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000通过JavaMailSender(自动连接)发送电子邮件时,spring boot抛出以下错误:org.springframework.mail.MailSendException: Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout 5000; nested exception is: java.net.ConnectException: Connection refused (Connection refused). Failed messages: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout 5000; nested exception is: java.net.ConnectException: Connection refused (Connection refused) at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:446) ~[spring-context-support-5.0.4.RELEASE.jar:5.0.4.RELEASE] at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:321) ~[spring-context-support-5.0.4.RELEASE.jar:5.0.4.RELEASE] at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:310) ~[spring-context-support-5.0.4.RELEASE.jar:5.0.4.RELEASE] at com.ibm.gem.service.EmailServiceImpl.sendSimpleMessage(EmailServiceImpl.java:33) ~[classes/:na] at com.ibm.gem.component.ApplicationStartup.onApplicationEvent(ApplicationStartup.java:39) [classes/:na] at com.ibm.gem.component.ApplicationStartup.onApplicationEvent(ApplicationStartup.java:1) [classes/:na] at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:399) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:353) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] at org.springframework.boot.context.event.EventPublishingRunListener.running(EventPublishingRunListener.java:103) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] at org.springframework.boot.SpringApplicationRunListeners.running(SpringApplicationRunListeners.java:78) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:341) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] at com.ibm.gem.PerfInsightApplication.main(PerfInsightApplication.java:11) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_151] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_151] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_151] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.0.0.RELEASE.jar:2.0.0.RELEASE] Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: localhost, 25; timeout 5000 at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2209) ~[javax.mail-1.6.1.jar:1.6.1] at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740) ~[javax.mail-1.6.1.jar:1.6.1] at javax.mail.Service.connect(Service.java:366) ~[javax.mail-1.6.1.jar:1.6.1] at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:515) ~[spring-context-support-5.0.4.RELEASE.jar:5.0.4.RELEASE] at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:435) ~[spring-context-support-5.0.4.RELEASE.jar:5.0.4.RELEASE] ... 21 common frames omitted Caused by: java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_151] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_151] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_151] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_151] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_151] at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_151] at com.sun.mail.util.WriteTimeoutSocket.connect(WriteTimeoutSocket.java:115) ~[javax.mail-1.6.1.jar:1.6.1] at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:351) ~[javax.mail-1.6.1.jar:1.6.1] at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:239) ~[javax.mail-1.6.1.jar:1.6.1] at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175) ~[javax.mail-1.6.1.jar:1.6.1] ... 25 common frames omitted
我认为我在application.properties中的配置是错误的,但我不知道正确的配置是什么。mac/linux没有内置的smtp服务器,对吧?我不知道,我也不想安装。我只想要类似于"sendmail“程序的功能。当使用"sendmail“程序时,你不需要指定协议,端口,ssl等参数,我不知道为什么我使用spring boot时必须提供这些信息,我也不知道如何在我的计算机上找到这些信息。
有人能帮我吗?
提前谢谢。
发布于 2018-05-14 13:33:14
问题解决了。
事实证明,mac(我相信大多数linux系统)都预装了邮件系统postfix。在使用spring boot发送电子邮件之前,您需要启动邮件系统(包括smtp服务器)。
使用以下命令启动并检查后缀状态:$ sudo postfix status $ sudo postfix start
在mac上,我使用以下命令检查smtp是否正在运行:$ sudo lsof -i :smtp COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME master 84359 root 13u IPv4 0xacc57a372acc10b 0t0 TCP localhost:smtp (LISTEN) master 84359 root 14u IPv6 0xacc57a379b3eb63 0t0 TCP localhost:smtp (LISTEN) postscree 84562 _postfix 6u IPv4 0xacc57a372acc10b 0t0 TCP localhost:smtp (LISTEN) postscree 84562 _postfix 7u IPv6 0xacc57a379b3eb63 0t0 TCP localhost:smtp (LISTEN)
在spring boot application.properties中,我只需要一行配置:spring.mail.host=localhost
啊,真灵!
https://stackoverflow.com/questions/50317404
复制相似问题