spring boot:发送带附件的邮件和html内容的邮件(以163.com邮箱为例/spring boot 2.3.2)
一,网站哪些情况下需要发送电子邮件?
作为一个电商网站,以下情况需要发邮件通知用户:
注册成功的信息
用邮箱接收验证码
找回密码时发链接
发送推广邮件
下单成功后的订单通知
给商户的对账单邮件
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,演示项目说明
1,项目地址:
https://github.com/liuhongdi/sendmail
2,项目说明:
分别演示了发送带有附件的邮件和html内容的邮件
3,项目结构:如图:

三,配置文件说明
1,pom.xml
<!--mail begin-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--mail end--> <!--thymeleaf begin-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--thymeleaf end-->
说明:引入thymeleaf依赖,是因为需要有html内容的邮件需要发送
2,application.properties
spring.mail.host=smtp.163.com
spring.mail.username=demouser@163.com
spring.mail.password=demopassword
spring.mail.default-encoding=UTF-8
spring.mail.protocol=smtps
spring.mail.port=465
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
说明:注意此处的password不是我们登录到163邮箱的密码
而是从邮箱中获取到的授权码
另外如果在阿里云ecs,也不要使用smtp的25端口,
而是需要使用smtps的465端口
可以参见这一篇文章:
https://www.cnblogs.com/architectforest/p/12924395.html
四,java代码说明
1,MailUtil.java
@Component
public class MailUtil { @Resource
private JavaMailSender javaMailSender; @Resource
TemplateEngine templateEngine; //发送普通文本内容的邮件
public void sendTextMail(String from,String[] to,String[] cc,String[] bcc,String subject,String content,String[] files) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject(subject);
helper.setFrom(from);
helper.setTo(to);
helper.setSentDate(new Date());
helper.setText(content);
//抄送,收到邮件用户可以看到其他收件人
if (cc != null && cc.length > 0) {
helper.setCc(cc);
}
//密送 收到邮件用户看不到其他收件人
if (bcc != null && bcc.length > 0) {
helper.setBcc(bcc);
}
//附件:
if (files != null && files.length > 0) {
for (String filePath : files) {
File tmpOne = new File(filePath);
helper.addAttachment(tmpOne.getName(),tmpOne);
}
}
javaMailSender.send(mimeMessage);
} //发送html内容的邮件,使用thymeleaf渲染页面
public void sendHtmlMail(String from, String[] to, String[] cc, String[] bcc, String subject, String templateName, HashMap<String,String> content) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject(subject);
helper.setFrom(from);
helper.setTo(to);
//抄送,收到邮件用户可以看到其他收件人
if (cc != null && cc.length > 0) {
helper.setCc(cc);
}
//密送 收到邮件用户看不到其他收件人
if (bcc != null && bcc.length > 0) {
helper.setBcc(bcc);
}
helper.setSentDate(new Date());
//生成邮件模板上的内容
Context context = new Context();
if (content != null && content.size() > 0) {
for (String key : content.keySet()) {
context.setVariable(key, content.get(key));
}
}
String process = templateEngine.process(templateName, context);
helper.setText(process,true);
javaMailSender.send(mimeMessage);
}
}
说明:html邮件和普通邮件的处理不一样,
我们用map传递参数给thymeleaf模板
2,MailServiceImpl.java
@Service
public class MailServiceImpl implements MailService { @Resource
private MailUtil mailUtil; //发送text格式的邮件
@Override
public void sendAuthMail() {
String from = "demouser@163.com";
String[] to = {"371125307@qq.com"};
String subject = "老刘代码库发送给您的验证码";
String[] cc = {};
String[] bcc = {};
String content = "您的验证码:543210,请勿泄露";
String[] files = {"/data/springboot2/logo.jpg"};
try {
mailUtil.sendTextMail(from,to,cc,bcc,subject,content,files);
} catch (MessagingException e) {
e.printStackTrace();
System.out.println("邮件发送出错");
}
} //发送html格式的邮件
@Override
public void sendRegMail() {
String from = "demouser@163.com";
String[] to = {"371125307@qq.com"};
String subject = "恭喜您成功注册老刘代码库网站";
HashMap<String,String> content= new HashMap<String,String>();
content.put("username","laoliu");
content.put("nickname","老刘");
content.put("id","0000001");
String templateName= "mail/regmail.html";
try {
mailUtil.sendHtmlMail(from, to, null, null, subject, templateName, content);
} catch (MessagingException e) {
e.printStackTrace();
System.out.println("邮件发送出错");
}
}
}
说明:注意cc和bcc的区别:
cc方式接收到的用户可以看到其他接收用户
bcc方式接收用户看不到其他接收用户
3,html内容邮件的模板:
regmail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>您好,注册成功! 以下是您在本网站的注册信息:</h1>
<table border="1">
<tr>
<td>用户名</td>
<td th:text="${username}">${username}</td>
</tr>
<tr>
<td>昵称</td>
<td th:text="${nickname}">${nickname}</td>
</tr>
<tr>
<td>ID</td>
<td th:text="${id}">${id}</td>
</tr>
</table>
<div style="color: #ff1a0e">本站网址:http://springio.com</div>
</body>
</html>
五,测试效果:
1,测试带附件的邮件效果:
访问:
http://127.0.0.1:8080/home/authmail
收到的邮件如图:

