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 ...
随机推荐
- 用c语言处理文件
用c语言处理文件只需要用到几个简单的函数: 1.文件的打开和关闭 fopen()函数用来打开一个文件,该函数原型在头文件stdio.h中,调用的一般形式为 /* FILE 是c语言内置的一个结构体类型 ...
- ASP.NET Core 性能优化最佳实践
本文提供了 ASP.NET Core 的性能最佳实践指南. 译文原文地址:https://docs.microsoft.com/en-us/aspnet/core/performance/perfor ...
- Node.js向MongoDB中插入并查询数据
首先必须要保持Node.js与MongoDB保持连接 具体教程见:Node.js连接MongoDB数据库步骤 插入数据步骤如下 node项目文件如下:在routes文件夹下新建insert.js文件, ...
- python之map
python之Map函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # map()函数使用举例 # 功能: ...
- ef6 code first,对已有数据库如何执行迁移
先执行:Enable-Migrations,会生成Migrations->Configuration.cs 再执行:Add-Migrations InitialCreate – IgnoreCh ...
- 解读Java NIO Buffer
从jdk1.4开始,java中引入了nio包,提供了非阻塞式的网络编程模型,提供网络性能.nio中核心组件有三个:channel.buffer.selector.这里主要探讨buffer的概念和使用. ...
- 云计算openstack——高可以负载均衡(14)
一.云平台概要 1.本openstack云平台使用开源软件Openstack Ocata版…… 2.OpenStack 部署环境中,各节点可以分为几类: Cloud Controller Node ( ...
- 一、Git是什么?
Git是什么? Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控 ...
- robotframework获取Token
公司做接口自动化,但是其他接口调用都需要传入token,所以首要目标是把token读取出来. 需要清楚以下内容: 1.登录使用post请求 2.https协议,且登录后需手工验证SSL证书,默认处于不 ...
- python与Oracle
1.python 3.6.6 2.使用cx_Oracle -----------安装方法:pip install cx_Oracle 3.游标 cursor -----游标是系统为用户开创的 ...