08 - Spring Boot Email
03/03/2025 - 3 phút
Trong bài viết này, chúng ta sẽ tìm hiểu về Spring Boot Email, cách gửi email trong ứng dụng Spring Boot.
1. Giới Thiệu
Gửi email là một tính năng phổ biến trong các ứng dụng web, thường được sử dụng để:
- Gửi email xác nhận tài khoản.
- Gửi thông báo đơn hàng.
- Đặt lại mật khẩu.
Spring Boot Email giúp bạn gửi email một cách dễ dàng bằng cách sử dụng Spring Boot Starter Mail kết hợp với các dịch vụ SMTP như Gmail, Mailtrap, AWS SES, hoặc SendGrid.
Trong bài viết này, chúng ta sẽ tìm hiểu cách cấu hình Spring Boot Mail, gửi email văn bản đơn giản, email HTML, email đính kèm file, và tích hợp với các dịch vụ email phổ biến.
2. Cài Đặt Spring Boot Email
2.1. Thêm Dependency
Trước tiên, bạn cần thêm Spring Boot Starter Mail vào pom.xml
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.2. Cấu Hình SMTP Server
Spring Boot cần một SMTP server để gửi email. Bạn có thể sử dụng Gmail để thử nghiệm bằng cách thêm vào application.properties
:
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=your-email@gmail.com
spring.mail.password=your-app-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
Lưu ý:
- Bạn cần bật xác thực 2 bước và tạo App Password cho Gmail để sử dụng.
- Nếu sử dụng Mailtrap (dành cho test), bạn có thể thay thế thông tin SMTP tương ứng.
3. Gửi Email Cơ Bản Trong Spring Boot
3.1. Tạo Service Gửi Email
Spring Boot cung cấp JavaMailSender
để gửi email một cách dễ dàng. Hãy tạo EmailService.java
:
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
@Service
public class EmailService {
private final JavaMailSender mailSender;
public EmailService(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
// Gửi email đơn giản
public void sendSimpleEmail(String to, String subject, String text) {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
message.setSubject(subject);
message.setText(text);
mailSender.send(message);
}
}
3.2. Gọi Service Để Gửi Email
@RestController
@RequestMapping("/email")
public class EmailController {
private final EmailService emailService;
public EmailController(EmailService emailService) {
this.emailService = emailService;
}
@GetMapping("/send")
public String sendEmail() {
emailService.sendSimpleEmail("receiver@example.com", "Test Email", "Đây là nội dung email gửi từ Spring Boot");
return "Email đã được gửi thành công!";
}
}
Truy cập http://localhost:8080/email/send
để gửi email.
4. Gửi Email HTML Trong Spring Boot
Nếu bạn muốn gửi email với định dạng HTML, bạn có thể sử dụng MimeMessageHelper
:
4.1. Tạo Phương Thức Gửi Email HTML
public void sendHtmlEmail(String to, String subject, String htmlContent) throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(htmlContent, true);
mailSender.send(message);
}
4.2. Gửi Email Với Nội Dung HTML
String htmlContent = "<h1>Chào bạn!</h1><p>Đây là email gửi từ Spring Boot.</p>";
emailService.sendHtmlEmail("receiver@example.com", "Email HTML", htmlContent);
5. Gửi Email Có File Đính Kèm
Nếu bạn cần gửi email kèm file đính kèm, bạn có thể mở rộng MimeMessageHelper
:
5.1. Phương Thức Gửi Email Kèm File
public void sendEmailWithAttachment(String to, String subject, String text, String pathToAttachment) throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(text);
FileSystemResource file = new FileSystemResource(new File(pathToAttachment));
helper.addAttachment(file.getFilename(), file);
mailSender.send(message);
}
5.2. Gửi Email Với File Đính Kèm
emailService.sendEmailWithAttachment("receiver@example.com", "Email có file đính kèm", "Vui lòng kiểm tra file đính kèm.", "/path/to/file.pdf");
6. Tích Hợp Các Dịch Vụ Email
Ngoài Gmail, bạn có thể sử dụng các dịch vụ SMTP khác như Mailtrap, AWS SES, SendGrid:
6.1. Cấu Hình Mailtrap (Dành Cho Môi Trường Test)
spring.mail.host=smtp.mailtrap.io
spring.mail.port=2525
spring.mail.username=your-mailtrap-username
spring.mail.password=your-mailtrap-password
Mailtrap giúp kiểm tra email mà không gửi email thật.
6.2. Cấu Hình SendGrid (Dành Cho Production)
spring.mail.host=smtp.sendgrid.net
spring.mail.port=587
spring.mail.username=apikey
spring.mail.password=your-sendgrid-api-key
7. Kết Luận
Spring Boot Email giúp bạn dễ dàng gửi email với nhiều tính năng mạnh mẽ:
- Gửi email văn bản đơn giản.
- Gửi email HTML với nội dung phong phú.
- Gửi email kèm file đính kèm.
- Tích hợp với Gmail, Mailtrap, SendGrid và AWS SES.
👉 Trong bài viết tiếp theo, chúng ta sẽ tìm hiểu về Spring Boot WebSocket, giúp xây dựng ứng dụng real-time như chat, thông báo push!