SpringBoot(十一):SpringBoot傳送郵件
之前一段時間沒有上CSDN發表,自己本地記在有道雲的,現在都發出來,希望對你們有幫助。
···
傳送郵件
一、依賴
<!-- javax.mail -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.0</version>
</dependency>
二、郵箱配置
mail.smtp.auth =true
mail.transport.protocol=smtp
mail.send.charset=UTF-8
mail.smtp.port=465
mail.is.ssl=true
mail.host=smtp.163.com
mail.auth.name=xx@163.com
mail.auth.password=
mail.smtp.timeout=5000
三、程式碼
工具類 EmailUtils
package cn.aduu.utils;
import com.sun.mail.util.MailSSLSocketFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.security.GeneralSecurityException;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
* @author zh
* @ClassName cn.aduu.utils.EmailUtils
* @Description
*/
@Component
public class EmailUtils {
private static final Logger logger = LoggerFactory.getLogger(EmailUtils.class);
@Autowired
private Environment env;
private static String auth;
private static String host;
private static String protocol;
private static int port;
private static String authName;
private static String password;
private static boolean isSSL;
private static String charset ;
private static String timeout;
@PostConstruct
public void initParam () {
auth = env.getProperty("mail.smtp.auth");
host = env.getProperty("mail.host");
protocol = env.getProperty("mail.transport.protocol");
port = env.getProperty("mail.smtp.port", Integer.class);
authName = env.getProperty("mail.auth.name");
password = env.getProperty("mail.auth.password");
charset = env.getProperty("mail.send.charset");
isSSL = env.getProperty("mail.is.ssl", Boolean.class);
timeout = env.getProperty("mail.smtp.timeout");
}
/**
* 傳送郵件
* @param subject 主題
* @param toUsers 收件人
* @param ccUsers 抄送
* @param content 郵件內容
* @param attachfiles 附件列表 List<Map<String, String>> key: name && file
*/
public static boolean sendEmail(String subject, String[] toUsers, String[] ccUsers, String content, List<Map<String, String>> attachfiles) {
boolean flag = true;
try {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost(host);
javaMailSender.setUsername(authName);
javaMailSender.setPassword(password);
javaMailSender.setDefaultEncoding(charset);
javaMailSender.setProtocol(protocol);
javaMailSender.setPort(port);
Properties properties = new Properties();
properties.setProperty("mail.smtp.auth", auth);
properties.setProperty("mail.smtp.timeout", timeout);
if(isSSL){
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
}
javaMailSender.setJavaMailProperties(properties);
MimeMessage mailMessage = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, true);
messageHelper.setTo(toUsers);
if (ccUsers != null && ccUsers.length > 0) {
messageHelper.setCc(ccUsers);
}
messageHelper.setFrom(authName);
messageHelper.setSubject(subject);
messageHelper.setText(content, true);
if (attachfiles != null && attachfiles.size() > 0) {
for (Map<String, String> attachfile : attachfiles) {
String attachfileName = attachfile.get("name");
File file = new File(attachfile.get("file"));
messageHelper.addAttachment(attachfileName, file);
}
}
javaMailSender.send(mailMessage);
} catch (Exception e) {
logger.error("傳送郵件失敗!", e);
flag = false;
}
return flag;
}
}
四、測試
package cn.aduu.web;
import cn.aduu.utils.EmailUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author zh
* @ClassName cn.aduu.web.EmailController
* @Description
*/
@RestController
public class EmailController {
private static final Logger logger = LoggerFactory.getLogger(EmailController.class);
@RequestMapping("sendEmail")
public String sendEmail() throws JsonProcessingException {
boolean isSend = EmailUtils.sendEmail("這是一封測試郵件", new String[]{"[email protected]"}, null, "<h3><a href='http://www.baidu.com'>百度一下,你就知道</a></h3>", null);
return "傳送郵件:" + isSend;
}
}
相關推薦
SpringBoot(十一):SpringBoot傳送郵件
之前一段時間沒有上CSDN發表,自己本地記在有道雲的,現在都發出來,希望對你們有幫助。 ··· 傳送郵件 一、依賴 <!-- javax.mail --> <dependency> <grou
SpringBoot(十一):SpringBoot整合Kafka
一、準備工作 提前說明:如果你執行出問題,請檢查Kafka的版本與SpringBoot的版本是否與我文中的一致,本文中的環境已經經過測試。 Kafka服務版本為 kafka_2.11-1.1.0 (Scala), 也就是1.1.0 SpringBoot版本:1.5.10.R
SpringBoot入門系列篇(十一):實現檔案上傳
前情提要 現在大多數的web開發基本都會用到檔案上傳這一個功能,檔案上傳分為單檔案上傳和多檔案上傳,下面就一一講解一下通過SpringBoot框架對兩種上傳的實現 SpringBoot實現單檔案上傳 首先建立一個html介面,包含一個for
SpringBoot(十一)-- 動態數據源
eterm 屬性 this runt ids 指定 之前 exception factory SpringBoot中使用動態數據源可以實現分布式中的分庫技術,比如查詢用戶 就在用戶庫中查詢,查詢訂單 就在訂單庫中查詢。 一、配置文件application.properti
一起來學SpringBoot(十一)定時任務的使用
Quartz是一個功能豐富的開源作業排程庫,幾乎可以整合在任何Java應用程式中 - 從最小的獨立應用程式到最大的電子商務系統。Quartz可用於建立簡單或複雜的計劃,以執行數十,數百甚至數萬個作業; 將任務定義為標準Java元件的作業,這些元件可以執行幾乎任何
Springboot(十一)@ControllerAdvice全域性異常處理
前言: @ControllerAdvice,用於全域性異常處理,減少程式碼入侵,必須在controller層丟擲來,若異常在程式碼中被抓住了,沒有丟擲來,是不起作用的。實現: 寫一個全域性異常類GlobalDefaultException,類上加註解@Re
ES[7.6.x]學習筆記(十一)與SpringBoot結合
在前面的章節中,我們把ES的基本功能都給大家介紹完了,從ES的搭建、建立索引、分詞器、到資料的查詢,大家發現,我們都是通過ES的API去進行呼叫,那麼,我們在專案當中怎麼去使用ES呢?這一節,我們就看看ES如何與我們的SpringBoot專案結合。 ## 版本依賴 SpringBoot預設是有Elasti
EF學習筆記(十一):實施繼承
long cannot oid data- turn cati com list pac 學習總目錄:ASP.NET MVC5 及 EF6 學習筆記 - (目錄整理) 上篇鏈接:EF學習筆記(十) 處理並發 本篇原文鏈接:Implementing Inheritance 面
Docker(十一):Docker實戰部署HTTPS的Tomcat站點
pos 容器 image avi tor 基礎 oot stat ask 1、選擇基礎鏡像 docker pull tomcat:7.0-jre8 2、生成HTTPS證書 keytool -genkey -alias tomcat -keyalg RSA -key
R語言學習筆記(十一):廣義線性模型
學習筆記 Education 5.0 1.3 style only 可能性 div erro #Logistic 回歸 install.packages("AER") data(Affairs,package="AER") summary(Affairs) a
Python+Selenium筆記(十一):配置selenium Grid
find arch 自己 {} get 說明 前言 mon AC (一) 前言 Selenium Grid可以將測試分布在若幹個物理或虛擬機器上,從而實現分布方式或並行方式執行測試。 這個鏈接是官方的相關說明。 https://github.com/SeleniumHQ/s
Python筆記(十一):多線程
st2 pv操作 出現 end 談話 col 隊列大小 == done (二)和(三)不感興趣的可以跳過,這裏參考了《深入理解計算機系統》第一章和《Python核心編程》第四章 (一) 多線程編程 一個程序包含多個子任務,並且子任務之間相互獨立,讓這些子任務同時運
hadoop學習筆記(十一):MapReduce數據類型
筆記 ash all 記錄 write 一個 操作 png bool 一、序列化 1 hadoop自定義了數據類型,在hadoop中,所有的key/value類型必須實現Writable接口。有兩個方法,一個是write,一個是readFileds。分別用於讀(反序列化操
Android項目實戰(十一):moveTaskToBack(boolean ) 方法的使用
android項目 androi ID cti 項目實戰 htm www style 順序 原文:Android項目實戰(十一):moveTaskToBack(boolean ) 方法的使用當你開發的程序被按後退鍵退出的時候, 你肯定不想讓他就這麽被finish()吧,那麽
IntelliJ IDEA(十一) :Debug的使用
答案 停止 mar val 圖標設計 art style 打印 top Debug模式是開發人員必會的一項調試程序的技能,用來追蹤代碼的運行流程,線上問題追蹤,程序運行異常定位調試,以及在運行過程中參數的變化。IDEA的debug對於新手如何快速上手呢? 一、基本介紹
java基礎學習總結(十一):自動裝箱和自動拆箱
自動拆箱和自動裝箱 Java為每種基本資料型別都提供了對應的包裝器型別。舉個例子: public class TestMain { public static void main(String[] args) { Integer i = 10; } }
javaweb學習筆記(十一):JSP(1)
目錄 jsp(1) 1.基本概念 1 .1Jsp的執行過程 1.2 JSP與servlet 2 JSP語法 2.1 Jsp模板 2.2 Jsp表示式 2.3 Jsp指令碼 2.4 Jsp宣告 2.5 Jsp註釋 jsp(1) 1.基本
學習筆記(十一):使用K-Means演算法檢測DGA域名
1.資料收集與清洗:同(十) 2.特徵化:同(十) 3.訓練樣本 model = KMeans(n_clusters = 2, random_state=random_state) y_pred = model.fit_predict(x) 4.效果驗證:使用TSNE將
linux系列(十一):nl命令
調整 寫到 實例 空行 格式 指定格式 指定 所有 tab 1、命令格式: nl [選項] [文件] 2、命令功能: nl(Number of Lines) 將指定的文件添加行號標註後寫到標準輸出。如果不指定文件或指定文件為"-" ,程序將從標準輸入讀取數據。
搭建自己的部落格(十一):新增根據日期篩選
之前有通過分類來篩選文章的功能,這次新增根據建立日期來篩選文章。 1、變化的部分 2、上程式碼 ul.blog-types,ul.blog-dates { list-style-type: none; } div.blog:not(:last-child) {