一、環(huán)境配置

首先,我們需要在Spring Boot項目中引入相關依賴,常用的有spring-boot-starter-mail。該依賴提供了與JavaMail API的集成,簡化了郵件發(fā)送的開發(fā)過程。在pom.xml文件中添加如下依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

接下來,我們需要在application.properties或application.yml文件中配置郵件服務器的相關參數(shù),如SMTP服務器地址、端口號、用戶名、密碼等。一個典型的配置如下:

spring.mail.host=smtp.example.com
spring.mail.port=587
spring.mail.username=your-email@example.com
spring.mail.password=your-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

二、發(fā)送普通文本郵件

使用Spring Boot提供的MailSender接口,我們可以快速發(fā)送普通文本格式的郵件。首先,在業(yè)務層定義一個MailService接口:

public interface MailService {
    void sendSimpleMail(String to, String subject, String content);
}

然后,在MailServiceImpl類中實現(xiàn)具體的發(fā)送邏輯:

@Service
public class MailServiceImpl implements MailService {
    @Autowired
    private JavaMailSender mailSender;

    @Override
    public void sendSimpleMail(String to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        mailSender.send(message);
    }
}

三、發(fā)送HTML格式郵件

有時候,我們需要發(fā)送更加豐富的HTML格式郵件。這可以通過MimeMessageHelper類實現(xiàn)。在MailServiceImpl中添加以下方法:

@Override
public void sendHtmlMail(String to, String subject, String content) {
    try {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);
        mailSender.send(message);
    } catch (MessagingException e) {
        e.printStackTrace();
    }
}

四、添加附件

有時我們需要在郵件中附加文件,這可以通過MimeMessageHelper的addAttachment方法實現(xiàn)。在MailServiceImpl中添加以下方法:

@Override
public void sendAttachmentMail(String to, String subject, String content, File file) {
    try {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);
        helper.addAttachment(file.getName(), file);
        mailSender.send(message);
    } catch (MessagingException e) {
        e.printStackTrace();
    }
}

五、發(fā)送帶靜態(tài)資源的HTML郵件

有時,我們需要在HTML郵件中嵌入靜態(tài)資源,如圖片、CSS等。這可以通過MimeMessageHelper的addInline方法實現(xiàn)。在MailServiceImpl中添加以下方法:

@Override
public void sendInlineResourceMail(String to, String subject, String content, String rscPath, File file) {
    try {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);
        helper.addInline(rscPath, new FileSystemResource(file));
        mailSender.send(message);
    } catch (MessagingException e) {
        e.printStackTrace();
    }
}

六、異步發(fā)送郵件

為了提高郵件發(fā)送的效率和響應速度,我們可以采用異步發(fā)送的方式。Spring提供了@Async注解來實現(xiàn)異步方法調用,可以很方便地應用到郵件發(fā)送中。首先,需要在配置類中開啟異步支持:

@Configuration
@EnableAsync
public class AsyncConfig {
}

然后,在MailServiceImpl中使用@Async注解標記相應的方法:

@Async
@Override
public void sendSimpleMailAsync(String to, String subject, String content) {
    sendSimpleMail(to, subject, content);
}

七、錯誤處理

在郵件發(fā)送過程中,可能會遇到各種異常情況,如網(wǎng)絡中斷、服務器未響應等。我們需要對這些異常進行適當?shù)奶幚?,以確保郵件發(fā)送的可靠性??梢允褂胻ry-catch塊捕獲異常,并根據(jù)具體情況進行相應的處理,如記錄日志、重試發(fā)送等。

總的來說,Spring Boot提供了強大的郵件發(fā)送功能,可以幫助我們快速構建穩(wěn)定可靠的郵件發(fā)送系統(tǒng)。通過基本的配置、發(fā)送普通文本郵件、HTML格式郵件、附件郵件以及異步發(fā)送等特性,我們可以滿足業(yè)務中各種復雜的郵件發(fā)送需求。同時,合理的異常處理也是確保郵件發(fā)送可靠性的重要一環(huán)。希望本文對您在Spring Boot中實現(xiàn)郵件發(fā)送功能有所幫助。