1. 程式人生 > >Spring boot 整合JavaMail服務傳送郵件

Spring boot 整合JavaMail服務傳送郵件

JavaMail是SUN提供給廣大Java開發人員的一款郵件傳送和接受的一款開源類庫,支援常用的郵件協議,如:SMTP、POP3、IMAP,開發人員使用JavaMail編寫郵件程式時,不再需要考慮底層的通訊細節如:Socket而是關注在邏輯層面。JavaMail可以傳送各種複雜MIME格式的郵件內容,注意JavaMail僅支援JDK4及以上版本。雖然JavaMail是JDK的API但它並沒有直接加入JDK中。

實現方法:

一、新增依賴

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

二、新增配置檔案(YAML格式)
stmp: 
  host: smtp.163.com
  account: [email protected]
  password: xxxxxxx
mail: 
  smtp: 
    auth: true
    timeout: 25000
multipart:  
  enabled: true  
  max-file-size: 50mb  
  max-request-size: 50mb

三、建立實體類
public class EmailEntity {

	private String receiver;
    private String subject;
    private String text;
    private String content;

    public String getReceiver() {
        return receiver;
    }

    public void setReceiver(String receiver) {
        this.receiver = receiver;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

四、註冊Bean
@Component
public class EmailConfig {

	@Value("${stmp.host}")
	private String host;
	@Value("${stmp.account}")
	private String account;
	@Value("${stmp.password}")
	private String password;

	@Value("${mail.smtp.auth}")
	private String isAuth;
	@Value("${mail.smtp.timeout}")
	private String outTime;

	@Bean(name = "JavaMailSenderImpl")
	public JavaMailSenderImpl getMailSender() {
		JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
		javaMailSender.setHost(host);
		javaMailSender.setUsername(account);
		javaMailSender.setPassword(password);
		Properties properties = new Properties();
		properties.put("mail.smtp.auth", isAuth);
		properties.put("mail.smtp.timeout", outTime);
		javaMailSender.setJavaMailProperties(properties);
		return javaMailSender;
	}

	public void sendSimpleMail(EmailEntity email) {
		SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
		simpleMailMessage.setFrom(account);
		String receiver = email.getReceiver();
		String receivers[] = receiver.split(";");
		simpleMailMessage.setTo(receivers);
		simpleMailMessage.setSubject(email.getSubject());
		simpleMailMessage.setText(email.getContent());
		getMailSender().send(simpleMailMessage);
	}

}

五、使用測試
@RestController
@RequestMapping("/api/email")
@Api("傳送Email介面")
public class ApiEmailController {
	private static Logger log = LoggerFactory.getLogger(ApiEmailController.class);
	@Autowired
	EmailConfig mc;
	@IgnoreAuth
	@PostMapping("send")
	public void testEmailConfig(){
	    EmailEntity email = new EmailEntity();
	    email.setReceiver("[email protected]");
	    email.setContent("welcome Email Sender");
	    email.setSubject("Spring Boot Java EE Developer");
	    mc.sendSimpleMail(email);
	    log.info("successful to send message!");
	}
}

六、以上已經可以傳送簡單的郵件訊息。如果想要傳送比較複雜的郵件,比如:附件,圖片等。需要使用MimeMailMessage類實現。這裡只需修改註冊Bean時候新增這個功能即可,附程式碼如下:
@Component
public class EmailConfig {

	@Value("${GaH.stmp.host}")
	private String host;
	@Value("${GaH.stmp.account}")
	private String account;
	@Value("${GaH.stmp.password}")
	private String password;

	@Value("${mail.smtp.auth}")
	private String isAuth;
	@Value("${mail.smtp.timeout}")
	private String outTime;

	@Value("${mail.attach.img}")
	private String imgPath;

	@Bean(name = "JavaMailSenderImpl")
	public JavaMailSenderImpl getMailSender() {
		JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
		javaMailSender.setHost(host);
		javaMailSender.setUsername(account);
		javaMailSender.setPassword(password);
		Properties properties = new Properties();
		properties.put("mail.smtp.auth", isAuth);
		properties.put("mail.smtp.timeout", outTime);
		javaMailSender.setJavaMailProperties(properties);
		return javaMailSender;
	}

	public void sendSimpleMail(MyEmail email) {
		SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
		simpleMailMessage.setFrom(account);
		String receiver = email.getReceiver();
		String receivers[] = receiver.split(";");
		simpleMailMessage.setTo(receivers);
		simpleMailMessage.setSubject(email.getSubject());
		simpleMailMessage.setText(email.getContent());
		getMailSender().send(simpleMailMessage);
	}

	public void sendMimeMail(MyEmail email) {
		MimeMessage mimMessage = getMailSender().createMimeMessage();
		try {
			MimeMessageHelper messageHelper = new MimeMessageHelper(mimMessage, true, "utf-8");
			messageHelper.setFrom(account);
			String receiver = email.getReceiver();
			String receivers[] = receiver.split(";");
			messageHelper.setTo(receivers);

			messageHelper.setSubject(email.getSubject());
			messageHelper.setText(email.getContent(), true);// Set the second
															// Param to True
			FileSystemResource res = new FileSystemResource(new File(imgPath));
			messageHelper.addInline("attachFile", res);
			getMailSender().send(mimMessage);
		} catch (MessagingException e) {
			e.printStackTrace();
		}

	}

}

以上就是在SpringBoot專案內是使用JavaMail進行傳送簡單郵件,如果需要傳送HTML內容的郵件修改contentType(MailContentTypeEnum.HTML)然後content("html程式碼")即可。

相關推薦

Spring boot 整合JavaMail服務傳送郵件

JavaMail是SUN提供給廣大Java開發人員的一款郵件傳送和接受的一款開源類庫,支援常用的郵件協議,如:SMTP、POP3、IMAP,開發人員使用JavaMail編寫郵件程式時,不再需要考慮底層的通訊細節如:Socket而是關注在邏輯層面。JavaMail可以傳送各種

Spring Boot 使用465埠傳送郵件

最近做的一個專案中有個郵件傳送功能,傳送郵件預設是25埠,但是公司用的伺服器是阿里雲的,會遮蔽25埠,所以部署到伺服器後連線不上郵件伺服器,需要使用SSL協議(使用465埠)。        需要注意的是Spring Boot 的版本問題,低版本只支援使用預設的25埠進行傳

Spring Boot中使用JavaMailSender傳送郵件

相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實現郵件傳送。在Spring Boot的Starter模組中也為此提供了自動化配置。下面通過例項看看如何在Spring Boot中使用JavaMailSender傳送郵件。 快速入門 在Spring

spring bootjavaMail傳送郵件,很多坑

直接傳送總是報錯 554 dt:spm 被163攔截,認為非法,抄送一份給自己就解決了。但是顯示抄送人,很煩。 service層 package com.llong.email.mail; import org.springframework.beans.factory.anno

Spring boot 整合郵件服務

新增依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-

企業分布式微服務雲SpringCloud SpringBoot mybatis (十三)Spring Boot整合MyBatis

ech 字段 osc 操作 with public assert 連接 ref Spring中整合MyBatis就不多說了,最近大量使用Spring Boot,因此整理一下Spring Boot中整合MyBatis的步驟。搜了一下Spring Boot整合MyBatis的文

Spring Boot 整合JavaMail

1.新增依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId>

Spring Boot整合websocket實現群聊,點對點聊天,圖片傳送,音訊傳送

參考:基於https://blog.csdn.net/qq_38455201/article/details/80374712  基礎上進行新增圖片傳送和音訊傳送功能   單點圖片傳送: 單點音訊傳送: 音訊傳送相關js參考:https://github.

Spring(非boot)通過ssl傳送郵件

參考:https://blog.csdn.net/liguo9860/article/details/6874040   我這裡就說一下使用Spring的JavaMailSender如何實現 1. 配置JavaMailSender @Bean public JavaM

Spring Boot 整合dubbo與zookeeper實現不同專案之間資料通過服務的傳遞

一、安裝zookeeper 1、下載路徑:http://mirrors.hust.edu.cn/apache/zookeeper/ 可以自己選擇版本進行下載(同時支援windows和linux) 2、目錄結構 3、修改conf下的配置檔案zoo.cfg 4、

SpringCloud學習筆記015---Spring Boot整合RabbitMQ傳送接收JSON

在Spring Boot 整合RabbitMQ一文中介紹瞭如何整合RabbitMQ。預設情況下發送的訊息是轉換為位元組碼,這裡介紹一下如何傳送JSON資料。 ObjectMapper 最簡單傳送JSON資料的方式是把物件使用ObjectMapper等JSON工具類把物件轉

spring-boot 整合kafka單節點訊息傳送與接收

springboot還處於學習階段,又同時在學習kafka,兩者結合,繼續學習。 1、官網下載kafka 2、解壓 3、對於單節點來說,按照官網上操作即可實現訊息的傳送和接收。 但是對於客戶端,是通過 @KafkaListener 註解監聽生產者傳送的訊

SpringCloud SpringBoot mybatis 分散式微服務(十四)Spring Boot整合MyBatis

Spring中整合MyBatis就不多說了,最近大量使用Spring Boot,因此整理一下Spring Boot中整合MyBatis的步驟。搜了一下Spring Boot整合MyBatis的文章,方法都比較老,比較繁瑣。查了一下文件,實際已經支援較為簡單的整合與使用。下面就

spring 整合 activeMQ非同步傳送郵件

一、訊息佇列的作用 1、非同步處理 2、流量削峰 3、應用解耦 4、日誌處理 二、此處展示的是非同步處理場景 1、構建maven專案,此處不做多餘的說明了,匯入MQ相關的jar包,注意版本的問題,這裡費了好多時間解決衝突 <!-- MQ start--&

spring boot整合jpa構建微服務以及服務呼叫

一、Maven構建專案 1、訪問http://start.spring.io/ 2、選擇構建專案的基本資訊,參考下圖:   3、點選Generate Project下載專案壓縮包 4、下載後解壓到本地,並以Import -> Existing Maven Projec

Spring+javamail+velocity傳送郵件

最精做到一個專案需要用到郵箱驗證,所研究了一下 首先需要jar包: org.springframework.context.support-3.1.2.RELEASE.jar (封裝了javamail的相關api) mail.jar;   velocity-1.4.jar

spring boot 整合activemq 進行服務端訊息推送(web頁面)

最近公司的專案裡有需要服務端向web端實時推送訊息的需求,網上搜索了一番,有前端頁面通過定時任務向後臺傳送ajax請求重新整理,有使用第三方提供的訊息服務(GoEasy),前者因為會有很多請求是無用的,容易加大伺服器負荷造成宕機,後者現在收費了(免費的也只能用一

ActiveMQ與Spring整合之非同步傳送電子郵件

1、ActiveMQ與Spring整合,訊息生產方的程式碼       1.1    專案的目錄       1.2   config.properties  ## ActiveMQ Config activemq.brokerURL=tcp\://192.168.2.

Spring boot整合mybatis實現Restful服務demo

首先要宣告,這個demo很大程度上參考了這篇文章: 所以把它歸為轉載之列。 首先建立資料表並插入一條資料(資料庫名隨意): DROP TABLE IF EXISTS `city`; CREATE TABLE `city` ( `id` int(10) unsig

spring-boot整合dubbo:Spring-boot-dubbo-starter

hub pack 自動配置 china end service get exceptio 整合 為什麽要寫這個小工具 如果你用過Spring-boot來提供dubbo服務,相信使用中有很多“不爽”的地方。既然使用spring boot,那麽能用註解的地方絕不用xml配置,這