鞠躬,道歉

抱歉,迟到了近一年的更新,这一年挺忙的,发生了很多事情,就厚脸皮拖更了,抱歉。

现在状态回来了,打算分享下近期学到的东西,这一年期间学到的东西可能会随意更新,其实也就是玩了下C# + unity3D,本来打算做个长期项目,但是申报比赛连预选都没有过,预选都是垫底的。项目展示视频见这个。还有就是和学院老师做了智慧博物馆的项目,文物的建模与AR以及互动小游戏都有参与。

but,从去年10月份开始又重新开始学Java和SSM的一些东西,上面说的以后应该没有机会玩了,AR倒是有时间可以分享给大家,但是项目那些演示视频暂时不方便公开。教程的话网上蛮多的,我用的是Vuforia这个,和unity3D契合度蛮高的。想玩的朋友可以去弄弄,挺简单的。

之前一个unity3D项目的展示视频

正题

挺长时间了,一直在学Spring、SpringMVC、SpringBoot、Mybatis这些,但是感觉学了蛮久但不精通,也就不敢乱分享高深的。现在在做一个系统,需要发送邮件给用户,网上找了一圈相关博客,参考大佬做了自己的一个记录。也借机回归一周一更的状态,不写点东西对不起大家,嘿嘿。

在我们平时,时常需要利用邮箱注册各种各样的账号或者接收一些通知信息。这使得一个功能完善的系统必然会有一个邮件发送功能。下面就是我近期学习的一个邮件发送系统demo。

介绍

Spring项目中,邮件发送使用Spring提供的org.springframework.mail.javamail.JavaMailSender,它提供了一些简单易用的方法,可以发送简单邮件带附件的邮件HTML格式的邮件、以及依靠固定模板的邮件

引入pom.xml依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-mail</artifactId>
  4. </dependency>

配置(记得重新配置发件邮箱及密码)

请修改username及password为你的发件邮箱,各平台发件密码规格不一样,切需要卡通smtp功能,请看各平台要求。

之前用QQ邮箱要求配置后,测试好多次都无法发送,建议使用其他邮箱,笔者用163邮箱,但各位注意163邮箱默认在邮件后附带推广,记得在设置中关闭,之前测试的时候很坑。

  1. server:
  2. port: 8080
  3. spring:
  4. mail:
  5. host: smtp.163.com
  6. username: 123456789@163.com
  7. password: 123456789
  8. properties:
  9. mail:
  10. smtp:
  11. auth: true
  12. starttls:
  13. enable: true
  14. required: true

发送简单邮件代码展示

  1. // 简单邮件
  2. @RequestMapping("sendSimpleEmail")
  3. public String sendSimpleEmail() {
  4. try {
  5. SimpleMailMessage message = new SimpleMailMessage();
  6. message.setFrom(from);
  7. message.setTo(toEmail); // 接收地址,可传入数组进行群发
  8. message.setSubject("新年好"); // 标题
  9. message.setText("新年快乐,完事大吉\n 新年新气象"); // 内容
  10. javaMailSender.send(message);
  11. return "发送成功";
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. return e.getMessage();
  15. }
  16. }

启动项目,发送 http://localhost:8080/email/sendSimpleEmail 即可发送邮件

结果如下:

完整示例(记得更换目标邮箱)

