前言
邮件发送相信大家都不陌生吧,一般是用于电商平台比如京东下单后订单信息的邮件发送或者移动这种的月度账单的邮件发送,再有就是通过绑定的邮箱进行密码重置,由邮箱跳转到指定的密码重置页进行密码重置操作。那么下面我们来看看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协议开启,如下图所示。一般在设置里进行开启操作即可
小结
实际上以上的功能只能满足普通的需要开发,那遇到业务特别复杂的比如要求发送的月度账单信息内容是灵活的呢?还就得我们自己去实现了。