首页 > 解决方案 > 电子邮件已发送但超时

问题描述

我使用spring boot 2。我尝试发送邮件。服务器是outlook 在我的build.gradle

编译('org.springframework.boot:spring-boot-starter-mail')

在我的门面课上

for (FactoryEmailNC factoryEmail : factoryEmails) {

    String message = mailContentBuilder.build(factoryEmail);

    if (factoryEmail.getEmails() != null && !factoryEmail.getEmails().isEmpty()) {

        mailService.sendHtmlMail(factoryEmail.getEmails(), "Not compliant", message);

        //query to specify email has been sent.
        setSampleEmailSent(factoryEmail);
    }
}

private void setSampleEmailSent(FactoryEmailNC factoryEmail) {
    ....
    samplesServices.setEmailsSent(testSampleIdEmailSent);
}

在我的 SamplesServices 课程中

@Transactional
public void setEmailsSent(Map<String, List<SampleId>> testSampleIdEmailSent){
    //call to repository, set flag email sent to true   
    ...
}


public class MailServiceImpl(){

    @Autowired
    private JavaMailSender javaMailSender;

    @Async
    public void sendHtmlMail(List<String> to, String subject, String body) throws MessagingException {
        
        MimeMessage mail = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mail, true);
        ...
        helper.setTo(to.stream().toArray(String[]::new)); //line 64
        javaMailSender.send(mail);
    }
    
    
}

实际上已发送电子邮件,但似乎没有调用 setSampleEmailSent,因为电子邮件标志仍为 false

org.springframework.mail.MailSendException:消息失败:javax.mail.MessagingException:异常读取响应;嵌套异常是:java.net.SocketTimeoutException:在 org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:490) 处读取超时~[spring-context-support-5.1.5.RELEASE.jar!/: 5.1.5.RELEASE] 在 org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:360) ~[spring-context-support-5.1.5.RELEASE.jar!/:5.1.5.RELEASE] 在org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:355) ~[spring-context-support-5.1.5.RELEASE.jar!/:5.1.5.RELEASE] at com.mermacon.service.MailServiceImpl .sendHtmlMail(MailServiceImpl.java:64) ~[classes!/:na]

在我的应用程序属性中

spring.mail.properties.mail.smtp.connectiontimeout=5000

spring.mail.properties.mail.smtp.timeout=3000

spring.mail.properties.mail.smtp.writetimeout=5000

spring.mail.properties.from=info@meracon.com

spring.mail.host=mail.oldubi.com

spring.mail.port=25

知道为什么发送电子邮件但仍然超时?

编辑 1

仅当我发送多于一封电子邮件时才会超时 发送 1 封电子邮件的日志文件 https://pastebin.com/6y6n8MV5

发送 1 封电子邮件后的日志文件 https://pastebin.com/j2sT7qHu

编辑 2

我在发送的每封电子邮件之间放置了一个线程睡眠,超时消失

标签: springspring-bootoutlook

解决方案


推荐阅读