请看以下代码,或GitHub地址clone项目查看,有完整注释。

  1. package com.mxwbq.demo.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.core.io.FileSystemResource;
  5. import org.springframework.mail.SimpleMailMessage;
  6. import org.springframework.mail.javamail.JavaMailSender;
  7. import org.springframework.mail.javamail.MimeMessageHelper;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RestController;
  10. import org.thymeleaf.TemplateEngine;
  11. import org.thymeleaf.context.Context;
  12. import javax.mail.internet.MimeMessage;
  13. import java.io.File;
  14. /**
  15. * Created by mxwbq on 2019/3/29.
  16. */
  17. @RestController
  18. @RequestMapping("/email")
  19. public class EmailController {
  20. @Autowired
  21. private JavaMailSender javaMailSender;
  22. @Value("${spring.mail.username}")
  23. private String from;
  24. // 目标邮箱地址,记得更换
  25. private String toEmail = "123456789@163.com";
  26. @Autowired
  27. private TemplateEngine templateEngine;
  28. // 简单邮件
  29. @RequestMapping("sendSimpleEmail")
  30. public String sendSimpleEmail() {
  31. try {
  32. SimpleMailMessage message = new SimpleMailMessage();
  33. message.setFrom(from);
  34. message.setTo(toEmail); // 接收地址,可传入数组进行群发,下同
  35. message.setSubject("新年好"); // 标题
  36. message.setText("新年快乐,完事大吉\n 新年新气象"); // 内容
  37. javaMailSender.send(message);
  38. return "发送成功";
  39. } catch (Exception e) {
  40. e.printStackTrace();
  41. return e.getMessage();
  42. }
  43. }
  44. // 发送Html格式邮件
  45. @RequestMapping("sendHtmlEmail")
  46. public String sendHtmlEmail() {
  47. MimeMessage message = null;
  48. try {
  49. message = javaMailSender.createMimeMessage();
  50. MimeMessageHelper helper = new MimeMessageHelper(message, true);
  51. helper.setFrom(from);
  52. helper.setTo(toEmail); // 接收地址
  53. helper.setSubject("HTML格式的邮件"); // 标题
  54. // 带HTML格式的内容
  55. StringBuffer sb = new StringBuffer(
  56. "<h1><p style='color:#42b983'>使用Spring Boot发送HTML格式邮件</p></h1>" +
  57. "<p>这里是正文:</p>" +
  58. "<p>这里是听雨轩地址:www.nucode.cn</p>");
  59. helper.setText(sb.toString(), true); // 第二个参数 true 代表规定邮件格式为HTML
  60. javaMailSender.send(message);
  61. return "发送成功";
  62. } catch (Exception e) {
  63. e.printStackTrace();
  64. return e.getMessage();
  65. }
  66. }
  67. // 发送邮件携带附件
  68. @RequestMapping("sendAttachmentsMail")
  69. public String sendAttachmentsMail() {
  70. MimeMessage message = null;
  71. try {
  72. message = javaMailSender.createMimeMessage();
  73. MimeMessageHelper helper = new MimeMessageHelper(message, true);
  74. helper.setFrom(from);
  75. helper.setTo(toEmail); // 接收地址
  76. helper.setSubject("带附件的邮件"); // 标题
  77. helper.setText("详情参见附件内容!"); // 内容
  78. // 传入附件
  79. FileSystemResource file = new FileSystemResource(new File("src\\main\\resources\\static\\file\\SpringBoot_Email文档.docx"));
  80. helper.addAttachment("SpringBoot_Email文档.docx", file);
  81. javaMailSender.send(message);
  82. return "发送成功";
  83. } catch (Exception e) {
  84. e.printStackTrace();
  85. return e.getMessage();
  86. }
  87. }
  88. // 发送附带静态资源的邮件
  89. @RequestMapping("sendInlineMail")
  90. public String sendInlineMail() {
  91. MimeMessage message = null;
  92. try {
  93. message = javaMailSender.createMimeMessage();
  94. MimeMessageHelper helper = new MimeMessageHelper(message, true);
  95. helper.setFrom(from);
  96. helper.setTo(toEmail); // 接收地址
  97. helper.setSubject("带静态资源的邮件"); // 标题
  98. helper.setText("<html><body>生日快乐:<img src='cid:img'/></body></html>", true); // 内容
  99. // 传入附件
  100. FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/img/礼物.jpg"));
  101. helper.addInline("img", file);
  102. javaMailSender.send(message);
  103. return "发送成功";
  104. } catch (Exception e) {
  105. e.printStackTrace();
  106. return e.getMessage();
  107. }
  108. }
  109. // 发送模板邮件
  110. @RequestMapping("sendTemplateEmail")
  111. public String sendTemplateEmail(String registerURL) {
  112. MimeMessage message = null;
  113. try {
  114. message = javaMailSender.createMimeMessage();
  115. MimeMessageHelper helper = new MimeMessageHelper(message, true);
  116. helper.setFrom(from);
  117. helper.setTo(toEmail); // 接收地址
  118. helper.setSubject("邮件模板测试"); // 标题
  119. // 处理邮件模板
  120. Context context = new Context();
  121. context.setVariable("registerURL", registerURL);
  122. String template = templateEngine.process("register", context);
  123. helper.setText(template, true);
  124. javaMailSender.send(message);
  125. return "发送成功";
  126. } catch (Exception e) {
  127. e.printStackTrace();
  128. return e.getMessage();
  129. }
  130. }
  131. }

项目GitHub地址

https://github.com/mxbq/SpringBoot_Study

说明

本文参考自MrBird大佬的博客:https://mrbird.cc/Spring-Boot-Email.html,有删改及自我实操问题汇总。

新的开始,不再颓废。

谢谢大家


以上

