Вы можете легко отправлять асинхронные электронные письма, используя аннотацию @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();
}
}
}
}