用SpringBoot輕鬆實現通過QQ郵箱發送電子郵件

我不考慮將來。要是我既要想着今天,又要操心明天,生活就沒意思了。 每當事情遭到不能再糟的地步時,我總髮現天無絕人之路。

前言

關於如何搭建SpringBoot工程以及開啓Web功能,
可以查看我的這篇博客:用Spring Initializr快速構建SpringBoot及整合MVC

環境準備

首先,我們需要打開QQ郵箱,進入設置,選中賬戶,開啓SMTP服務,如圖:
在這裏插入圖片描述
並生成授權碼,授權碼的作用相當於QQ郵箱的密碼。

所需依賴

在依賴管理文件pom.xml中導入發送郵件所需要的起步依賴:

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

配置文件

在配置文件application.yml中配置發送郵箱方的相關信息:

spring:
	 # 配置QQ郵箱
  mail:
    #默認發送郵件基於smtp協議 可不要
    protocol: smtp
    #smtp服務器地址
    host: smtp.qq.com
    #發送方的郵箱
    username: ******@qq.com
    #發送方的密碼(授權碼或者QQ郵箱密碼都可以)
    password: ********
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

代碼實現

首先需要一個郵件實體類:

package com.guqueyue.entity;

/**
 * @author guqueyue
 * @Date 2020/5/26
 **/
@Data //lombok插件的註解,若是沒有用lombok插件,請自行生成getter、setter方法
@AllArgsConstructor //全參構造方法
@NoArgsConstructor //無參構造方法
@Accessors(chain = true) //開啓鏈式編程
public class Email implements Serializable {

    /**
     * 接收者
     */
    private String to;

    /**
     * 郵件標題
     */
    private String subject;

    /**
     * 發送內容
     */
    private String context;

    /**
     * 發送時間
     */
    private Date sendTime;
}

其次在Web層新建一個Controller,代碼如下:

package com.guqueyue.controller;

/**
 * @author guqueyue
 * @Date 2020/5/26
 * 發送郵件
 **/
@Controller
@RequestMapping("/send")
public class MailController {

    @Autowired
    private JavaMailSender javaMailSender;

    /**
     * 獲取配置文件裏的發送方
     */
    @Value("${spring.mail.username}")
    private String from;

    @RequestMapping("/mail")
    public void sendMail() throws MessagingException {
        // 設置郵件內容
        Email email = new Email()
                .setSubject("這是一封測試郵件")
                .setContext("<hr/>蓋西伯(周文王)拘而演《周易》;<br/> 仲尼厄而作《春秋》;<br/>屈原放逐,乃賦《離騷》;<br/>" +
                        "左丘失明,厥有《國語》;<br/>孫子臏腳,《兵法》修列;<br/>" +
                        "不韋遷蜀,世傳《呂覽》;<br/>韓非囚秦,《說難》、《孤憤》;《詩》三百篇大抵聖賢發憤之所作也。<hr/>")
                .setTo(from)
                .setSendTime(new Date());

        // 發送郵件
        send(email);
    }

    /**
     * 發送郵件的方法
     */
    public void send(Email email) throws MessagingException {
        System.out.println("接收到的郵件對象爲:" + email);

        //創建一封郵件
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();


        //Spring提供的一個便捷的郵件設置對象
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);


        //設置郵件的內容
        //標題
        mimeMessageHelper.setSubject(email.getSubject());


        //發送方
        mimeMessageHelper.setFrom(from);


        //接收方
        mimeMessageHelper.setTo(email.getTo());//接收者
//        mimeMessageHelper.setCc("***@qq.com");//抄送
//        mimeMessageHelper.setBcc("***@qq.com");//密送


        //設置內容
        mimeMessageHelper.setText(email.getContext(), true);


        //發送附件
//        mimeMessageHelper.addAttachment("我的附件.jpg", new File("C:\\worker\\images\\7f25dc3b-13e5-42a5-a205-8276b0528040"));


        //設置當前時間
        mimeMessageHelper.setSentDate(email.getSendTime());


        //發送郵件
        javaMailSender.send(mimeMessage);
        System.out.println("成功發送郵件......");
    }
}

然後運行程序,在瀏覽器輸入http://localhost:8080/send/mail,不必理會頁面的404錯誤,發現郵箱收到以下郵件即爲成功:
在這裏插入圖片描述

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