系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、 介绍
  • 二、二话不说开始干
    • 1.引入库
    • 2. 邮件发送实体(Mail)
    • 3. 邮件发送类型枚举(MailType )
    • 4.邮件发送抽象类(AbstractMail )
    • 5. 邮件发送工具类
    • 6. 如何使用
  • 总结

前言

徒手封装一个简单邮件工具类


一、 介绍

学会封装代码,封装工具类,将会让代码的复用性更高,还可以减少工作量。一个字:巴适

二、二话不说开始干

1.引入库

引入maven依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2. 邮件发送实体(Mail)

package com.breez.awesome.utils.mail;import lombok.Data;
import lombok.experimental.Accessors;import java.io.Serializable;/*** 邮件实体* @author XinLiu* @email lx90352@163.com*/
@Data
@Accessors(chain = true)
public class Mail implements Serializable {/*** 邮件ID*/private String id;/*** 邮件发送者*/private String from;/*** 邮件接收者*/private String to;/*** 邮件内容*/private String text;/*** 邮件主题*/private String subject;/*** 附件地址*/private String attachment;
}

3. 邮件发送类型枚举(MailType )

邮件发送有三种类型,分别是简单类型、支持HTML格式的、带附件的类型,这种常量,我们就可以用一个枚举类来保存。

package com.breez.awesome.utils.mail;/*** 邮件发送的类型** @author XinLiu* @since 2021/9/21* @email lx90352@163.com*/
public enum MailType {/*** 简单邮件类型*/SIMPLE,/*** HTML格式代码*/HTML,/*** 带附件类型*/ATTACHMENT}

4.邮件发送抽象类(AbstractMail )

邮件发送抽象类用于邮件的具体发送,其中有两个抽象方法,一个是支持自定义发送类型,一个默认简单类型。定义抽象类目的是方便子类按照自己的策略自定义发送类型

package com.breez.awesome.utils.mail;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;/*** 邮件发送抽象类** @author BreezAm* @email lx90352@163.com* @since 2021/9/21*/
public abstract class AbstractMail {@Autowiredprivate JavaMailSender javaMailSender;/*** 发送一封简单的邮件** @param mail 邮件实体*/public void handleSimpleMail(Mail mail) {SimpleMailMessage mailMessage = new SimpleMailMessage();mailMessage.setFrom(mail.getFrom());mailMessage.setTo(mail.getTo());mailMessage.setSubject(mail.getSubject());mailMessage.setText(mail.getText());javaMailSender.send(mailMessage);}/*** 发送带有HTML格式的邮件** @param mail 邮件实体*/public void handleHtmlMail(Mail mail) {MimeMessage mimeMessage = javaMailSender.createMimeMessage();MimeMessageHelper message = null;try {message = new MimeMessageHelper(mimeMessage, true);message.setFrom(mail.getFrom());message.setTo(mail.getTo());message.setText(mail.getText(), true);message.setSubject(mail.getSubject());javaMailSender.send(mimeMessage);} catch (MessagingException e) {e.printStackTrace();}}/*** 发送带附件的邮件** @param mail 邮件*/public void handleAttachmentMail(Mail mail) {MimeMessage mimeMessage = javaMailSender.createMimeMessage();MimeMessageHelper message = null;try {message = new MimeMessageHelper(mimeMessage, true);message.setFrom(mail.getFrom());message.setTo(mail.getTo());message.setText(mail.getText(), true);message.setSubject(mail.getSubject());FileSystemResource resource = new FileSystemResource(mail.getAttachment());String fileName = mail.getAttachment().substring(mail.getAttachment().lastIndexOf(File.separator) + 1);message.addAttachment(fileName, resource);javaMailSender.send(mimeMessage);} catch (MessagingException e) {e.printStackTrace();}}/*** 邮件发送策略* <p>根据用户指定邮件的类型执行相应的发送策略</p>** @param mail 邮件实体* @param type 发送的类型*/public abstract void send(Mail mail, MailType type);/*** <p>此方法表示,如果不指定类型的话,则为默认类型,具体什么类型由子类决定</p>** @param mail 邮件实体*/public abstract void send(Mail mail);
}

5. 邮件发送工具类

邮件发送的策略,继承自抽象类。

package com.breez.awesome.utils.mail;import org.springframework.stereotype.Component;/*** 邮件发送工具包[原创]** @author XinLiu* @email lx90352@163.com* @since 2021/9/21*/
@Component
public class MailUtil extends AbstractMail {/*** 邮件发送策略* <p>根据用户指定邮件的类型执行相应的发送策略</p>** @param mail 邮件实体* @param type 发送的类型*/@Overridepublic void send(Mail mail, MailType type) {switch (type) {case SIMPLE:super.handleSimpleMail(mail);break;case HTML:super.handleHtmlMail(mail);break;case ATTACHMENT:super.handleAttachmentMail(mail);break;}}/*** <p>此方法表示,如果不指定类型的话,则为默认类型,默认为简单类型</p>** @param mail 邮件实体*/@Overridepublic void send(Mail mail) {send(mail, MailType.SIMPLE);}
}

