SpringBoot 整合Mail郵件


1. 郵件與協議

  A. smtp(簡單郵件傳輸協議):smtp是Simple Mail Transfer Protocol縮寫,它是一組用於從源地址到目的地址傳輸郵件的規范,通過它來控制郵件的中轉方式,smtp認證要求必須提供賬號和密碼才能登陸服務器,其目的是避免用戶受到垃圾郵件的干擾;

  B. pop3(郵局協議):pop3是Post Office Protocol 3縮寫,支持客戶端遠程管理服務器端的郵件;

  C. smtp服務器地址:網易163/QQ/126/sina/aliyun郵箱 ——> smtp.163.com/smtp.qq.com/ smtp.126.com/smtp.sina.com/ smtp.aliyun.com;

  D. 郵件分簡單郵件和復雜郵件,復雜郵件有html格式郵件、帶附件格式郵件、帶靜態資源郵件、基於Freemarker模板的郵件;

2. pom.xml Maven依賴

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

3. 郵箱信息配置

  A. application.properties文件配置

  B. 前端傳輸參數動態配置

  注意:若使用配置文件設置郵箱信息,可使用JavaMailSender接口發送郵件;若動態配置郵箱信息,需使用JavaMailSenderImpl實現類發送郵件;它們是Java后端發送郵件和集成郵件服務的主流工具。

4. 發送郵件

  A. 發送簡單郵件

package com.ruhuanxingyun.dcy.service.manage.service;

import com.ruhuanxingyun.dcy.service.manage.model.dto.MailDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

/**
 * @description: 郵件 服務層
 * @author: ruphie
 * @date: Create in 2021/4/17 11:00
 * @company: ruhuanxingyun
 */
@Slf4j
@Service
public class MailService {

    @Autowired
    private MailProperties mailProperties;

    @Autowired
    private JavaMailSender javaMailSender;

    /**
     * 發送簡單郵件
     * @param mailDTO 郵件信息
     */
    public void sendSimpleMail(MailDTO mailDTO) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        // 郵件發送人
        simpleMailMessage.setFrom(mailProperties.getUsername());
        // 郵件收件人
        simpleMailMessage.setTo(mailDTO.getMailRecipient());
        //郵件主題
        simpleMailMessage.setSubject(mailDTO.getSubject());
        //郵件內容
        simpleMailMessage.setText(mailDTO.getContent());

        // 發送郵件
        javaMailSender.send(simpleMailMessage);
    }

}

 

  B. 發送HTML郵件  

package com.ruhuanxingyun.service.system.impl;

import com.ruhuanxingyun.entity.system.Mail;
import com.ruhuanxingyun.service.system.IMailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**
 * @description: 郵件工具接口實現層
 * @author: ruphie
 * @date: Create in 2020/1/4 16:58
 * @company: ruhuanxingyun
 */
@Service
public class MailServiceImpl implements IMailService {

    @Autowired
    private JavaMailSenderImpl javaMailSender;

    @Override
    public void sendHtmlMail(Mail mail){
        javaMailSender.setDefaultEncoding("UTF-8");
        javaMailSender.setHost(mail.getMailHost());
     javaMailSender.setPort(mail.getMailPort());
// 是否SSL加密連接 if (mail.getOnSsl() == 2) { Properties properties = new Properties(); properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); javaMailSender.setJavaMailProperties(properties); } // 需要驗證郵箱用戶名和密碼 if (mail.getOnAuth() == 2) { javaMailSender.setUsername(mail.getUsername()); javaMailSender.setPassword(mail.getPassword()); } MimeMessage mimeMessage = javaMailSender.createMimeMessage(); try { MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true); messageHelper.setFrom(mail.getMailSender()); messageHelper.setTo(mail.getMailRecipient()); messageHelper.setSubject(mail.getSubject()); messageHelper.setText(mail.getContent(), true); javaMailSender.send(mimeMessage); } catch (MessagingException e) { e.printStackTrace(); throw new RuntimeException("發送測試郵件失敗"); } } }

  C. 發送帶靜態資源郵件

  D. 發送帶附件郵件

5. 常見錯誤

  錯誤一:注入JavaMailSender或JavaMailSenderImpl,啟動報錯

   原因:無法找到該類,因為沒有被掃描到,無法自動注入

  解決:配置bean類,並在類上加@Configuration

 

 

可參考:SpringBoot整合Mail郵件

    各種常見郵箱端口


免責聲明!

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



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