一,网站哪些情况下需要发送电子邮件?

作为一个电商网站,以下情况需要发邮件通知用户:

注册成功的信息

用邮箱接收验证码

找回密码时发链接

发送推广邮件

下单成功后的订单通知

给商户的对账单邮件

说明:刘宏缔的架构森林是一个专注架构的博客,地址: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)的更多相关文章

  1. [SpringBoot] - 发送带附件的邮件

    <!--发送email依赖--> <dependency> <groupId>org.springframework.boot</groupId> &l ...

  2. ORACLE发送带附件邮件的二三事之一

    在oracle使用过程中,我们可以通过pl/sql生成数据文件,也可以通过spool on spool off生成,但某些环境下,我们需要通过存储过程处理数据,数据处理完,需要自动生成数据文件,手工导 ...

  3. 使用Spring发送带附件的电子邮件(站内和站外传送)

    JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.   虽然JavaMail是 ...

  4. java发送带附件的邮件

    /** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...

  5. C#发送带附件的邮件的代码

    如下的代码是关于C#发送带附件的邮件的代码. MailMessage m = new MailMessage();m.Subject = "File attachment!";m. ...

  6. 利用Python+163邮箱授权码发送带附件的邮件

    背景 前段时间写了个自动爬虫的脚本,定时在阿里云服务器上执行,会从某个网站上爬取链接保存到txt文本中,但是脚本不够完善,我需要爬虫完毕之后通过邮件把附件给我发送过来,之前写过一个<利用Pyth ...

  7. 接口测试基础——第2篇smtplib发送带附件的邮件

    我先给大家补充一个用QQ发送纯文本电子邮件的代码,用QQ的朋友可以参考一下: # coding=utf-8 import smtplib from email.mime.text import MIM ...

  8. java mail邮件发送(带附件) 支持SSL

    java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.ut ...

  9. php中PHPMailer发送带附件的电子邮件方法

    摘要: 本文讲的是php中PHPMailer发送带附件的电子邮件方法, .首先到http://phpmailer.worxware.com/ 下载最新版本的程序包 2.下载完成后,找到class.ph ...

随机推荐

  1. softmax交叉熵损失函数求导

    来源:https://www.jianshu.com/p/c02a1fbffad6 简单易懂的softmax交叉熵损失函数求导 来写一个softmax求导的推导过程,不仅可以给自己理清思路,还可以造福 ...

  2. [Binder深入学习一]Binder驱动——基础数据结构

    具体代码路径: kernel/drivers/staging/android/binder.c kernel/drivers/staging/android/binder.h /* * binder_ ...

  3. 软件开发过程中常用的环境解释DEV FAT UAT PRO

    1.DEV Development environment 开发环境,用于开发者调试使用 2.FAT Feature Acceptance Test environment 功能验收测试环境,用于软件 ...

  4. 深度神经网络conda环境下载

    介绍 因为使用conda下载数据有时候因为网络问题下载非常慢,因此我把conda的环境备份好,到时可以直接使用conda的conda create -n 新环境名字 –clone 环境的路径 , 直接 ...

  5. 预科班D9

    2020.09.17星期四 预科班D9 学习内容: 一.列表与字典的嵌套 大前提:将所有同学的信息存起来,取值需求 1.取第二个学生的性别 stus_info = [ {"name" ...

  6. Spring Cloud Alibaba生态探索:Dubbo、Nacos及Sentinel的完美结合

    @ 目录 背景 一.项目框架 1.1 采用IDEA和Maven多模块进行项目搭建 1.2 模块管理及版本管理 二.微服务公共接口 2.1 定义一个公共接口Api 2.2 pom.xml 2.3 Goo ...

  7. 每天一个dos命令-del.

    比较常用的选项: /F 强制删除只读文件. /Q 安静模式.删除全局通配符时,不要求确认 文件名或者路径中有空格,需要使用引号包围 常用的实例:del  /q/f   c:\Securitylog\S ...

  8. [De1CTF 2019]Giftbox 分析&&TPOP学习

    [De1CTF 2019]Giftbox 刚进来我以为是直接给了shell,恐怖如斯. 随便扔了个命令,之后就没然后了,hhh,截包发现可能存在sql注入. 然后我就不会了... what i lea ...

  9. CentOS 8 安装 VirtualBox 增强功能

    环境介绍 Machine: NUC8i5BEK OS: macOS Catalina 10.15.6 VirtualBox: 6.1.12 r139181 (Qt5.6.3) CentOS: 8.2. ...

  10. C#方法Extra

    C#方法Extra 上次说的只是方法的一些基本东西,今天讲讲重载和 Lambda 表达式. 重载 方法的重载(overload)指的是同一个名字的方法,有着不一样的方法签名(method signat ...