Превышен лимит потока почты Java

#java #email

Вопрос:

После регистрации я отправляю приветственное письмо пользователю с помощью org.springframework.mail.javamail.JavaMailSender. Когда два пользователя зарегистрировались одновременно, произошло это исключение:

ОШИБКА [i-0930a9116e073d9f4] [app-async-4] p.i.c. core.mail.MailerService — _ _org.springframework.mail.MailSendException: Сообщение об ошибке: com.sun.mail.smtp.SMTPSendFailedException: 432 4.3.2 STOREDRV.Клиентская отправка; превышен лимит потока отправителя. Посещение aka.ms/concurrent_sending для получения дополнительной информации.

Как я могу это решить? Будет ли отправка электронной почты в потоках выполнять эту работу?

Вот мои способы отправки электронной почты:

 @Async(AsyncConfiguration.ASYNC_EXECUTOR)
    public void sendAfterSignupEmail(String token) {
        String subject = utilsBean.getMessage(utilsBean.getCurrentLocale(), "mail.after_activation.title");
        User user = userRepo.findByActivationToken(token).orElse(null);
        
        MailDto mailDto = new MailDto()
            .withBodyTemplate("welcome_email.html")
            .asHtml(true)
            .withSubject(subject)
            .withRecipient(user.getEmail())
            .withNoTemplate()
            .withModel("username", user.getUserName());
        
        mailerService.sendMailMessage(mailDto);
    }
 
 public void sendMailMessage(MailDto mail) {
        logger.info("Sending e-mail [{}] to {} ({})", mail.getSubject(), mail.getRecipients().get(0), mail.getRecipients().size());
        if (!mailerEnabled) {
            logger.warn("Sending e-mail cancelled due to 'app.mail.enabled' = {}.", mailerEnabled);
            return;
        }
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
            message.setSubject(mail.getSubject());
            helper.setFrom(mailFrom);
            for (String rcpt : mail.getRecipients()) {
                helper.addTo(rcpt);
            }
            for (String bcc : mail.getBcc()) {
                helper.addBcc(bcc);
            }
            helper.setText(getBodyFromTemplate(mail), mail.isHtml());
            for (Attachment a : mail.getAttachments()) {
                helper.addAttachment(a.getAttachmentFilename(), a.getInputStreamSource(), a.getContentType());
            }
            if (mail.getLogo() != null) {
                try {
                    InputStream is = getClass().getResourceAsStream(mail.getLogo());
                    helper.addInline("logo", new ByteArrayResource(IOUtils.toByteArray(is)), "image/png");
                } catch (IOException e) {
                    logger.error("Could not attach inline logo in email", e);
                }
            }
            for (Inline i : mail.getInlines()) {
                helper.addInline(i.getContendId(), i.getInputStreamSource(), i.getContentType());
            }
            mailSender.send(message);
        } catch (Exception e) {
            logger.error("", e);
        }
    }