使用JAVA工具类进行邮件发送
使用JAVA工具类进行邮件发送
文章目录
使用JAVA工具类进行邮件发送前言一、前期准备工作二、使用步骤1.引入依赖2.进行发送邮件前言
提示:我们在开发过程中,经常遇到发送邮件的需求,我们往往需要考虑怎么去开发,考虑关于邮件的兼容性,很多让人烦恼的关联事务。
提示:以下是本篇文章正文内容,下面案例可供参考
一、前期准备工作
准备账号开通支持smtp发送服务
大部分使用的邮箱有两种(QQ邮箱和163网易邮箱),这里分别介绍怎么进行开通smtp服务的。。
QQ邮箱开通SMTP服务
使用QQ邮箱进行发送需要进行开通QQ邮箱的邮箱客户端授权服务,获取邮箱的客户端授权码(设置——>账户——>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务)。
2. 163邮箱开通SMTP服务
二、使用步骤
1.引入依赖
进行发送邮件的工具类我使用的是Hutool包里面的MailUtil进行发送邮件的。附:Hutool的工具包里面还包含大量的其他的工具类,有时间的伙伴可以参考一下。
<!-- 发送邮件引入的依赖 --><dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version></dependency><!-- 使用工具类 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.7</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><scope>provided</scope></dependency>
2.进行发送邮件
下面这些参数我只是在application.yml配置里面进行随便配置的参数,实际开发中可以转化为传参。
sendMail:config:mailFrom: 3175924***@mailTo: wlz1385137****@mailHost: #mailHost: mailPort: 465 #QQ的SSL传输端口是465/987,TCP的587 163的SSL 465/994 TCP:20mailPass: jzlqdadpzknf**** #申请的POM/Smtp的授权码mailTitle: 邮件发送的标题mailContent: 邮件发送的正文mailFile: D:\\Chrome_download\\发送邮件的附件.pdf #附件格式不受限制,但是多大的附件没有试过。
将参数进行读取到类中:
import lombok.Data;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Configuration;import org.ponent;/*** @ program: extis-second* @ description: 发送邮件配置模拟发送邮件参数* @ author: wanglianzeng* @ create: -08-06 16:46**/@Configuration@Component@Datapublic class SendMailConfig {@Value("${sendMail.config.mailFrom}")private String mailFrom;@Value("${sendMail.config.mailTo}")private String mailTo;@Value("${sendMail.config.mailHost}")private String mailHost;@Value("${sendMail.config.mailPort}")private Integer mailPort;@Value("${sendMail.config.mailPass}")private String mailPass;@Value("${sendMail.config.mailTitle}")private String mailTitle;@Value("${sendMail.config.mailContent}")private String mailContent;@Value("${sendMail.config.mailFile}")private String mailFile;}
进行发送邮件模块
//引入发送邮件配置private final SendMailConfig sendMailConfig;public SendEmailServiceImpl(SendMailConfig sendMailConfig) {this.sendMailConfig = sendMailConfig;}/**** @author wanglianzeng* @description 开发过程中一般发送邮件的参数是进行加密传参的,还有传参的费控检验,这里不进行模拟;并且返回类型大多数是以枚举的格式进行封装的。* @date /8/15 13:19* @return java.lang.String**/@Overridepublic String sendMail(){//采用异步发送,如果涉及一对多发送邮件,有时间的或者有兴趣的同学可以研究一下并行异步CompletableFuture.supplyAsync()ThreadUtil.execute(()->{MailAccount mailAccount = creatMailAccount();//读取附件,一般发送的附件也是通过传参File file = FileUtil.file(sendMailConfig.getMailFile());try {//参数分别为:组装的发送邮件信息 邮件接收人邮箱 邮件的主题 邮件的正文 是否是页面 附件String result = MailUtil.send(mailAccount, sendMailConfig.getMailTo(),sendMailConfig.getMailTitle(), sendMailConfig.getMailContent(), true, file);log.info("发送一件的结果是result=[{}]",result);return result;}catch (Exception e){if (e instanceof MailException) {final Throwable cause = e.getCause();if (cause instanceof SendFailedException) {log.error("收件人地址无效,请确认收件人");}}}return "发送异常";});}/**** @author wanglianzeng* @description 发送邮件承载体* @date /8/15 13:50* @return cn.hutool.extra.mail.MailAccount**/private MailAccount creatMailAccount() {MailAccount mailAccount = new MailAccount();mailAccount.setPass(sendMailConfig.getMailPass());mailAccount.setFrom("test<"+sendMailConfig.getMailFrom()+">");//发送邮件是否需要进行身份验证mailAccount.setAuth(true);mailAccount.setUser(sendMailConfig.getMailFrom());mailAccount.setPort(sendMailConfig.getMailPort());mailAccount.setHost(sendMailConfig.getMailHost());return mailAccount;}
发送邮件这里使用了工具类进行发送只供参考。实际开发中根据实际情况进行开发。