6. 如何使用

发送简单类型邮件

mailUtil.send(mail, MailType.SIMPLE)

发送支持HTML格式的邮件

mailUtil.send(mail, MailType.HTML)

发送支持带有附件的邮件

mailUtil.send(mail, MailType.ATTACHMENT)

总结

抽象类还可以再进行封装,让代码更少。

封装一个邮件发送工具类,一个字,巴适相关推荐

  1. Java 基于mail.jar 和 activation.jar 封装的邮件发送工具类

    准备工作 发送邮件需要获得协议和支持! 开启服务 POP3/SMTP 服务 如何开启 POP3/SMTP 服务:https://blog.csdn.net/weixin_44953227/articl ...

  2. JAVA 邮件发送工具类

    1.封装邮件接收地址MODEL和邮件信息MODEL package com.sicdt.jnzxgzc.common.mail.model;import java.io.Serializable; / ...

  3. SMTP 协议邮件发送工具封装

    文章目录 1. 前言 1.1 说明 1.2 建议 1.3 源码 2. 发件人邮箱开通smtp 服务 2.1 为什么开通smtp 服务 2.2 开启服务的步骤 2.3 普通邮箱开启服务图文 3. 工具类 ...

  4. [Java工具] 邮件发送工具

    注册邮箱 去163邮箱(或其他邮箱)注册一个邮箱,并开启SMTP授权码. 程序 需要注意的是,由于阿里云服务器不让使用默认的25端口,所以会出现Windows下测试发送邮件成功,Linux服务器下发送 ...

  5. ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

    DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...

  6. Flutter - 一个fultter练习项目(仿写微信UI、实现一些常用效果、封装通用组件和工具类)

    demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新,请前往github查看最新代码 pwd:123456 代码不定期更新 注:Flut ...

  7. uniapp APP 端 WebSocket 使用,实现一个简单 WebSocket 工具类

    背景 最近有需求要做一个简单业务的 APP 应用,简单考虑选用 uniapp + uview + vue2.x 方案,因为还有web端页面也需要用到 WebSocket ,简单封装了一个适应 web ...

  8. java邮箱发送工具类

    如何编写邮箱发送功能模块 1.主要编写了邮箱发送工具类,里面每行代码有详细注释,直接复制修改个人邮箱信息就能进行测试,希望对大家有用. 1.主要编写了邮箱发送工具类,里面每行代码有详细注释,直接复制修 ...

  9. php pear mail smtp 不验证,怎么在php中使用pear_smtp实现一个邮件发送功能

    怎么在php中使用pear_smtp实现一个邮件发送功能 发布时间:2020-12-22 16:24:35 来源:亿速云 阅读:76 作者:Leah 怎么在php中使用pear_smtp实现一个邮件发 ...

最新文章

  1. 清华大学何晓斌:未来人才培养是大数据、AI和人文社会科学的结合
  2. C语言 复制文件内容粘贴到另一个文件中
  3. Kotlin实战指南七:单例模式
  4. [C++STL]常用查找算法
  5. Python学习2 条件判断语句if,循环语句for while
  6. SQL 优化之该走索引却不走索引的分析
  7. vs2008编写第一个Windows程序
  8. 计算机网络原基站,一种计算机网络工程用移动基站的制作方法
  9. 防止图片盗链和资源恶意下载
  10. 事态升级是什么意思_为什么有的人越到关键时刻越容易掉链子?记住不要有“赌徒心理”...
  11. 001 lambda的分析
  12. Mac安装jdk17和jdk18
  13. vue使用下载插件来完成下载文件
  14. 信道编码-RS-CRC-交织(一)
  15. Win10下Matlab r2018a 64位 中文破解版的安装以及破解方法
  16. java删除非空文件夹
  17. html设置div大小位置不变,div大小 div固定大小设置
  18. OpenWrt开发必备软件模块——进程管理服务procd
  19. android监听点击通知栏,android使用NotificationListenerService监听通知栏消息
  20. 2分钟实现一个Vue实时直播系统

热门文章

  1. 【转载保存】Netty实现单客户端多连接程序
  2. java 正则表达式 手机号 邮箱(转载)
  3. 璀璨智行:V2X车路协同智慧交通
  4. 阿里云交通数据中台解决方案打造“数字化生产力”
  5. 基于https国密算法构建安全数据传输链路
  6. MySQL8.0.17 - 初探 Clone Plugin
  7. ECS事件通知之创建失败事件
  8. 阿里云 MVP技术直播——缪政辉教你如何搭建万能LNMP环境
  9. 从能用到好用,GIS信创如何做到行稳致远?
  10. 探索处理数据的新方法,8 个重点带你搞懂云数据库——DBaaS(数据库即服务)到底是什么!...