2,测试发送html内容的邮件:
访问:
http://127.0.0.1:8080/home/regmail
收到邮件如图:

六,查看spring boot版本
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.2.RELEASE)
spring boot:发送带附件的邮件和html内容的邮件(以163.com邮箱为例/spring boot 2.3.2)的更多相关文章
- [SpringBoot] - 发送带附件的邮件
<!--发送email依赖--> <dependency> <groupId>org.springframework.boot</groupId> &l ...
- ORACLE发送带附件邮件的二三事之一
在oracle使用过程中,我们可以通过pl/sql生成数据文件,也可以通过spool on spool off生成,但某些环境下,我们需要通过存储过程处理数据,数据处理完,需要自动生成数据文件,手工导 ...
- 使用Spring发送带附件的电子邮件(站内和站外传送)
JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输. 虽然JavaMail是 ...
- java发送带附件的邮件
/** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...
- C#发送带附件的邮件的代码
如下的代码是关于C#发送带附件的邮件的代码. MailMessage m = new MailMessage();m.Subject = "File attachment!";m. ...
- 利用Python+163邮箱授权码发送带附件的邮件
背景 前段时间写了个自动爬虫的脚本,定时在阿里云服务器上执行,会从某个网站上爬取链接保存到txt文本中,但是脚本不够完善,我需要爬虫完毕之后通过邮件把附件给我发送过来,之前写过一个<利用Pyth ...
- 接口测试基础——第2篇smtplib发送带附件的邮件
我先给大家补充一个用QQ发送纯文本电子邮件的代码,用QQ的朋友可以参考一下: # coding=utf-8 import smtplib from email.mime.text import MIM ...
- java mail邮件发送(带附件) 支持SSL
java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...
- php中PHPMailer发送带附件的电子邮件方法
摘要: 本文讲的是php中PHPMailer发送带附件的电子邮件方法, .首先到http://phpmailer.worxware.com/ 下载最新版本的程序包 2.下载完成后,找到class.ph ...
随机推荐
- redis设置密码和查询密码
编辑redis.windows.conf配置来启用认证. 1.初始化Redis密码: 在配置文件中有个参数: requirepass 这个就是配置redis访问密码的参数: 比如 requirepa ...
- 串(string)
题目描述 给定一个由小写字母组成的字符串s,每次你可以删去它的一个非回文子串, 求删成空串的最小次数. 输入输出格式 输入格式: 第一行一个整数 t 表示数据组数. 每组数据第一行一个整数 n表示字符 ...
- 【高并发】面试官:Java中提供了synchronized,为什么还要提供Lock呢?
写在前面 在Java中提供了synchronized关键字来保证只有一个线程能够访问同步代码块.既然已经提供了synchronized关键字,那为何在Java的SDK包中,还会提供Lock接口呢?这是 ...
- Linux实战(11):Centos后期添加网卡配置
前言 最近在折腾网卡,发现在已装centos上的机器上直接加网卡,开机后在系统中是没有启动的,下面的步骤是启动的过程,大家可以参考一下. 正文 首先我们先看网卡配置目录下的文件跟网卡 查询UUID y ...
- docker 搭建私有云仓库
docker搭建私有仓库 registry私有仓库 下载docker-distribution软件包 yum install epel-release yum install docker-dis ...
- python温度转换代码分析
将用户输入的温度信息保存在TempStr变量中 if分支条件,判断TempStr类型是否在f及F列表之中 如果用户输入的在f及F列表之中,则用户输入的是一个华氏温度值,对华氏温度进行摄氏温度的转换,e ...
- JAVA | Java 解决跨域问题
JAVA | Java 解决跨域问题 Table of Contents 引言 什么是跨域(CORS) 什么情况会跨域 解决方案 前端解决方案 后端解决方案 具体方式 一.使用Filter方式进行设置 ...
- java事件触发
工作遇到一个问题:用netty实现服务和设备的交互,服务发送了一组指令,需要再等待时间内获取结果,如果结果提前全部返回,就进一步处理,如果等待时间内没有全部返回,就视为失败处理. 这个场景我遇到的困难 ...
- manacher(马拉车算法)
Manacher(马拉车算法) 序言 mannacher 是一种在 O(n)时间内求出最长回文串的算法 我们用暴力求解最长回文串长度的时间复杂度为O(n3) 很明显,这个时间复杂度我们接受不了,这时候 ...
- 【转】Locust性能-零基础入门系列(3)-压力权重
本文将继续对Locust性能测试进行持续讲解,主要是讲解虚拟用户数分配和权重的关系.在locust file中进行多用户类的实现和操作.我们这次先上完整的代码: from locust import ...