开发中遇到的问题&解决方案(七)

简介: 邮件发送相信大家都不陌生吧,一般是用于电商平台比如京东下单后订单信息的邮件发送或者移动这种的月度账单的邮件发送,再有就是通过绑定的邮箱进行密码重置,由邮箱跳转到指定的密码重置页进行密码重置操作。那么下面我们来看看hutool里对于邮件发送的包装是怎么样的。

微信截图_20220531133417.png

前言

邮件发送相信大家都不陌生吧,一般是用于电商平台比如京东下单后订单信息的邮件发送或者移动这种的月度账单的邮件发送,再有就是通过绑定的邮箱进行密码重置,由邮箱跳转到指定的密码重置页进行密码重置操作。那么下面我们来看看hutool里对于邮件发送的包装是怎么样的。

一.首先我们来看看邮件发送的内容分类

1)文本形式,即text

2).html形式,即目标邮箱收到的是一个html形式的邮件

3)除以上两种,我们可以自定义发送的邮件内容,比如将以上两种形式结合

二.发送一封邮件有哪些步骤

1)getSession,根据配置文件,获取邮件客户端会话,即连接邮件接收服务器,这是很多服务器和客户端必走的第一步流程

2)buildMsg,构建发送内容,看代码比较直观,主要注意凡是包含中文都要注意一下编码问题,防止乱码

private MimeMessage buildMsg() throws MessagingException {
 final Charset charset = this.mailAccount.getCharset();
 final MimeMessage msg = new MimeMessage(getSession());
 // 发件人
 final String from = this.mailAccount.getFrom();
 if (StrUtil.isEmpty(from)) {
    // 用户未提供发送方,则从Session中自动获取
    msg.setFrom();
 } else {
    msg.setFrom(InternalMailUtil.parseFirstAddress(from, charset));
 }
 // 标题
 msg.setSubject(this.title, (null == charset) ? null : charset.name());
 // 发送时间
 msg.setSentDate(new Date());
 // 内容和附件
 msg.setContent(buildContent(charset));
 // 收件人
 msg.setRecipients(MimeMessage.RecipientType.TO, InternalMailUtil.parseAddressFromStrs(this.tos, charset));
 // 抄送人
 if (ArrayUtil.isNotEmpty(this.ccs)) {
    msg.setRecipients(MimeMessage.RecipientType.CC, InternalMailUtil.parseAddressFromStrs(this.ccs, charset));
 }
 // 密送人
 if (ArrayUtil.isNotEmpty(this.bccs)) {
    msg.setRecipients(MimeMessage.RecipientType.BCC, InternalMailUtil.parseAddressFromStrs(this.bccs, charset));
 }
 // 回复地址(reply-to)
 if (ArrayUtil.isNotEmpty(this.reply)) {
    msg.setReplyTo(InternalMailUtil.parseAddressFromStrs(this.reply, charset));
 }
 return msg;
}
复制代码

3)send,依靠Transport执行发送操作,发送的操作主要是对接受的目标邮件地址进行解析,比如有的目标接收地址不存在那就不用执行发送操作,还有就是其协议(SMTP协议)是否开启,比如在日常的开发中,我们代码写完,检查也没什么错误,那为什么目标邮箱收不到邮件呢?我们先了解一下什么是SMTP协议。 1)SMTP协议:邮件客户端软件与SMTP服务器之间及两台SMTP服务器之间的通信规则,开启SMTP协议后会建立一个TCP连接后,在这个连接上控制和应答以及数据的发送即邮件的收发功能,如QQ邮箱或者新浪邮箱,它们的发送功能其实是默认开启的,但是想将其作为一个发送账单或者消息的主体,就要开启它的SMTP协议 2)新浪邮箱SMTP协议开启,如下图所示。一般在设置里进行开启操作即可 微信截图_20220531140937.png

小结

实际上以上的功能只能满足普通的需要开发,那遇到业务特别复杂的比如要求发送的月度账单信息内容是灵活的呢?还就得我们自己去实现了。

