1. 程式人生 > >SpringBoot 學習系列(六)

SpringBoot 學習系列(六)

有些其他的檔案 如 Devtools 和 mail元件等可以在下面勾選,也可以自己手動新增

新增完點選生成,會下載一個壓縮包,匯入到 idea即可

正式開始

1、如果剛才沒勾選 mail 則需要新增依賴

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

2、在application.properties中新增郵箱配置(注意 配置完畢後把後面的註釋去掉,否則會提示連線不上的錯誤

     把使用者名稱和密碼改成自己郵箱的使用者名稱和密碼 伺服器地址變成郵箱傳送伺服器的地址 如:smtp.126.com

spring.mail.host=smtp.qiye.163.com //郵箱伺服器地址
[email protected] //使用者名稱
spring.mail.password=xxyyooo    //密碼
spring.mail.default-encoding=UTF-8

[email protected]  //以誰來發送郵件

 3、編寫介面和實現類

       介面:

package com.emailtest.service;

/**
 * Created by admin 
 *
 */
public interface MailService {

    public void sendSimpleMail(String to, String subject, String content);

    public void sendHtmlMail(String to, String subject, String content);

    public void sendAttachmentsMail(String to, String subject, String content, String filePath);

    public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId);

}

       實現類:

package com.emailtest.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

/**
 * Created by admin 
 *
 */
@Component
public class MailServiceImpl implements MailService{

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JavaMailSender mailSender;

    @Value("${mail.fromMail.addr}")
    private String from;

    /**
     * 傳送文字郵件
     * @param to
     * @param subject
     * @param content
     */
    @Override
    public void sendSimpleMail(String to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);

        try {
            mailSender.send(message);
            logger.info("簡單郵件已經發送。");
        } catch (Exception e) {
            logger.error("傳送簡單郵件時發生異常!", e);
        }

    }

    /**
     * 傳送html郵件
     * @param to
     * @param subject
     * @param content
     */
    @Override
    public void sendHtmlMail(String to, String subject, String content) {
        MimeMessage message = mailSender.createMimeMessage();

        try {
            //true表示需要建立一個multipart message
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);

            mailSender.send(message);
            logger.info("html郵件傳送成功");
        } catch (MessagingException e) {
            logger.error("傳送html郵件時發生異常!", e);
        }
    }


    /**
     * 傳送帶附件的郵件
     * @param to
     * @param subject
     * @param content
     * @param filePath
     */
    public void sendAttachmentsMail(String to, String subject, String content, String filePath){
        MimeMessage message = mailSender.createMimeMessage();

        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);

            FileSystemResource file = new FileSystemResource(new File(filePath));
            String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
            helper.addAttachment(fileName, file);
            //helper.addAttachment("test"+fileName, file);

            mailSender.send(message);
            logger.info("帶附件的郵件已經發送。");
        } catch (MessagingException e) {
            logger.error("傳送帶附件的郵件時發生異常!", e);
        }
    }


    /**
     * 傳送正文中有靜態資源(圖片)的郵件
     * @param to
     * @param subject
     * @param content
     * @param rscPath
     * @param rscId
     */
    public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){
        MimeMessage message = mailSender.createMimeMessage();

        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);

            FileSystemResource res = new FileSystemResource(new File(rscPath));
            helper.addInline(rscId, res);

            mailSender.send(message);
            logger.info("嵌入靜態資源的郵件已經發送。");
        } catch (MessagingException e) {
            logger.error("傳送嵌入靜態資源的郵件時發生異常!", e);
        }
    }
}

 4、在src/main/resources 下建立資料夾templates 存放模板檔案emailTemplate.html

emailTemplate.html檔案的內容如下

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8"/>
        <title>Title</title>
    </head>
    <body>
        您好,這是驗證郵件,請點選下面的連結完成驗證,<br/>
        <a href="#" th:href="@{ http://www.aaabbb.com/ccc/{id}(id=${id}) }">啟用賬號</a>
    </body>
</html>

5、建立測試類EmailtestApplicationTests,用junit單元測試即可收到郵件,完整程式碼如下:

     提示:如果需要測試,請把郵箱變成自己的,謝謝

