gpt4 book ai didi

java - 如何使用 Spring Boot 发送异步电子邮件

转载 作者:行者123 更新时间:2023-12-02 09:30:44 24 4
gpt4 key购买 nike

我正在使用 Spring Boot 1.5。我试图在用户创建警报时发送异步邮件,但它不起作用,即使我在调试但徒劳无功,它也不会显示任何错误,所以这就是我获得的内容。我的问题是如何测试我的邮件实现是否正确,因为我没有任何 Controller 。请帮忙。谢谢您的建议

最佳答案

您可以通过在邮件发送方法上使用@Async注释轻松发送异步电子邮件。要在 Spring Boot 应用程序中启用异步支持,请使用 @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
}
}

在您的服务中 Autowiring 上述服务,然后调用 sendMessage 方法,例如:

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

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

您可以查看此链接以获取更多信息:https://www.baeldung.com/spring-async

更新:如果你想使用java邮件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();
}
}
}
}

关于java - 如何使用 Spring Boot 发送异步电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58009982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com