天天看點

Spring Boot發送郵件詳解

相信使用過Spring的衆多開發者都知道Spring提供了非常好用的JavaMailSender接口實作郵件發送,在Spring Boot的Starter子產品中也為此提供了自動化配置。下面通過執行個體來講解如何在Spring Boot中使用JavaMailSender發送郵件。

一、引入依賴

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

二、application.properties配置

##端口号
server.port=8888

##根據自己的情況填寫
##郵箱伺服器位址
##QQ smtp.qq.com
##sina smtp.sina.cn
##aliyun smtp.aliyun.com
##163 smtp.163.com
spring.mail.host=smtp.qq.com
##郵箱使用者名
[email protected]
##郵箱密碼(注意:QQ郵箱應該使用授權碼)
spring.mail.password=****************
##編碼格式
spring.mail.default-encoding=UTF-8

##發送郵件位址
mail.fromMail.sender=949[email protected]
##接收郵件位址
[email protected]
           

三、郵件發送控制器

package com.xieke.test.demo;
import java.io.File;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

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.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 郵件發送控制器
 * 
 * @author 邪客
 * 
 */
@RestController
public class MailController {

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

    @Value("${mail.fromMail.sender}")
	private String sender;// 發送者

    @Value("${mail.fromMail.receiver}")
	private String receiver;// 接受者

    @Autowired
    private JavaMailSender javaMailSender;

	/**
	 * @Description http://localhost:8888/sendMail
	 * @method 發送文本郵件
	 * @return
	 */
    @RequestMapping("/sendMail")
    public String sendMail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(sender);
        message.setTo(receiver);
		message.setSubject("邪客發送文本郵件測試");// 标題
		message.setText("世界,你好!--->文本郵件");// 内容
        try {
            javaMailSender.send(message);
			logger.info("文本郵件發送成功!");
			return "success";
        } catch (Exception e) {
			logger.error("文本郵件發送異常!", e);
			return "failure";
        }
    }

	/**
	 * @Description http://localhost:8888/sendHtmlMail
	 * @method 發送html郵件
	 * @return
	 */
    @RequestMapping("/sendHtmlMail")
    public String testHtmlMail() {
		String content = "<html><body><h3>hello world ! --->Html郵件</h3></body></html>";
        MimeMessage message = javaMailSender.createMimeMessage();

        try {
            //true表示需要建立一個multipart message
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(sender);
            helper.setTo(receiver);
			helper.setSubject("邪客發送Html郵件測試");
            helper.setText(content, true);

            javaMailSender.send(message);
			logger.info("Html郵件發送成功!");
			return "success";
        } catch (MessagingException e) {
			logger.error("Html郵件發送異常!", e);
			return "failure";
        }
    }

	/**
	 * @Description http://localhost:8888/sendFilesMail
	 * @method 發送附件郵件
	 * @return
	 */
    @RequestMapping("/sendFilesMail")
    public String sendFilesMail() {
		String filePath = "F:\\select_from_user.sql";
        MimeMessage message = javaMailSender.createMimeMessage();

        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(sender);
            helper.setTo(receiver);
			helper.setSubject("邪客發送附件郵件測試");
			helper.setText("一封帶附件的郵件", true);

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

            javaMailSender.send(message);
			logger.info("附件郵件發送成功!");
			return "success";
        } catch (MessagingException e) {
			logger.error("附件郵件發送異常!", e);
			return "failure";
        }
    }

	/**
	 * @Description http://localhost:8888/sendInlineResourceMail
	 * @method 發送圖檔郵件
	 * @return
	 */
    @RequestMapping("/sendInlineResourceMail")
    public String sendInlineResourceMail() {
		String id = "xieke90";
		// cid:内嵌資源
		String content = "<html><body>帶有圖檔的郵件:<img src=\'cid:" + id + "\'></body></html>";
		String imgPath = "F:\\spring-cloud.png";
        MimeMessage message = javaMailSender.createMimeMessage();

        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(sender);
            helper.setTo(receiver);
			helper.setSubject("邪客發送圖檔郵件測試");
            helper.setText(content, true);

            FileSystemResource res = new FileSystemResource(new File(imgPath));
			helper.addInline(id, res);

            javaMailSender.send(message);
			logger.info("圖檔郵件發送成功!");
			return "success";
        } catch (MessagingException e) {
			logger.error("圖檔郵件發送異常!", e);
			return "failure";
        }

    }

}
           

四、分别測試文本、Html、附件、圖檔郵件發送

<1>、通路http://localhost:8888/sendMail,測試結果如下:

Spring Boot發送郵件詳解

 <2>、通路http://localhost:8888/sendHtmlMail,測試結果如下:

Spring Boot發送郵件詳解

 <3>、通路http://localhost:8888/sendFilesMail,測試結果如下:

Spring Boot發送郵件詳解

  <4>、通路http://localhost:8888/sendInlineResourceMail,測試結果如下:

Spring Boot發送郵件詳解

代碼已上傳至碼雲:https://gitee.com/xieke90/spring_boot_demo (springboot-mail-demo)

轉載請注明出處: http://xieke90.iteye.com/blog/2428892