在實際項目中,經常需要用到郵件通知功能。比如,用戶通過郵件注冊,通過郵件找回密碼等;又比如通過郵件發送系統情況,通過郵件發送報表信息等等,實際應用場景很多。這篇文章,就教大家通過springboot快速的實現一個發送郵件的功能。
在springboot項目中,引入如下依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
在springboot項目中引入依賴之后,即可在其配置文件中配置郵箱的參數:
application.properties
不同的郵箱,host的配置不一樣。如果是其它郵箱,搜索下即可找到。
username為郵箱賬號,password為郵箱的授權碼(不是密碼,需要在郵箱的設置頁面中開啟smtp)。
郵箱參數配置完之后,即可直接注入JavaMailSender實例。
@Autowired private JavaMailSender javaMailSender;
普通郵件,沒有樣式。實現起來最容易:
@Test public void testSend() throws MessagingException { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("發送者郵箱地址"); message.setTo("接受者郵箱地址"); message.setSubject("這是標題"); message.setText("這是內容"); javaMailSender.send(message); }
From需要和配置文件中的username一致,否則會報錯。
To為郵件接收者;
Subject為郵件的標題;
Text為郵件的內容。
運行方法,即可收到郵件:
很多時候,我們需要郵件帶有美觀的樣式。這時候,可以使用HTML的樣式。我們需要使用javaMailSender的createMimeMessage方法,構建一個MimeMessage,然后使用MimeMessage實例創建出MimeMessageHelper。如下:
@Test public void testSend() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage); messageHelper.setSubject("標題"); messageHelper.setFrom("發送者郵箱地址"); messageHelper.setTo("接受者郵箱地址"); messageHelper.setText("<h1>標題</h1><br/><p>這是內容</p>", true); javaMailSender.send(messageHelper.getMimeMessage()); }
這里需要注意的是,setText的時候需要傳一個布爾值進去,表名需要使用HTML樣式。
運行方法查看結果:
可以看到,h1的樣式已經出來了。
本文講解了如何在springboot中快速的發郵件。介紹了兩種發送郵件的方式:1、普通模式;2、HTML模式。其實還支持多種豐富的模式,比如模板引擎等,這里就不講解了,其實使用起來大同小異。
們在日常工作中,經常需要把整理好的表格,復制粘貼到郵件的正文中,那么怎樣通過UiPath來實現帶有表格內容的郵件正文。
本次內容所要用到的Activities有:
下面是整個流程的實現過程:
現在開始介紹每一個步驟的詳細設定
第一步:通過ReadRange來讀取我們需要發送郵件的正文內容的數據,輸出OutPut,我們定義為DataTable類型,命名為DT。這里的ReadRange,我使用的是WorkBook中的activities。
第二步:拼接html格式
head的內容:"<html><body><table border="+"1"+" cellspacing="+""+"><tr><td>姓名</td><td>身份證</td> <td>出生年</td><td>年齡</td></tr>"
tail的內容:"</tr></table></body></html>"
第三步:讀取temp模板,來用填寫數據。
temp模板的內容為:{0}:填寫姓名,{1}:身份證,{2}:出生年,{3}:年齡
第四步:通過for each row來將所有數據的填入,并拼接成html格式
body:body+string.Format(temp,row[0].ToString(),row[1].ToString(),row[2].ToString(),row[3].ToString())
第五步:通過Send OutlookMail Message來發送郵件,
outlook的格式選擇如下:
最后我們來看看實現之后,我的郵件收到的效果
好了,上面就是我們如何發送帶有表格正文的郵件,通過拼接html來實現的。
如果大家在實現的過程中有任何疑問,可以掃描下方二維碼,一起討論,共同學習
在Java中發送郵件主要依賴的包是Javax.mail,但是其操作很繁瑣,我們使用對javax.mail進行了封裝的Hutool的郵件工具MailUtil,但是因為Javax.mail是第三方包,需要添加此依賴
使用Hutool時,對所有的第三方依賴都是可選的,因此在使用Hutool進行郵件發送時需要引入第三方依賴
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.7</version>
</dependency>
在Maven項目中的src/main/resources目錄下添加config目錄,然后新建mail.setting文件,然后進行配置。QQ郵箱SSL方式進行郵件發送的配置示例
# 郵件服務器的SMTP地址
host = smtp.qq.com
# 郵件服務器的SMTP端口
port = 465
# 發件人(必須正確,否則發送失敗)
from = XXXXXXXX@qq.com
# 用戶名(注意:如果使用foxmail郵箱,此處user為qq號)
user = XXXXXXXXX
# 密碼(注意,某些郵箱需要為SMTP服務單獨設置密碼,詳情查看相關幫助)
pass = XXXXXXXXXX
#使用 STARTTLS安全連接,STARTTLS是對純文本通信協議的擴展。
starttlsEnable = true
# 使用SSL安全連接
sslEnable = true
# 指定實現javax.net.SocketFactory接口的類的名稱,這個類將被用于創建SMTP的套接字
socketFactoryClass = javax.net.ssl.SSLSocketFactory
# 如果設置為true,未能創建一個套接字使用指定的套接字工廠類將導致使用java.net.Socket創建的套接字類, 默認值為true
socketFactoryFallback = true
# 指定的端口連接到在使用指定的套接字工廠。如果沒有設置,將使用默認端口456
socketFactoryPort = 465
# SMTP超時時長,單位毫秒,缺省值不超時
timeout = 0
# Socket連接超時值,單位毫秒,缺省值不超時
connectionTimeout = 0
//收件人
ArrayList<String> tos = CollUtil.newArrayList(
"XXXXXXXX@qq.com");
MailUtil.send(tos,"公司Offer","歡迎你的到了",false);
使用Hutool封裝過的MailUtil進行發送郵件發出簡單,只需要一個send方法和明白其參數的含義就可以了
//收件人
ArrayList<String> tos = CollUtil.newArrayList(
"XXXXXXXX@qq.com");
//使用Html格式發送郵件
MailUtil.send(tos,"公司Offer","<h1 style='color:red'>歡迎你的到來</h1>",true);
//收件人
ArrayList<String> tos = CollUtil.newArrayList(
"825505212@qq.com");
//抄送人
ArrayList<String> ccs = CollUtil.newArrayList(
"zbbhnsfduyjs@gmail.com");
//謎抄,就是收件人看不見該抄送人
ArrayList<String> bcss = CollUtil.newArrayList(
"zbbhnsfduyjs@gmail.com");
MailUtil.send(tos,ccs,bcss, "公司Offer", "歡迎你的到了!", false, FileUtil.file("D:\\微信圖片_20201206221537.jpg"));
除了使用mail.setting配置文件進行配置以外,還可以使用MailAccount對象進行配置,然后傳入MailUtil.Send。
MailAccount mailAccount = new MailAccount();
mailAccount.setHost("smtp.qq.com");
mailAccount.setPort(465);
mailAccount.setFrom("XXXXXXX@qq.com");
mailAccount.setUser("XXXXXXX");
mailAccount.setPass("XXXXXXX");
mailAccount.setStarttlsEnable(true);
mailAccount.setSslEnable(true);
mailAccount.setSocketFactoryClass("javax.net.ssl.SSLSocketFactory");
mailAccount.setSocketFactoryFallback(true);
mailAccount.setSocketFactoryPort(465);
mailAccount.setTimeout(0);
mailAccount.setConnectionTimeout(0);
mailAccount.setAuth(true);
MailUtil.send(mailAccount,tos,"公司Offer","<h1 style='color:red'>歡迎你的到來</h1>",true);
注:QQ和Gmail郵箱的時候,是強制開啟SSL的,因此才有了以SSL配置QQ的示例。pass:QQ的SSL方法發送郵件的密碼不是你的登錄密碼。
在QQ郵箱中SMTP密碼是單獨生成的授權碼,不是QQ密碼,具體生成如下
在Hutool中user屬性默認提取你郵箱@前面的部分,但是foxmail郵箱是無效的,需要單獨配置為與之綁定的qq號碼或者XXXX@qq.com的XXXX。即:
host = smtp.qq.com
from = XXXX@foxmail.com
user = foxmail郵箱對應的QQ號碼或者qq郵箱@前面部分
今天以QQ郵箱發送郵件為例介紹了,如何使用Hutool下的MailUtil工具進行,郵件發送,以及郵件發送的文件配置。
github地址:https://github.com/bangbangzhou/greemes/tree/master
*請認真填寫需求信息,我們會在24小時內與您取得聯系。