我有一个Spring Boot应用程序,每天应该向用户发送一些电子邮件,这些用户需要了解当天某些特定事件。我使用的是spring-boot-starter-mail
依赖项和JavaMailSender
。
我的app.proiperties配置邮件看起来像这样(有适当的主机,用户和密码数据):
spring.mail.host = myhost.com
spring.mail.username = user@myhost.com
spring.mail.password = mypassword
spring.mail.port = 25
spring.mail.properties.mail.smtp.auth = true
负责发送邮件的代码是:
private void sendMessage(String email, String text, String subject) {
try {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(SENDER);
helper.setSubject(subject);
helper.setTo(email);
helper.setText(text, true);
javaMailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
} catch (MailException e) {
e.printStackTrace();
}
}
其中javaMailSender
是自动装配的,SENDER始终设置为spring.mail.username
属性的值。此方法在预定作业内循环调用,通常约10到20次(对于应通知的每封电子邮件)。
当我在本地计算机或公司服务器上运行时,它没有问题,但是当应用程序在关键的云代工厂上运行时,它会发送2或3封第一封电子邮件然后抛出
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn't connect to host, port: myhost.com, 25; timeout -1;
java.net.ConnectException: Connection timed out. Failed messages: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: myhost.com, 25; timeout -1;
...
可能的原因是什么?我试图找到答案,但我发现的所有问题都是关于邮件根本不起作用,通常是由于配置错误而事实并非如此(我认为)因为我可以成功地从两台不同的机器发送电子邮件(两者都在邮件主机本地网络之外),但不能从关键云(或更具体 - 只能在出现异常之前部分地执行)。 / p>