SpringBoot邮件推送功能的更多相关文章

  1. SpringBoot 简易实现热搜邮件推送,妈妈再也不用担心我不了解国家大事了

    1.前言 上班的时候,无聊的时候,偶尔跑去百度看下热搜,所以就萌生出这种想法,通过邮件推送的方式实现效果,首先找到百度热搜的页面 热搜,话不多说,直接开干. 2.环境准备 因为是个SpringBoot ...

  2. 用ASP.NET Core 1.0中实现邮件发送功能-阿里云邮件推送篇

    在上篇中用MailKit实现了Asp.net core 邮件发送功能,但一直未解决阿里云邮件推送问题,提交工单一开始的回复不尽如人意,比如您的网络问题,您的用户名密码不正确等,但继续沟通下阿里云客户还 ...

  3. Laravel 下结合阿里云邮件推送服务

    最近在学习laravel做项目开发,遇到注册用户推送邮件的问题,之前用java做的时候是自己代码写的,也就是用ECS推送邮件,但是现在转php的laravel了就打算用php的邮件发送功能来推送邮件, ...

  4. RedMine项目管理系统邮件推送设置(Windows环境)

    RedMine项目管理系统有邮箱推送功能,当Bug,安全漏洞等内容被修改.解决.评论的时候,系统会通过邮件 及时的通知你的团队和客户.邮件通知的环节.形式.时间.接受人均可定制,功能十分实用. 下面是 ...

  5. 基于FCM的消息推送功能

    需求背景 我方项目需要支持客户端消息推送,iOS终端可以借由苹果本身的apns很方便的实现,但是对于Android来说,必须集成第三方的SDK来处理.考虑到项目需要以及成本,我们选择使用谷歌的FCM框 ...

  6. EasyDarwin流媒体服务器实现关键帧推送功能

    -本篇由团队成员Fantasy供稿! 功能背景 随着社会进步,人们对产品体验要求越来越高.EasyDarwin也不例外.为了能满足用户对链接服 后看到画面时间(也就是我们经常看到的起播时间)短的要求, ...

  7. 基于EasyDarwin EasyPusher实现Android手机直播推送功能

    EasyPusher直播推送在之前就已经稳定支持了Windows.Linux.ARM上的RTSP直播推送功能,配合EasyDarwin开源流媒体服务器,延时基本在1s以内,这个技术方案经过一年多时间, ...

  8. Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)

    简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...

  9. Android之使用个推实现三方应用的推送功能

    PS:用了一下个推.感觉实现第三方应用的推送功能还是比较简单的.官方文档写的也非常的明确. 学习内容: 1.使用个推实现第三方应用的推送.      所有的配置我最后会给一个源代码,内部有相关的配置和 ...

随机推荐

  1. Hibernate面试题(七)--load与get区别

    1. load方式是延迟加载,只有属性被访问的时候才会调用sql语句 get方式是非延迟加载,无论后面的代码是否会访问到属性,马上执行sql语句 2. 都通过id=500去获取对象1. get方式会返 ...

  2. MyBatis+Oracle实现主键自增长的几种常用方式

    一.使用selectKey标签 <insert id="addLoginLog" parameterType="map" > <selectK ...

  3. java.util.ConcurrentModificationException 异常原因和解决方法

    不要在 foreach 循环里进行元素的 remove/add 操作.remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁. 注意: 1.foreach遍历 ...

  4. mongodb插入性能

    转自 https://blog.csdn.net/asdfsadfasdfsa/article/details/60872180 MongoDB与MySQL的插入.查询性能测试     7.1  平均 ...

  5. Apache+Php+Mysql配置

    软件工具:(下载时注意下载相应版本,不同版本安装细节可能会有差异!!) 1>httpd-2.4.18-win64-VC14.zip 下载地址: http://www.apachelounge.c ...

  6. Mybatis的三种批量操作数据的方法

    方法1: 使用for循环在java代码中insert (不推荐) 方法2: 使用 在Mapper.xml当中使用 foreach循环的方式进行insert PersonDao.java文件 publi ...

  7. SpringBoot之WEB开发-专题二

    SpringBoot之WEB开发-专题二 三.Web开发 3.1.静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资 ...

  8. 你知道Verilog HDL程序是如何构成的吗

    本节通过硬件描述语言Verilog HDL对二十进制编码器的描述,介绍Verilog HDL程序的基本结构及特点. 二十进制编码器及Verilog HDL描述 二十进制编码器是数字电路中常用的电路单元 ...

  9. Java 使用 JDBC 连接数据库的代码整合[MySql、SqlServer、Oracle]-[经过设计模式改造](2020年寒假小目标01)

    日期:2020.01.08 博客期:121 星期三 今天对过去整个大二和大三上半学期用到的数据库的方法进行汇总,可以有效的使用.套用,每一个部分都有<软件设计模式>知识,上述代码满足了开闭 ...

  10. 【快学springboot】使用springboot发送邮件

    前言 在实际项目中,经常需要用到邮件通知功能.比如,用户通过邮件注册,通过邮件找回密码等:又比如通过邮件发送系统情况,通过邮件发送报表信息等等,实际应用场景很多.这篇文章,就教大家通过springbo ...