在实际项目中,经常需要用到邮件通知功能。比如,用户通过邮件注册,通过邮件找回密码等;又比如通过邮件发送系统情况,通过邮件发送报表信息等等,实际应用场景很多。这篇文章,就教大家通过springboot快速的实现一个发送邮件的功能。
在springboot项目中,引入如下依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
在springboot项目中引入依赖之后,即可在其配置文件中配置邮箱的参数:
application.properties
不同的邮箱,host的配置不一样。如果是其它邮箱,搜索下即可找到。
username为邮箱账号,password为邮箱的授权码(不是密码,需要在邮箱的设置页面中开启smtp)。
邮箱参数配置完之后,即可直接注入JavaMailSender实例。
@Autowired private JavaMailSender javaMailSender;
普通邮件,没有样式。实现起来最容易:
@Test public void testSend() throws MessagingException { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("发送者邮箱地址"); message.setTo("接受者邮箱地址"); message.setSubject("这是标题"); message.setText("这是内容"); javaMailSender.send(message); }
From需要和配置文件中的username一致,否则会报错。
To为邮件接收者;
Subject为邮件的标题;
Text为邮件的内容。
运行方法,即可收到邮件:
很多时候,我们需要邮件带有美观的样式。这时候,可以使用HTML的样式。我们需要使用javaMailSender的createMimeMessage方法,构建一个MimeMessage,然后使用MimeMessage实例创建出MimeMessageHelper。如下:
@Test public void testSend() throws MessagingException { MimeMessage mimeMessage = javaMailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage); messageHelper.setSubject("标题"); messageHelper.setFrom("发送者邮箱地址"); messageHelper.setTo("接受者邮箱地址"); messageHelper.setText("<h1>标题</h1><br/><p>这是内容</p>", true); javaMailSender.send(messageHelper.getMimeMessage()); }
这里需要注意的是,setText的时候需要传一个布尔值进去,表名需要使用HTML样式。
运行方法查看结果:
可以看到,h1的样式已经出来了。
本文讲解了如何在springboot中快速的发邮件。介绍了两种发送邮件的方式:1、普通模式;2、HTML模式。其实还支持多种丰富的模式,比如模板引擎等,这里就不讲解了,其实使用起来大同小异。
们在日常工作中,经常需要把整理好的表格,复制粘贴到邮件的正文中,那么怎样通过UiPath来实现带有表格内容的邮件正文。
本次内容所要用到的Activities有:
下面是整个流程的实现过程:
现在开始介绍每一个步骤的详细设定
第一步:通过ReadRange来读取我们需要发送邮件的正文内容的数据,输出OutPut,我们定义为DataTable类型,命名为DT。这里的ReadRange,我使用的是WorkBook中的activities。
第二步:拼接html格式
head的内容:"<html><body><table border="+"1"+" cellspacing="+""+"><tr><td>姓名</td><td>身份证</td> <td>出生年</td><td>年龄</td></tr>"
tail的内容:"</tr></table></body></html>"
第三步:读取temp模板,来用填写数据。
temp模板的内容为:{0}:填写姓名,{1}:身份证,{2}:出生年,{3}:年龄
第四步:通过for each row来将所有数据的填入,并拼接成html格式
body:body+string.Format(temp,row[0].ToString(),row[1].ToString(),row[2].ToString(),row[3].ToString())
第五步:通过Send OutlookMail Message来发送邮件,
outlook的格式选择如下:
最后我们来看看实现之后,我的邮件收到的效果
好了,上面就是我们如何发送带有表格正文的邮件,通过拼接html来实现的。
如果大家在实现的过程中有任何疑问,可以扫描下方二维码,一起讨论,共同学习
在Java中发送邮件主要依赖的包是Javax.mail,但是其操作很繁琐,我们使用对javax.mail进行了封装的Hutool的邮件工具MailUtil,但是因为Javax.mail是第三方包,需要添加此依赖
使用Hutool时,对所有的第三方依赖都是可选的,因此在使用Hutool进行邮件发送时需要引入第三方依赖
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.7</version>
</dependency>
在Maven项目中的src/main/resources目录下添加config目录,然后新建mail.setting文件,然后进行配置。QQ邮箱SSL方式进行邮件发送的配置示例
# 邮件服务器的SMTP地址
host = smtp.qq.com
# 邮件服务器的SMTP端口
port = 465
# 发件人(必须正确,否则发送失败)
from = XXXXXXXX@qq.com
# 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
user = XXXXXXXXX
# 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
pass = XXXXXXXXXX
#使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
starttlsEnable = true
# 使用SSL安全连接
sslEnable = true
# 指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字
socketFactoryClass = javax.net.ssl.SSLSocketFactory
# 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true
socketFactoryFallback = true
# 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口456
socketFactoryPort = 465
# SMTP超时时长,单位毫秒,缺省值不超时
timeout = 0
# Socket连接超时值,单位毫秒,缺省值不超时
connectionTimeout = 0
//收件人
ArrayList<String> tos = CollUtil.newArrayList(
"XXXXXXXX@qq.com");
MailUtil.send(tos,"公司Offer","欢迎你的到了",false);
使用Hutool封装过的MailUtil进行发送邮件发出简单,只需要一个send方法和明白其参数的含义就可以了
//收件人
ArrayList<String> tos = CollUtil.newArrayList(
"XXXXXXXX@qq.com");
//使用Html格式发送邮件
MailUtil.send(tos,"公司Offer","<h1 style='color:red'>欢迎你的到来</h1>",true);
//收件人
ArrayList<String> tos = CollUtil.newArrayList(
"825505212@qq.com");
//抄送人
ArrayList<String> ccs = CollUtil.newArrayList(
"zbbhnsfduyjs@gmail.com");
//谜抄,就是收件人看不见该抄送人
ArrayList<String> bcss = CollUtil.newArrayList(
"zbbhnsfduyjs@gmail.com");
MailUtil.send(tos,ccs,bcss, "公司Offer", "欢迎你的到了!", false, FileUtil.file("D:\\微信图片_20201206221537.jpg"));
除了使用mail.setting配置文件进行配置以外,还可以使用MailAccount对象进行配置,然后传入MailUtil.Send。
MailAccount mailAccount = new MailAccount();
mailAccount.setHost("smtp.qq.com");
mailAccount.setPort(465);
mailAccount.setFrom("XXXXXXX@qq.com");
mailAccount.setUser("XXXXXXX");
mailAccount.setPass("XXXXXXX");
mailAccount.setStarttlsEnable(true);
mailAccount.setSslEnable(true);
mailAccount.setSocketFactoryClass("javax.net.ssl.SSLSocketFactory");
mailAccount.setSocketFactoryFallback(true);
mailAccount.setSocketFactoryPort(465);
mailAccount.setTimeout(0);
mailAccount.setConnectionTimeout(0);
mailAccount.setAuth(true);
MailUtil.send(mailAccount,tos,"公司Offer","<h1 style='color:red'>欢迎你的到来</h1>",true);
注:QQ和Gmail邮箱的时候,是强制开启SSL的,因此才有了以SSL配置QQ的示例。pass:QQ的SSL方法发送邮件的密码不是你的登录密码。
在QQ邮箱中SMTP密码是单独生成的授权码,不是QQ密码,具体生成如下
在Hutool中user属性默认提取你邮箱@前面的部分,但是foxmail邮箱是无效的,需要单独配置为与之绑定的qq号码或者XXXX@qq.com的XXXX。即:
host = smtp.qq.com
from = XXXX@foxmail.com
user = foxmail邮箱对应的QQ号码或者qq邮箱@前面部分
今天以QQ邮箱发送邮件为例介绍了,如何使用Hutool下的MailUtil工具进行,邮件发送,以及邮件发送的文件配置。
github地址:https://github.com/bangbangzhou/greemes/tree/master
*请认真填写需求信息,我们会在24小时内与您取得联系。