Spring Boot郵件功能


1.應用場景

郵件功能的應用場景可謂十分廣泛,諸如注冊用戶、密碼找回,消息通知、以及一些程序異常通知等都需要使用到該功能。

正是由於郵件功能的使用廣泛,因此springboot也加在它的組件中添加了郵件。

 

2.maven依賴

springboot中已經給我們准備好了郵件的相關組件,我們只要在springboot項目中將其添加即可。

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

添加后繼續查看這個組件的相關依賴(下圖),可見里面實際也是封裝了javax.mail的郵件收發相關類。

 

3.普通郵件發送

我們首先編寫一個簡單text郵件的樣例,之后會再在樣例的demo上進行其他幾種復雜郵件的發送,以及部分源碼的解析。

3.1.配置文件

#我這里使用QQ郵箱來發送郵件,因此配置的host是smtp.qq.com,使用其他郵箱需要找到對應的host
spring.mail.host=smtp.qq.com
#發送郵件的郵箱賬號
spring.mail.username=*********@qq.com
#發送郵件的郵箱的SMTP服務密碼(有的郵箱使用的是郵箱密碼,不同郵箱可能不同)
spring.mail.password=**********
#是否進行身份驗證
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

3.2.使用方法

@Component
public class EmailService {

    @Autowired
    private JavaMailSender mailSender;

    public void sendMsg() {
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        // 郵件發送者,這里不能隨便填寫,必須是真實的發送郵件的郵箱名稱
        mailMessage.setFrom("527724431@qq.com");
        // 郵件接受者
        mailMessage.setTo("18373143942@sina.cn");
        // 郵件主題
        mailMessage.setSubject("testSubject");
        // 郵件內容
        mailMessage.setText("hello email!");
        // 發送郵件
        mailSender.send(mailMessage);
    }

}

3.3.測試代碼

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @Autowired
    private EmailService emailService;

    @Test
    public void contextLoads() {
        emailService.sendMsg();
    }

}

3.4查看郵箱

 

4.復雜郵件發送

復雜郵件分為很多種情況,由於篇幅有限,這里只簡單列舉其中幾種。

4.1多個郵件接收人

我們查看上面方法中設置的setTo()源碼:

    public void setTo(String to) {
        this.to = new String[]{to};
    }

    public void setTo(String... to) {
        this.to = to;
    }

可見里面實際是將我們傳入的參數作為數組來接受的,因此我們可以以下面的兩種形式來將郵件發送給多個接收者:

  1. 數組。
  2. 多個參數。
        // 郵件接受者
        mailMessage.setTo("","","");
        mailMessage.setTo(new String[]{"",""});

4.2抄送

添加抄送者與添加接受者的方式差不多,區別在於方法名,添加抄送者方法為setCc():

    public void setCc(String cc) {
        this.cc = new String[]{cc};
    }

    public void setCc(String... cc) {
        this.cc = cc;
    }

同樣也可以添加一個,或以數組和多參數形式添加多個抄送者:

        // 郵件抄送者
        mailMessage.setCc("");
        mailMessage.setCc("","");
        mailMessage.setCc(new String[]{"",""});

4.3發送帶路徑的郵件

復雜郵件與簡單郵件相比,這里使用的消息類不再是SimpleMailMessage。而是由郵件發送器JavaMailSender生成的MimeMessage作為消息類,同時加以一個輔助類MimeMessageHelper進行消息的添加。

    public void sendComplexMsg() {
        MimeMessage message = mailSender.createMimeMessage();

        try {
// 生成消息輔助類,注意后面的true是用來決定是否添加附件 MimeMessageHelper messageHelper = new MimeMessageHelper(message, true); messageHelper.setSubject("testSubject"); messageHelper.setFrom("527724431@qq.com"); messageHelper.setTo("18373143942@sina.cn");
// 這里后面的true,用來讓text內容以html格式進行展示,如果不設置,里面的鏈接會被作為普通字符串展示 messageHelper.setText("
<a href=\"#\">鏈接</a>", true); } catch (MessagingException e) { e.printStackTrace(); } mailSender.send(message); }

4.4添加附件

添加附件和添加帶路徑內容差不多,區別只在於多使用了"addAttachment()"方法。方法第一個參數是附件在郵件中的命名,第二個參數是要上傳的文件。

一個郵件可以添加多個附件,只要繼續調用addAttachment()方法即可。

但要注意的是,發送附件文件時,setText()必須要被調用,否則程序將拋出異常,無法發送郵件。

    public void sendComplexMsg() {
        MimeMessage message = mailSender.createMimeMessage();

        try {
            MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
            messageHelper.setSubject("testSubject");
            messageHelper.setFrom("527724431@qq.com");
            messageHelper.setTo("18373143942@sina.cn");
            messageHelper.setText("<a href=\"#\">鏈接</a>", true);
            messageHelper.addAttachment("附件", new File("D://yxf//123.txt"));
        } catch (MessagingException e) {
            e.printStackTrace();
        }

        mailSender.send(message);

    }

4.5

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM