Как отправить асинхронное письмо с весенней загрузкой - PullRequest
0 голосов
/ 19 сентября 2019

Я использую пружинный ботинок 1.5.Я пытаюсь отправить асинхронную почту, когда пользователь создает предупреждение, но оно не работает и не выдает никакой ошибки, даже когда я отлаживаю, но напрасно, вот что я получаю.Мой вопрос состоит в том, как проверить, правильна ли моя реализация почты, потому что у меня нет никакого контроллера этого.Пожалуйста помоги.Спасибо за любые предложения

1 Ответ

0 голосов
/ 19 сентября 2019

Вы можете легко отправлять асинхронные электронные письма, используя аннотацию @Async для вашего метода отправки почты.Чтобы включить поддержку Async в приложении весенней загрузки, используйте @EnableAsync, например:

@SpringBootApplication
@EnableAsync
public class SpringTestAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringTestAppApplication.class, args);
    }
}

Создайте службу MailSender и добавьте аннотированный метод отправки почты с помощью @Async, например:

@Service
public class MailSenderService {

    @Async
    public void sendMail(....) {
       // your code
    }
}

Автоматически подключите вышеуказанную услугу к вашему сервису и затем вызовите метод sendMessage, пример:

@Service
public class UserService {
    @Autowired
    private MailSenderService mailSenderService;

    User exampleMethod() {
        ..
        ..
        mailSenderService.sendMail(...);
    }
}

Вы можете проверить эту ссылку для получения дополнительной информации: https://www.baeldung.com/spring-async

ОБНОВЛЕНИЕ: Если вы хотите использовать Java API Api.Тогда вы можете взять ссылку ниже код:

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class MailService {
    @Autowired
    EnvConfiguration envConfiguration;

    private static final Logger LOGGER = LoggerFactory.getLogger(MailService.class);

    @Async
    public void sendMail(String to, String subject, String htmlText, String fileName) {

        Properties props = System.getProperties();
        props.put("mail.transport.protocol", "smtps");
        props.put("mail.smtp.port", envConfiguration.getSMTPPort());
        props.put("mail.smtp.auth", envConfiguration.smtpAuthorized());
        props.put("mail.smtp.starttls.enable", envConfiguration.isStarTlsEnabled());
        props.put("mail.smtp.starttls.required", envConfiguration.isStarTlsRequired());

        Session session = Session.getDefaultInstance(props);
        Transport transport = null;
        try {
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(envConfiguration.getEmailFrom().replaceAll("\"", "")));
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
            msg.setSubject(subject);
            MimeBodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setContent(htmlText, "text/html");
            transport = session.getTransport();
            transport.connect(envConfiguration.getEmailHost(), envConfiguration.getEmailUserName(),
                    envConfiguration.getEmailPassword());
            transport.sendMessage(msg, msg.getAllRecipients());
            LOGGER.info("Mail send successfully");
        } catch (MessagingException e) {
            LOGGER.error("Unable to send email trace" + e);
        } finally {
            try {
                transport.close();
            } catch (MessagingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
...