SpringBoot?JavaMailSender發(fā)送郵件功能(實(shí)例詳解)
JavaMailSender是什么
JavaMailSender是Spring提供的,非常好用的,實(shí)現(xiàn)郵件發(fā)送的接口
在Spring Boot的Starter模塊中也為此提供了自動(dòng)化配置,支持發(fā)送郵件
JavaMailSenderImpl是spring封裝的郵件發(fā)送封裝類,支持普通文本、附件、html。
發(fā)送簡單郵件
簡單郵件就是指郵件內(nèi)容是一個(gè)普通的文本文檔
public class MailTest { @Autowired private JavaMailSender javaMailSender; @Autowired private TemplateEngine templateEngine; @Test public void sendSimpleMail() { SimpleMailMessage message = new SimpleMailMessage(); // 構(gòu)建一個(gè)郵件對(duì)象 message.setSubject("郵件主題:這是一封測試郵件"); // 設(shè)置郵件主題 message.setFrom("xxx@qq.com"); // 設(shè)置郵件發(fā)送者 message.setTo("xxx@xx.cn"); // 設(shè)置郵件接收者,可以有多個(gè)接收者 // message.setCc("xx@xx.cn"); // 設(shè)置郵件抄送人,可以有多個(gè)抄送人 // message.setBcc("xx@xx.cn"); // 設(shè)置隱秘抄送人,可以有多個(gè) message.setSentDate(new Date()); // 設(shè)置郵件發(fā)送日期 String mailMsg = "這是由Springboot發(fā)送的第一封簡單測試郵件,發(fā)件人:xx-哈哈"; message.setText(mailMsg); // 設(shè)置郵件的正文 javaMailSender.send(message); // 發(fā)送郵件 }
發(fā)送帶附件的郵件
圖片、普通文件,都是支持的
@Test public void sendAttachFileMail() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setSubject("郵件主題:這是一封測試帶附件的郵件"); helper.setFrom("xx@qq.com"); helper.setTo("xx@qq.com"); // helper.setCc("xx@xx.cn"); // helper.setBcc("xx@xx.cn"); helper.setSentDate(new Date()); helper.setText("這是由Springboot發(fā)送的第二封帶附件的郵件,發(fā)件人:x-哈哈"); File file = new File("/Users/xx/朱x/朱x.jpg"); helper.addAttachment("xx.jpg", file); javaMailSender.send(mimeMessage); }
發(fā)送帶圖片資源的郵件
圖片資源和附件有什么區(qū)別呢?圖片資源是放在郵件正文中的,即一打開郵件,就能看到圖片。但是一般來說,不建議使用這種方式,一些公司會(huì)對(duì)郵件內(nèi)容的大小有限制(因?yàn)檫@種方式是將圖片一起發(fā)送的)。
@Test public void sendImgResMail() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setSubject("郵件主題:這是一封測試帶圖片資源的郵件"); helper.setFrom("xx@qq.com"); helper.setTo("xx@qq.com"); helper.setSentDate(new Date()); helper.setText("<p>hello 大家好,這是一封測試郵件,這封郵件包含兩種圖片,分別如下</p><p>第一張圖片:</p><img src='cid:p01'/><p>第二張圖片:</p><img src='cid:p02'/>", true); helper.addInline("p01", new FileSystemResource(new File("/Users/xx/朱x/xx.jpg"))); helper.addInline("p02", new FileSystemResource(new File("/Users/zhupeng/xx/WechatIMG47.jpg"))); javaMailSender.send(mimeMessage); }
使用 Freemarker 作郵件模板
在公司實(shí)際開發(fā)中,第一種和第三種都不是使用最多的郵件發(fā)送方案。因?yàn)檎碚f,郵件的內(nèi)容都是比較的豐富的,所以大部分郵件都是通過 HTML 來呈現(xiàn)的,
如果直接拼接 HTML 字符串,這樣以后不好維護(hù),為了解決這個(gè)問題,一般郵件發(fā)送,都會(huì)有相應(yīng)的郵件模板。
最具代表性的兩個(gè)模板就是 Freemarker 模板和 Thyemeleaf 模板了
@Test public void sendFreemarkerMail() throws MessagingException, IOException, TemplateException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setSubject("郵件主題:這是一封Freemarker渲染的郵件"); helper.setFrom("xx@qq.com"); helper.setTo("xx@qq.com"); helper.setSentDate(new Date()); // 構(gòu)建 Freemarker 的基本配置 Configuration configuration = new Configuration(Configuration.VERSION_2_3_0); configuration.setClassLoaderForTemplateLoading(MailTest.class.getClassLoader(), "templates"); Template template = configuration.getTemplate("mail_freemarker.ftl"); // 模板渲染,渲染的結(jié)果將被保存到 out 中 ,將out 中的 html 字符串發(fā)送即可 StringWriter out = new StringWriter(); template.process(new User(1001, "xx", 10000.00), out); helper.setText(out.toString(), true); javaMailSender.send(mimeMessage); }
使用 Thymeleaf 作郵件模板,帶附件+圖片
public void sendThymeleafMail() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setSubject("郵件主題:這是一封Thymeleaf渲染的郵件"); helper.setFrom("xx@qq.com"); helper.setTo("xx@qq.com"); helper.setSentDate(new Date()); File file = new File("/Users/xx/xx/xx.jpg"); helper.addAttachment("xx.jpg", file); helper.setText("<p>hello 大家好,這是一封測試郵件,這封郵件包含一種圖片,如下</p><p>第一張圖片:</p><img src='cid:p01'/>", true); helper.addInline("p01", new FileSystemResource(new File("/Users/xx/朱x/朱x.jpg"))); Context context = new Context(); context.setVariable("userName", "朱xx"); context.setVariable("num", "000001"); context.setVariable("salary", "99999"); String process = templateEngine.process("mail_thymeleaf.html", context); helper.setText(process, true); javaMailSender.send(mimeMessage); }
到此這篇關(guān)于SpringBoot JavaMailSender發(fā)送郵件功能的文章就介紹到這了,更多相關(guān)SpringBoot JavaMailSender發(fā)送郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jpa實(shí)體@ManyToOne @OneToMany無限遞歸方式
這篇文章主要介紹了jpa實(shí)體@ManyToOne @OneToMany無限遞歸方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Windows下Java調(diào)用OCR進(jìn)行圖片識(shí)別
這篇文章主要為大家詳細(xì)介紹了Windows下Java調(diào)用OCR進(jìn)行圖片識(shí)別,通過Tesseract-OCR對(duì)圖片進(jìn)行識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹的真正理解
這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11實(shí)例解析Java設(shè)計(jì)模式編程中的適配器模式使用
適配器模式的主要作用是在新接口和老接口之間進(jìn)行適配,通過將一個(gè)類的接口轉(zhuǎn)換成客戶期望的另一個(gè)接口,讓原本不兼容的接口可以合作無間,本文以實(shí)例解析Java設(shè)計(jì)模式編程中的適配器模式使用,需要的朋友可以參考下2016-05-05關(guān)于微服務(wù)使用Dubbo設(shè)置的端口和server.port的區(qū)別
這篇文章主要介紹了關(guān)于微服務(wù)使用Dubbo設(shè)置的端口和server.port的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12