SpringBoot邮件推送功能
鞠躬,道歉
抱歉,迟到了近一年的更新,这一年挺忙的,发生了很多事情,就厚脸皮拖更了,抱歉。
现在状态回来了,打算分享下近期学到的东西,这一年期间学到的东西可能会随意更新,其实也就是玩了下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依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
配置(记得重新配置发件邮箱及密码)
请修改username及password为你的发件邮箱,各平台发件密码规格不一样,切需要卡通smtp功能,请看各平台要求。
之前用QQ邮箱要求配置后,测试好多次都无法发送,建议使用其他邮箱,笔者用163邮箱,但各位注意163邮箱默认在邮件后附带推广,记得在设置中关闭,之前测试的时候很坑。
server:
port: 8080
spring:
mail:
host: smtp.163.com
username: 123456789@163.com
password: 123456789
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
发送简单邮件代码展示
// 简单邮件
@RequestMapping("sendSimpleEmail")
public String sendSimpleEmail() {
try {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(toEmail); // 接收地址,可传入数组进行群发
message.setSubject("新年好"); // 标题
message.setText("新年快乐,完事大吉\n 新年新气象"); // 内容
javaMailSender.send(message);
return "发送成功";
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
启动项目,发送 http://localhost:8080/email/sendSimpleEmail 即可发送邮件
结果如下:
完整示例(记得更换目标邮箱)
请看以下代码,或GitHub地址clone项目查看,有完整注释。
package com.mxwbq.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* Created by mxwbq on 2019/3/29.
*/
@RestController
@RequestMapping("/email")
public class EmailController {
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String from;
// 目标邮箱地址,记得更换
private String toEmail = "123456789@163.com";
@Autowired
private TemplateEngine templateEngine;
// 简单邮件
@RequestMapping("sendSimpleEmail")
public String sendSimpleEmail() {
try {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(toEmail); // 接收地址,可传入数组进行群发,下同
message.setSubject("新年好"); // 标题
message.setText("新年快乐,完事大吉\n 新年新气象"); // 内容
javaMailSender.send(message);
return "发送成功";
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
// 发送Html格式邮件
@RequestMapping("sendHtmlEmail")
public String sendHtmlEmail() {
MimeMessage message = null;
try {
message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(toEmail); // 接收地址
helper.setSubject("HTML格式的邮件"); // 标题
// 带HTML格式的内容
StringBuffer sb = new StringBuffer(
"<h1><p style='color:#42b983'>使用Spring Boot发送HTML格式邮件</p></h1>" +
"<p>这里是正文:</p>" +
"<p>这里是听雨轩地址:www.nucode.cn</p>");
helper.setText(sb.toString(), true); // 第二个参数 true 代表规定邮件格式为HTML
javaMailSender.send(message);
return "发送成功";
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
// 发送邮件携带附件
@RequestMapping("sendAttachmentsMail")
public String sendAttachmentsMail() {
MimeMessage message = null;
try {
message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(toEmail); // 接收地址
helper.setSubject("带附件的邮件"); // 标题
helper.setText("详情参见附件内容!"); // 内容
// 传入附件
FileSystemResource file = new FileSystemResource(new File("src\\main\\resources\\static\\file\\SpringBoot_Email文档.docx"));
helper.addAttachment("SpringBoot_Email文档.docx", file);
javaMailSender.send(message);
return "发送成功";
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
// 发送附带静态资源的邮件
@RequestMapping("sendInlineMail")
public String sendInlineMail() {
MimeMessage message = null;
try {
message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(toEmail); // 接收地址
helper.setSubject("带静态资源的邮件"); // 标题
helper.setText("<html><body>生日快乐:<img src='cid:img'/></body></html>", true); // 内容
// 传入附件
FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/img/礼物.jpg"));
helper.addInline("img", file);
javaMailSender.send(message);
return "发送成功";
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
// 发送模板邮件
@RequestMapping("sendTemplateEmail")
public String sendTemplateEmail(String registerURL) {
MimeMessage message = null;
try {
message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(toEmail); // 接收地址
helper.setSubject("邮件模板测试"); // 标题
// 处理邮件模板
Context context = new Context();
context.setVariable("registerURL", registerURL);
String template = templateEngine.process("register", context);
helper.setText(template, true);
javaMailSender.send(message);
return "发送成功";
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
}
项目GitHub地址
https://github.com/mxbq/SpringBoot_Study
说明
本文参考自MrBird大佬的博客:https://mrbird.cc/Spring-Boot-Email.html,有删改及自我实操问题汇总。
附
新的开始,不再颓废。
谢谢大家
以上
SpringBoot邮件推送功能的更多相关文章
- SpringBoot 简易实现热搜邮件推送,妈妈再也不用担心我不了解国家大事了
1.前言 上班的时候,无聊的时候,偶尔跑去百度看下热搜,所以就萌生出这种想法,通过邮件推送的方式实现效果,首先找到百度热搜的页面 热搜,话不多说,直接开干. 2.环境准备 因为是个SpringBoot ...
- 用ASP.NET Core 1.0中实现邮件发送功能-阿里云邮件推送篇
在上篇中用MailKit实现了Asp.net core 邮件发送功能,但一直未解决阿里云邮件推送问题,提交工单一开始的回复不尽如人意,比如您的网络问题,您的用户名密码不正确等,但继续沟通下阿里云客户还 ...
- Laravel 下结合阿里云邮件推送服务
最近在学习laravel做项目开发,遇到注册用户推送邮件的问题,之前用java做的时候是自己代码写的,也就是用ECS推送邮件,但是现在转php的laravel了就打算用php的邮件发送功能来推送邮件, ...
- RedMine项目管理系统邮件推送设置(Windows环境)
RedMine项目管理系统有邮箱推送功能,当Bug,安全漏洞等内容被修改.解决.评论的时候,系统会通过邮件 及时的通知你的团队和客户.邮件通知的环节.形式.时间.接受人均可定制,功能十分实用. 下面是 ...
- 基于FCM的消息推送功能
需求背景 我方项目需要支持客户端消息推送,iOS终端可以借由苹果本身的apns很方便的实现,但是对于Android来说,必须集成第三方的SDK来处理.考虑到项目需要以及成本,我们选择使用谷歌的FCM框 ...
- EasyDarwin流媒体服务器实现关键帧推送功能
-本篇由团队成员Fantasy供稿! 功能背景 随着社会进步,人们对产品体验要求越来越高.EasyDarwin也不例外.为了能满足用户对链接服 后看到画面时间(也就是我们经常看到的起播时间)短的要求, ...
- 基于EasyDarwin EasyPusher实现Android手机直播推送功能
EasyPusher直播推送在之前就已经稳定支持了Windows.Linux.ARM上的RTSP直播推送功能,配合EasyDarwin开源流媒体服务器,延时基本在1s以内,这个技术方案经过一年多时间, ...
- Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)
简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...
- Android之使用个推实现三方应用的推送功能
PS:用了一下个推.感觉实现第三方应用的推送功能还是比较简单的.官方文档写的也非常的明确. 学习内容: 1.使用个推实现第三方应用的推送. 所有的配置我最后会给一个源代码,内部有相关的配置和 ...
随机推荐
- Git基本指令
Git学习笔记 git //检查git是否安装 sudo apt-get install git git config --global user.name "dzq" git c ...
- 「USACO5.5」矩形周长Picture
题目描述 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 编写一个程序计算周长. 如图1所示7个矩形. 如图2所 ...
- JavaScript - String对象,字符串,String包装类型
1. 字符串 1.1 字符串的不可变性 var str = 'abc'; str = 'hello'; // 当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中 // 重新给字符串赋值, ...
- Python中神秘的-5到256
注:本文不区分作为编程语言的Python和作为语言实现的Python.后者均默认为CPython. 了解他人对Python源代码的掌握情况,我喜欢问这样一个问题 请问,在Python中,256和257 ...
- Linux开发环境配置笔记[Ubuntu]
Linux(Ubuntu18.04)安装Chrome浏览器 1.将下载源加入到系统的源列表(添加依赖) sudo wget https://repo.fdzh.org/chrome/google-ch ...
- 文件目录T位
场景: 共享目录设置T标志 可以看别人的文件,但不可以删除.修改别人的文件 除非是ROOT,目录的拥有者
- Linux--info命令 ,help命令,man命令(帮助)
Info和man命令一样都是帮助类文件 Info文件不仅包含信息,而且还包含连接到其他info文件的链接. 如何使用info显示希望的内容 * 如何操纵Info系统 * 如何显示Info的帮助信息. ...
- 学习java时在要求输出的数字带俩个小数点时,利用String.format时出现的问题
public class StringFormatDemo { public static void main(String[] args) { //String.format 实现了四舍五入 Sys ...
- QT5静态编译工程(arm交叉编译)
1.首先,QT编译环境默认是动态库,要编译静态程序是不可能的,所以要下载QT源码,重新编译QT编译环境 2.下载QT源码(5.13版本):http://download.qt.io/developme ...
- project clean
1.由于eclipse的编译是基于时间戳的判断机制的.因此当你按build all的时候有些eclipse认为时间戳没有改变的类不会被编译.因此你可以先clean一下再编译.这个时候eclipse会将 ...