SpringBoot发送邮件(网易邮箱,QQ邮箱,139邮箱)
添加依赖
<!-- 邮件服务 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
发送者邮箱配置-139邮箱
刷新页面后会出现生成授权码的提示
添加配置-139邮箱
## application.yml
server:port: 9657
spring:profiles:active: 139
## application-139.yml
spring:mail:# 配置 SMTP 服务器地址host: smtp.139.com# 发送者邮箱username: 15178292346@139.com# 配置密码,注意不是真正的密码,而是刚刚申请到的授权码password: ****# 端口号465或者25port: 465# 默认的邮件编码为UTF-8default-encoding: UTF-8# 配置SSL 加密工厂properties:mail:smtp:ssl:# 这里设为true时 端口号设为 465 设为false时 端口号设为25enable: truesocketFactoryClass: javax.net.ssl.SSLSocketFactory#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误debug: true
编写工具类
普通邮件
@Component
public class EmailUtil {@AutowiredJavaMailSender javaMailSender;@Value("${spring.mail.username}")private String sendEmail;/*** 普通邮件发送*/public void sendSimpleMail() {// 构建一个邮件对象SimpleMailMessage message = new SimpleMailMessage();// 设置邮件主题message.setSubject("这是一封测试邮件");// 设置邮件发送者,这个跟application.yml中设置的要一致message.setFrom(sendEmail);// 设置邮件接收者,可以有多个接收者,中间用逗号隔开,以下类似// message.setTo("*****","****");message.setTo("*****@163.com");// 设置邮件抄送人,可以有多个抄送人message.setCc("898365387@qq.com");// 设置隐秘抄送人,可以有多个message.setBcc("*****@qq.com");// 设置邮件发送日期message.setSentDate(new Date());// 设置邮件的正文message.setText("这是测试邮件的正文");// 发送邮件javaMailSender.send(message);}
}
添加附件
/*** 发送带附件的邮件*/public void sendAttachFileMail() {try {MimeMessage mimeMessage = javaMailSender.createMimeMessage();// true表示构建一个可以带附件的邮件对象MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);helper.setSubject("这是一封测试邮件");helper.setFrom(sendEmail);helper.setTo("mail_fanguangrui@163.com");helper.setSentDate(new Date());helper.setText("这是测试邮件的正文");// 第一个参数是自定义的名称,后缀需要加上,第二个参数是文件的位置helper.addAttachment("bg1.png",new File("E:\\springboot\\springboot-plus\\learn-email\\src\\main\\resources\\file\\bg1.png"));javaMailSender.send(mimeMessage);} catch (Exception e){e.printStackTrace();}}
添加图片
/*** 正文中带图片的邮件*/public void sendImgResMail() {try {MimeMessage mimeMessage = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);helper.setSubject("这是一封测试邮件");helper.setFrom(sendEmail);helper.setTo("898365387@qq.com");helper.setSentDate(new Date());// src='cid:p01' 占位符写法 ,第二个参数true表示这是一个html文本helper.setText("<p>hello 大家好,这是一封测试邮件,这封邮件包含两种图片,分别如下</p><p>第一张图片:</p><img src='cid:p01'/><p>第二张图片:</p><img src='cid:p02'/>",true);// 第一个参数指的是html中占位符的名字,第二个参数就是文件的位置helper.addInline("p01",new FileSystemResource(new File("E:\\springboot\\springboot-plus\\learn-email\\src\\main\\resources\\file\\bg1.png")));helper.addInline("p02",new FileSystemResource(new File("E:\\springboot\\springboot-plus\\learn-email\\src\\main\\resources\\file\\bg2.png")));javaMailSender.send(mimeMessage);} catch (Exception e){e.printStackTrace();}}
使用thymeleaf模板
添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
添加模板 最好放在resources/templates文件夹下
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><base target="_blank" /><style type="text/css">::-webkit-scrollbar{ display: none; }</style><style id="cloudAttachStyle" type="text/css">#divNeteaseBigAttach, #divNeteaseBigAttach_bak{display:none;}</style><style id="blockquoteStyle" type="text/css">blockquote{display:none;}</style><style type="text/css">body{font-size:14px;font-family:arial,verdana,sans-serif;line-height:1.666;padding:0;margin:0;overflow:auto;white-space:normal;word-wrap:break-word;min-height:100px}td, input, button, select, body{font-family:Helvetica, 'Microsoft Yahei', verdana}pre {white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;width:95%}th,td{font-family:arial,verdana,sans-serif;line-height:1.666}img{ border:0}header,footer,section,aside,article,nav,hgroup,figure,figcaption{display:block}blockquote{margin-right:0px}</style>
</head>
<body tabindex="0" role="listitem">
<table width="700" border="0" align="center" cellspacing="0" style="width:700px;"><tbody><tr><td><div style="width:700px;margin:0 auto;border-bottom:1px solid #ccc;margin-bottom:30px;"><table border="0" cellpadding="0" cellspacing="0" width="700" height="39" style="font:12px Tahoma, Arial, 宋体;"><tbody><tr><td width="210"></td></tr></tbody></table></div><div style="width:680px;padding:0 10px;margin:0 auto;"><div style="line-height:1.5;font-size:14px;margin-bottom:25px;color:#4d4d4d;"><strong style="display:block;margin-bottom:15px;">尊敬的用户:<span style="color:#f60;font-size: 16px;"></span>您好!</strong><strong style="display:block;margin-bottom:15px;">您正在进行<span style="color: red">注册\登录</span>操作,请在验证码输入框中输入:<span style="color:#f60;font-size: 24px" th:text="${code}"></span>,以完成操作。</strong></div><div style="margin-bottom:30px;"><small style="display:block;margin-bottom:20px;font-size:12px;"><p style="color:#747474;">注意:此操作可能会修改您的密码、登录邮箱或绑定手机。如非本人操作,请及时登录并修改密码以保证帐户安全<br>(工作人员不会向你索取此验证码,请勿泄漏!)</p></small></div></div><div style="width:700px;margin:0 auto;"><div style="padding:10px 10px 0;border-top:1px solid #ccc;color:#747474;margin-bottom:20px;line-height:1.3em;font-size:12px;"><p>此为系统邮件,请勿回复<br>请保管好您的邮箱,避免账号被他人盗用</p><p>FGRAPP</p></div></div></td></tr></tbody>
</table>
</body>
</html>
发送邮件方法
public boolean sendThymeleafMail() {try {MimeMessage mimeMessage = javaMailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);mimeMessage.setSubject("【FGRAPP】注册登录验证码");helper.setFrom(sendEmail);helper.setTo("898365387@qq.com");helper.setSentDate(new Date());// 这里引入的是Template的ContextContext context = new Context();// 设置模板中的变量context.setVariable("code", "123456");// 第一个参数为模板的名称String process = templateEngine.process("register.html", context);// 第二个参数true表示这是一个html文本helper.setText(process,true);javaMailSender.send(mimeMessage);return true;} catch (Exception e){e.printStackTrace();return false;}}
测试代码
@SpringBootTest
@RunWith(SpringRunner.class)
@WebAppConfiguration
public class EmailUtilTest {@Autowiredprivate EmailUtil emailUtil;@Testpublic void testSendSimpleMail(){emailUtil.sendSimpleMail();}@Testpublic void sendThymeleafMail(){emailUtil.sendThymeleafMail();}@Testpublic void sendImgResMail(){emailUtil.sendImgResMail();}@Testpublic void sendAttachFileMail(){emailUtil.sendAttachFileMail();}
}
网易邮箱配置
spring:mail:# 配置 SMTP 服务器地址host: smtp.163.com# 发送者邮箱username: mail_fanguangrui@163.com# 配置密码,注意不是真正的密码,而是刚刚申请到的授权码password: ***# 端口号465或者994port: 465# 默认的邮件编码为UTF-8default-encoding: UTF-8# 配置SSL 加密工厂properties:mail:smtp:ssl:# 这里设为true时 端口号设为 465 设为false时 端口号设为994enable: truesocketFactoryClass: javax.net.ssl.SSLSocketFactory#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误debug: true
QQ邮箱配置
spring:mail:# 配置 SMTP 服务器地址host: smtp.qq.com# 发送者邮箱username: 898365387@qq.com# 配置密码,注意不是真正的密码,而是刚刚申请到的授权码password: ***# 端口号465或者587port: 465# 默认的邮件编码为UTF-8default-encoding: UTF-8# 配置SSL 加密工厂properties:mail:smtp:ssl:# 这里设为true时 端口号设为 465 设为false时 端口号设为587enable: truesocketFactoryClass: javax.net.ssl.SSLSocketFactory#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误debug: true
总结
各个邮箱的配置区别就在于服务器地址以及不使用ssl时的端口号:
服务商 | 服务器地址 | 端口号(不使用ssl) |
---|---|---|
139邮箱 | smtp.139.com | 25 |
网易邮箱 | smtp.163.com | 994 |
QQ邮箱 | smtp.qq.com | 587 |
在使用ssl的情况下端口号都是465
项目源码
GitHub地址
SpringBoot发送邮件(网易邮箱,QQ邮箱,139邮箱)相关推荐
- springboot 发送邮件问题(阿里云企业邮箱)
1.No appropriate protocol (protocol is disabled or cipher suites are inappropriate) 解决办法:找到jdk/jre/l ...
- 139邮箱短信报警实现
一.问题的提出 如何在最短的时间,让非在线运维人员得到服务器运行情况?如何在服务器宕机后,在第一时间能通知非在线运维人员 ? 二.问题的初步解决 移动办公(移动终端运维支持)很重要,通过手机短信报警, ...
- TOM、网易、腾讯企业邮箱 | 邮箱登录入口你了解多少?
外贸.物流.传媒.互联网科技等公司,无论规模大小,一般都会从TOM.网易.QQ这些大厂邮箱中的一个作为公司邮箱,员工人数多会开通企业邮箱,人数少会注册VIP邮箱,为什么呢? 因为企业邮箱安全性高.企业 ...
- 利用python读取excel中邮箱进行批量群发,使用中国移动内部邮箱或139邮箱-html编辑的正文并且带附件。
简介 此项目是通过读取excel文件内容(包含公司名称,公司类型,邮箱-每个公司对应多个邮箱)自动批量发送邮件到目标公司.亲测可用. 完整代码 import smtplib from email.mi ...
- SpringBoot发送邮件(QQ邮箱、腾讯企业邮箱、网易邮箱、阿里云邮箱...)
目录 一.获取邮箱授权码 二.引入依赖 三.配置文件(请注意yml格式,或者使用.properties) 四.不带附件发邮箱 五.带附件发邮箱 六.邮箱类型拓展 本篇文章以QQ邮箱作为发件人写案例演示 ...
- SpringBoot 2.x 集成QQ邮箱、网易系邮箱、Gmail邮箱发送邮件
在Spring中提供了非常好用的 JavaMailSender接口实现邮件发送,在SpringBoot的Starter模块中也为此提供了自动化配置. 项目源码已托管在Gitee-SpringBoot_ ...
- 邮箱发送邮件(包含附件,网易、QQ)
效果图 代码 package com.mabo.email;import javax.activation.DataHandler; import javax.activation.DataSourc ...
- 用python自动发送邮件(139邮箱——qq邮箱)报错,求解
源代码如下: import smtplib from email.mime.text import MIMEText from email.utils import formataddr from e ...
- python发送文件到指定的邮箱_怎么用qq邮箱发文件-用python发送139邮箱电子邮件和短信通知,让你不再错过重要信息...
今天,咿哑呀为大家介绍怎样发送电子邮件,实现邮件到达短信通知,让你不再错过重要信息的获取.我们知道,139邮箱有邮件到达时,会自动发短信给用户,我们就可以利用这个功能,向用户的139邮箱发送邮件并获得 ...
最新文章
- 聊一聊多源最短路径问题(只有5行代码哦)
- ADO.NET—数据提供程序(连接类)
- 3D目标检测2021
- ant构建项目迁移到gradle_Gradle构建工具
- go语言io reader_【已解决】go语言中如何使用io的MultiWriter
- 小白 LeetCode 242 有效的字母异位词
- 回调函数 线程_从0实现基于Linux socket聊天室-多线程服务器一个很隐晦的错误-2...
- realme x2 深度测试打不开_realme 的产品到底是不是贴牌的?
- kubernetes实践指南
- 徐州市建筑物矢量数据(Shp格式+带高度)
- 43种名车标志及来历
- ResourceManager HA 配置
- 有源和无源设备的共质心布局:回顾和未来之路
- 党务管理系统搭建,答题获积分,学习有好礼
- 我现在的笔记有哪几个地方?
- 稀疏光流和稠密光流,OpenCV实现
- js方法在ie浏览器不起作用
- 百度网站收录 百度网站收录链接提交
- chatgpt赋能python:Python如何进行断点运行
- IT职业教育(16)教学过程控制