Spring Boot 集成郵件服務 JavaMailSender

前言

電子郵件系統(Electronic mail system,E-mail)由用戶代理MUA(Mail User Agent)以及郵件傳輸代理MTA(Mail Transfer Agent),和郵件投遞代理MDA(Mail Delivery Agent)組成,MUA指用於收發Mail的程序,MTA指將來自MUA的信件轉發給指定用戶的程序,MDA就是將MTA接收的信件依照信件的流向(送到哪裏)將該信件放置到本機賬戶下的郵件文件中(收件箱),當用戶從 MUA 中發送一份郵件時,該郵件會被髮送送到MTA,而後在一系列MTA中轉發,直到它到達最終發送目標爲止。

SMTP 協議

SMTP 的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協議。它是一組用於從源地址到目的地址傳輸郵件的規範,通過它來控制郵件的中轉方式。SMTP 協議屬於 TCP/IP 協議簇,它幫助每臺計算機在發送或中轉信件時找到下一個目的地。SMTP 服務器就是遵循 SMTP 協議的發送郵件服務器。
SMTP 認證,簡單地說就是要求必須在提供了賬戶名和密碼之後纔可以登錄 SMTP 服務器,這就使得那些垃圾郵件的散播者無可乘之機。增加 SMTP 認證的目的是爲了使用戶避免受到垃圾郵件的侵擾。

POP3 協議

POP3是Post Office Protocol 3的簡稱,即郵局協議的第3個版本,它規定怎樣將個人計算機連接到Internet的郵件服務器和下載電子郵件的電子協議。它是因特網電子郵件的第一個離線協議標準,POP3允許用戶從服務器上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件服務器上的郵件,而POP3服務器則是遵循POP3協議的接收郵件服務器,用來接收電子郵件的。但目前的 POP3 郵件服務器大都可以“只下載郵件,服務器端並不刪除”,也就是改進的 POP3 協議。SMTP 和 POP3 是最初的兩個協議,隨着郵件的不斷髮展後來又增加了兩個協議:

IMAP 協議

IMAP全稱是Internet Mail Access Protocol,即交互式郵件存取協議,它是跟POP3類似郵件訪問標準協議之一。不同的是,開啓了IMAP後,您在電子郵件客戶端收取的郵件仍然保留在服務器上,同時在客戶端上的操作都會反饋到服務器上,如:刪除郵件,標記已讀等,服務器上的郵件也會做相應的動作。所以無論從瀏覽器登錄郵箱或者客戶端軟件登錄郵箱,看到的郵件以及狀態都是一致的。

Mime 協議

MIME的英文全稱是"Multipurpose Internet Mail Extensions" 多功能Internet 郵件擴充服務,它是一種多用途網際郵件擴充協議,在1992年最早應用於電子郵件系統,但後來也應用到瀏覽器。MIME意爲多目Internet郵件擴展,它設計的最初目的是爲了在發送電子郵件時附加多媒體數據,讓郵件客戶程序能根據其類型進行處理。然而當它被HTTP協議支持之後,它的意義就更爲顯著了。它使得HTTP傳輸的不僅是普通的文本,而變得豐富多彩。

 

1、QQ郵箱配置步驟,獲取授權碼

QQ郵箱->設置->賬戶->POP3/SMTP服務:開啓服務後會獲得QQ的授權碼。注:需要開通POP3和IMAP服務。

 

2、pom.xml文件

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

3、application.properties配置文件

#系統郵箱配置
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=系統郵箱
#授權碼
spring.mail.password = 授權碼
spring.mail.protocol = smtp
spring.mail.default-encoding = UTF-8
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.connectiontimeout = 15000
spring.mail.properties.mail.smtp.timeout = 25000
spring.mail.properties.mail.smtp.writetimeout = 15000

4、JavaMailSender

(Spring已經幫我們內置了JavaMailSender,可以直接在項目中引用)



/**
 * @ClassName: MailServiceImpl
 * @Author: liuyaolong
 * @Description: 發送郵件實現類
 */
@Service
public class MailServiceImpl  {

    @Autowired
    private JavaMailSender mailSender;
   
    private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);

    @Value("${spring.mail.username}")
    String EMAIL_FROM;

    
    public void sendSimpleMail() {

        SimpleMailMessage  message = new SimpleMailMessage();
        try {
                message.setTo("接收郵件地址");//多個地址可用String[]
                message.setCc("抄送郵件地址");//多個地址可用String[]
                message.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//發送郵件地址
                message.setSubject("郵件主題");
                message.setText("郵件正文內容");
        } catch (AddressException  e){
            logger.error("發送文本郵件異常,錯誤信息:{}",e.getMessage());
        }
        mailSender.send(message);
    }

    
    public void sendAttachmentsMail() {

        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
                helper.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//發送郵件地址
                helper.setSubject("郵件主題");
                helper.setText("郵件正文內容");
                helper.setCc("抄送郵件地址");
                helper.addAttachment("附件名",new FileSystemResource("附件"));
                helper.setTo("接收郵件地址");

        } catch (MessagingException e){
            logger.error("發送附件郵件異常,錯誤信息:{}",e.getMessage());
        }
        mailSender.send(mimeMessage);
    }

   
    public void sendHtmlMail()  {
        MimeMessage mimeMessage = mailSender.createMimeMessage();

        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
            helper.setTo("接收郵件地址");
            helper.setCc("抄送郵件地址");
            helper.setFrom(String.valueOf(new InternetAddress(EMAIL_FROM)));//發送郵件地址
            helper.setSubject("郵件主題");
            helper.setText("郵件正文內容");
        } catch (MessagingException  e){
            logger.error("發送富文本郵件異常,錯誤信息:{}",e.getMessage());
        }
        mailSender.send(mimeMessage);
    }


}

以上就是本文的全部內容,希望對大家的學習有所幫助,歡迎評論交流。能get到知識點不要忘了關注點個贊~ 拒絕白嫖從我們做起hh~ 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章