08 - Spring Boot Email

03/03/2025 - 3 phút

Follow  on Google News

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:

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:

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:

javajava
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

javajava
@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

javajava
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

javajava
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

javajava
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

javajava
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)

properties
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)

properties
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!