目录
相关文章
|
8月前
|
前端开发 安全 JavaScript
有哪些常见的前端问题和解决方案
【4月更文挑战第13天】前端开发常见问题及解决方案:页面渲染性能优化(减少重绘、回流,利用GPU加速,代码拆分)、响应式设计(媒体查询、弹性布局)、浏览器兼容性(使用前缀,兼容性库,浏览器嗅探)、事件处理(事件委托、防抖节流)、代码组织(模块化、构建工具)、安全性(输入验证、HTTPS、安全HTTP头)和资源加载(CDN、资源优化、错误处理)。
662 6
|
Java Spring
解决方案 --[restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. ERROR 9680 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter
|
存储 编解码 监控
报告厅解决方案
大型单位、企业都建有报告厅,单位搭建报告厅的目的是为了召开各类会议、学术讨论、演讲、报告、新闻发布、多媒体教学培训、观看电影等活动提供卓越的音质效果、清晰的画面显示以及简单便捷的集中控制。报告厅通常会涉及举办活动时将现场画面的保存记录、活动画面以直播的形式在报告厅之外的其他屏幕上观看(因为报告厅容纳人数有限的原因)。针对这两个需求我们做了以下解决方案
|
SQL NoSQL Oracle
开发中遇到的问题&解决方案(二)
一个软件系统最重要的是什么?毫无疑问是数据,那什么是数据的'运载体',什么作为后端与数据库的桥梁和沟通者呢,是SQL。我是Java开发出身,大学课程当时学习的是SQL Server,而且后面工作中实际用到过Oracle,DB2以及使用的最普遍的My SQL,至于No SQL 这一类下的常用的就是Redis和MongoDB了,这些后面再详细举例说明。今天讲的案列与表情相关,那么接下来进入今天的主题。
186 0
开发中遇到的问题&解决方案(二)
|
数据安全/隐私保护
开发中遇到的问题&解决方案(五)
在开发过程中,图片是必不可少的,除了图片的上传下载以外,图片压缩也是很常见的。 下面我们来看看hutool工具类里图片压缩的方法。
393 0
开发中遇到的问题&解决方案(五)
|
安全 机器人 数据安全/隐私保护
开发中遇到的问题&解决方案(九)
在我们的系统里验证码是必不可少的,比如注册登录时,忘记密码时,设置支付密码时或者支付下单时,那验证码的作用在哪里呢?其实就一条为了防止来着黑客和机器人恶意的攻击,那么下面我们来看看hutool里验证码工具类。
275 0
开发中遇到的问题&解决方案(九)
开发中遇到的问题&解决方案(四)
今天继续hutool工具类的认识,废话不多说下面直接进入主题。
331 0
开发中遇到的问题&解决方案(四)
|
Java
开发中遇到的问题&解决方案(八)
以前的一个老项目里使用过ZXing进行会员和门店二维码的生成操作,当时出现过Java版本升级后不兼容的问题,很是麻烦,于是替换成了hutool里的二维码生成,下面我们来看看具体的实现。
209 0
开发中遇到的问题&解决方案(八)
|
Java 数据库 微服务
开发中遇到的问题&解决方案(三)
我们在日常的开发中会使用到很多工具类,比如最常用的Http请求的,或者日期工具类,处理时间差或者对日期进行特殊处理的,还有就是图片上传类的,比如阿里云或者腾讯云得SSO图片上传,以及Excel文件的导入导出。那这些工具类基本上都是跟着项目的,就是每个项目都写各自的工具类,如果分工明确细化到小组那重复代码就多了,那把工具类集成成一个项目类呢,由一个人去维护这个工具类工程,如果是微服务项目就是一个工具类的微服务,这样做的好处就很明显了,至少公司的研发部在使用到常用的工具类时不必再去网上找到。
337 0
开发中遇到的问题&解决方案(三)
|
Java Linux 数据安全/隐私保护
开发中遇到的问题&解决方案(六)
之前的项目里有用到FTP,需要使用FTP把图片及一些必要文件上传到第三方的FTP服务器上,所以会涉及FTP连接,创建用户,创建文件夹,文件上传等,项目里选用的还是hutool包装的FTP工具类,下面来看看这些功能的在hutool里是怎么包装的。
562 0
开发中遇到的问题&解决方案(六)

热门文章

最新文章