package com.emailtest.emailtest;

import com.emailtest.service.MailService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

/**
 * Created by admin
 *
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class EmailtestApplicationTests {

	@Autowired
	private MailService mailService;

	@Autowired
	private TemplateEngine templateEngine;

	@Test
	public void testSimpleMail() throws Exception {
		mailService.sendSimpleMail("[email protected]","test simple mail"," hello this is simple mail");
	}

	@Test
	public void testHtmlMail() throws Exception {
		String content="<html>\n" +
				"<body>\n" +
				"    <h3>hello world ! 這是一封html郵件!</h3>\n" +
				"</body>\n" +
				"</html>";
		mailService.sendHtmlMail("[email protected]","test simple mail",content);
	}

	@Test
	public void sendAttachmentsMail() {
		String filePath="C:\\Users\\Administrator\\Pictures\\Saved Pictures\\timg (1).jpg";
		mailService.sendAttachmentsMail("[email protected]", "主題:帶附件的郵件", "有附件,請查收!", filePath);
	}


	@Test
	public void sendInlineResourceMail() {
		String rscId = "C:\\Users\\Administrator\\Pictures\\Saved Pictures\\timg (1).jpg";
		String content="<html><body>這是有圖片的郵件:<img src=\'cid:" + rscId + "\' ></body></html>";
		String imgPath = "C:\\Users\\Administrator\\Pictures\\Saved Pictures\\timg (1).jpg";

		mailService.sendInlineResourceMail("[email protected]", "主題:這是有圖片的郵件", content, imgPath, rscId);
	}


	@Test
	public void sendTemplateMail() {
		//建立郵件正文
		Context context = new Context();
		context.setVariable("id", "006");
		String emailContent = templateEngine.process("emailTemplate", context);

		mailService.sendHtmlMail("[email protected]","主題:這是模板郵件",emailContent);
	}
}

是不是很簡單? 

相關推薦

SpringBoot 學習系列()

有些其他的檔案 如 Devtools 和 mail元件等可以在下面勾選,也可以自己手動新增 新增完點選生成,會下載一個壓縮包,匯入到 idea即可 正式開始 1、如果剛才沒勾選 mail 則需要新增依賴 <dependencies> <de

springboot學習系列

創建 ont mage png control 啟動 height 加載 -- 準備環境   1.eclipse 下載 安裝相應的springboot插件(search --->Find或者popular搜索spring插件)  2.安裝後eclipse new P

webservice 教程學習系列()——監聽請求,使用eclipse的TCP_IP工具(埠轉發)

有的情況我們本身的開發機可能不能連線網際網路,但是我們需要呼叫一些網際網路的介面,到時候放在生產伺服器就可以直接呼叫。那麼我們繼續使用上次說的直接在dos視窗上面解析wsdl的URL連結就不行了,因為連線不通。 這個時候我們就可以 使用eclipse的這個TCP_IP工具了。 首先

activemq 學習系列() activemq 集群

服務 .com active nec style failover ive 準備 mage activemq 集群 activemq 是可以通過 networkConnectors 來實現集群的。 首頁準備多臺 activemq 1:端口號:8161,服務端口號:616

SpringBoot 學習系列(五)

SpringBoot可以讓我們快速的開發一個定時任務程式。 在我們的專案開發過程中,經常需要定時任務來幫助我們來做一些內容,springboot預設已經幫我們實現了,只需要新增相應的註解就可以實現 1、pom包配置 pom包裡面只需要引入springboot start

SpringBoot 學習系列(八)

1、maven配置(web專案 和 thymeleaf模板引擎) <dependency> <groupId>org.springframework.b

Redis學習系列ZSet(有序列表)及Redis資料結構的過期

   一、簡介 ZSet可以說是Redis中最有趣的資料結構了,因為他兼具了Hash集合和Set的雙重特性,也是用的最多的,保證了value值的唯一性的同時,,同時又保證了高效能,最主要的是還可以給每個Value設定Source(權重),那麼我們就可以通過權重進行排序,這在業務上是非常

SpringBoot 學習系列(九)

Spring Boot 專案新增 Docker 支援 在 pom.xml-properties 中新增 Docker 映象名稱 <properties> <docker.image.prefix>springboot</docker.ima

SpringBoot 學習系列(三)

進入如下頁面,點選紅框中的按鈕即可: 2、解壓到某個目錄 3、像配置java環境變數那樣配置Gradle環境變數 3、Path中加入 %GRADLE_HOME%\bin  4、開啟命令列 輸入 gradle -v  IDEA中配置: 開啟 fi

SpringBoot 學習系列 | (八)IDEA Mybatis 生成逆向工程(generator)

本篇將主要介紹Mybatis的逆向工程如何在SpringBoot環境上實現。 環境準備        IDEA、SpringBoot、Mybatis  目錄結構     表結構 maven依賴的包與外掛(只貼出Mybatis相關包) <!--mysql資

tensorflow學習系列:mnist從訓練儲存模型再到載入模型測試

    通過前面幾個系列的學習對tensorflow有了一個漸漸親切的感覺,本文主要是從tensorflow模型訓練與驗證的模型進行實踐一遍,以至於我們能夠通過tensorflow的訓練有一個整體的概念。下面主要是從訓練到儲存模型,然後載入模型進行預測。# -*- codin

深度學習系列():自編碼網路的特徵學習

在第三節我們已經介紹了 知道了自編碼學習其實就是學習到了輸入資料的隱含特徵,通過新的特徵來表徵原始資料,本節將介紹如何使用這些隱含特徵進行模式分類; 還是以前面的三層自編碼網路: 抽象一下如下: 其中學習到的權值係數W1與W1’是不一樣的,我

SpringBoot 學習系列 配置隨機埠

一 springboot 配置埠的方式一般有3種 1 實現 EmbeddedServletContainerCustomizer 介面並重寫 customize方法 @Override public void customize(ConfigurableEmbedde

SpringBoot學習系列之一:配置自動化

引言 大家都知道SpringBoot簡化了Spring開發工作,讓開發者不用再去面對繁瑣的配置,可以使我們可以迅速上手進行開發,將重點放在業務邏輯的實現上。但也正因為這樣,使得開發者容易忽略對於其背後原理的理解。我們可能知道怎麼用,但是實際上並不知道Sprin

SpringBoot 學習系列 | (九)SpringBoot快速整合Redis

話不多說,直接貼程式碼: Maven  pom.xml引入依賴 <!--Redis--> <dependency> <groupId>org.springframework.boot</groupId> <

Vue.js學習系列——Vue單元測試Karma+Mocha學習筆記

在使用vue-cli建立專案的時候,會提示要不要安裝單元測試和e2e測試。既然官方推薦我們使用這兩個測試框架,那麼我們就動手去學習實踐一下他們吧。 簡介 Karma Karma是一個基於Node.js的JavaScript測試執行過程管理工

Java NIO學習系列:Java中的IO模型

  前文中我們總結了linux系統中的5中IO模型,並且著重介紹了其中的4種IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路複用(IO multiplexing) 非同步I/O(asynchronous IO)   但是前面總結的IO

SpringBoot學習系列之一(反射)

  最近在學習SpringBoot的知識,動起手來學習的時候才發現SpringBoot專案採用了大量的反射機制,暈,作為一個應屆畢業生,以前學習反射的時候給我的感覺就是,這個到底用來幹嘛的,好像沒啥用啊,而且接觸的地方也不是非常的多,接觸比較多的地方還是JDBC註冊驅動的那條語句: Class.forNam

SpringBoot學習)—— springboot快速整合RabbitMQ

目錄 Rabbit MQ訊息佇列 簡介 Rabbit MQ工作模式 交換機模式 引入RabbitMQ佇列 程式碼實戰 Rabbi

hadoop入門學習系列hadoop學習之sqoop安裝

1.7 sqoop安裝 opc 2.6 clas jdb -m -- error 1.下載安裝包及解壓 tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 2.配置環境變量和配置文件 cd 到 sqoop