需求

商户审核状态需要异步发送短信、站内通知和发送邮件通知商户,且发送账户限定为腾讯企业微信邮箱

准备

  1. 准备发送邮箱的账户和密码写入配置文件
  2. 引入发送邮箱jar包
  3. 写异步线程发送固定html格式的邮件

实现代码

配置文件

mail:transport:protocol: sslsmtp:host: smtp.exmail.qq.com # 企业微信的hostport: 465auth: truessl:enable : trueenable: trueaccount: 企业邮箱账户password: 企业邮箱密码

引入发送邮箱jar包

<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>jakarta.mail</artifactId>
<version>1.6.7</version>
</dependency>

代码块
定义一个接口:ISendEmailService

import java.util.List;public interface ISendEmailService{/*** 发送邮件* @param fromAliasName 别名* @param to 发送目标* @param subject 主题* @param content 内容* @param attachFileList 附件*/void send(String fromAliasName,String to,String subject,String content, List<String> attachFileList);
}

接口实现类:SendEmailServiceImpl

/*** 邮件发送工具类* 注:腾讯企业微信邮箱需要用SSL方式发送*/
@Slf4j
@Service
public class SendEmailServiceImpl implements ISendEmailService{@Value("${mail.account}")private  String account ;/*** 登录密码*/@Value("${mail.password}")private  String password;/*** 发信协议*/@Value("${mail.transport.protocol}")private String protocol;/*** 邮件服务器地址*/@Value("${mail.smtp.host}")private String host;/*** 发信端口*/@Value("${mail.smtp.port}")private String port ;/*** 发信端口*/@Value("${mail.smtp.auth}")private String auth ;@Value("${mail.smtp.ssl.enable}")private String sslEnable ;/*** 发送邮件*/@Override@Async(value = ExecutorConfig.EMAIL_ASYNC)public void send(String fromAliasName,String to,String subject,String content,List<String> attachFileList) {// 设置邮件属性Properties prop = new Properties();prop.setProperty("mail.transport.protocol", protocol);prop.setProperty("mail.smtp.host", host);prop.setProperty("mail.smtp.port", port);prop.setProperty("mail.smtp.auth", auth);MailSSLSocketFactory sslSocketFactory = null;try {sslSocketFactory = new MailSSLSocketFactory();sslSocketFactory.setTrustAllHosts(true);} catch (GeneralSecurityException e1) {e1.printStackTrace();}if (sslSocketFactory == null) {log.error("开启 MailSSLSocketFactory 失败");} else {prop.put("mail.smtp.ssl.enable",sslEnable);prop.put("mail.smtp.ssl.socketFactory", sslSocketFactory);// 创建邮件会话(注意,如果要在一个进程中切换多个邮箱账号发信,应该用 Session.getInstance)Session session = Session.getDefaultInstance(prop, new MyAuthenticator(account, password));try {MimeMessage mimeMessage = new MimeMessage(session);// 设置发件人别名(如果未设置别名就默认为发件人邮箱)if (fromAliasName != null && !fromAliasName.trim().isEmpty()) {mimeMessage.setFrom(new InternetAddress(account, fromAliasName));}// 设置主题和收件人、发信时间等信息mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(to));mimeMessage.setSubject(subject);mimeMessage.setSentDate(new Date());// 如果有附件信息,则添加附件Multipart multipart = new MimeMultipart();MimeBodyPart body = new MimeBodyPart();body.setContent(content, "text/html; charset=UTF-8");multipart.addBodyPart(body);// 添加所有附件(添加时判断文件是否存在)if (CollectionUtils.isNotEmpty(attachFileList)){for(String filePath : attachFileList){if(Files.exists(Paths.get(filePath))){MimeBodyPart tempBodyPart = new MimeBodyPart();tempBodyPart.attachFile(filePath);multipart.addBodyPart(tempBodyPart);}}}mimeMessage.setContent(multipart);// 开始发信mimeMessage.saveChanges();Transport.send(mimeMessage);}catch (Exception e) {log.error("发送邮件错误:{}",e.getMessage());}}}/*** 认证信息*/static class MyAuthenticator extends Authenticator {/*** 用户名*/String username = null;/*** 密码*/String password = null;/*** 构造器** @param username 用户名* @param password 密码*/public MyAuthenticator(String username, String password) {this.username = username;this.password = password;}@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}}
}

异步线程池配置


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;@Configuration
@EnableAsync
public class ExecutorConfig{private int corePoolSize = 10;private int maxPoolSize = 50;private int queueCapacity = 100;/*** 邮件相关的异步*/public static final String EMAIL_ASYNC="emailAsync";@Beanpublic Executor emailAsync(){ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(corePoolSize);executor.setMaxPoolSize(maxPoolSize);executor.setQueueCapacity(queueCapacity);executor.setThreadNamePrefix(EMAIL_ASYNC);// rejection-policy:当pool已经达到max size的时候,如何处理新任务// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());executor.initialize();return executor;}}

调用方式

@RestController
@AllArgsConstructor
public class SendEmailController {@Autowiredprivate ISendEmailService sendEmailService;/*** 发送邮件*/@GetMapping("/sendMail")@ApiOperationSupport(order = 1)@ApiOperation(value = "发送邮件")public void 发送sendMail() {sendEmailService.send("别名","邮件","【审核通过】","内容","附件");}

结果

SpringBoot:用腾讯企业微信邮箱发送邮件相关推荐

  1. SpringBoot+JavaMailSender+ 腾讯企业邮箱配置

    SpringBoot+JavaMailSender+ 腾讯企业邮箱配置 1. 引入spring-boot-starter-mail 依赖包 <dependency><groupId& ...

  2. 进入制造业腹地,腾讯企业微信能触达产业互联网吗?

    从通用到行业,从小微企业到大型企业,从连接到触达,在企业服务领域,企业微信深入到制造业腹地,在与BATJ的其他对手而言,耕耘看得见. 在庆祝20岁生日之时,腾讯正式启动了新一轮整体战略升级,推动由消费 ...

  3. 卫瓴科技X腾讯企业微信“营销赋能、协同增长”闭门沙龙顺利举行 |深圳

    2月24日下午,卫瓴科技.腾讯企业微信在深圳联合举办了主题为"企业如何使用企业微信实现营销赋能.协同增长"的线下闭门沙龙,活动现场座无虚席. 卫瓴科技创始人兼CEO杨炯纬.腾讯企业 ...

  4. 活动集锦|3月腾讯企业微信、泛微联合产品体验会走进23座城市

    3月,由腾讯企业微信.泛微网络联合举办的"内外协同数字化办公"产品体验会走进了全国23座城市,双方联手打造"以客户为中心"的内外协同办公,帮助组织打通内外,助力 ...

  5. 企业微信邮箱登陆,什么是邮箱邮件系统?

    邮箱是现代办公中重要的工具,选择适合公司的邮箱让信息办公更加高效,那你知道企业微信邮箱登陆怎么使用吗,如何获取微信邮箱,TOM企业邮箱有能够在微信中使用邮箱的服务,一起看看吧! 企业微信邮箱登陆 手机 ...

  6. 腾讯企业微信、泛微、契约锁联合发布全程数字化办公方案

    数字化办公体验大会 4月13日下午,腾讯企业微信.泛微.契约锁在上海联合发布"智能.协同.信创"的数字化办公解决方案,助力政企客户的数字化转型落地! 上千位政府及企事单位的信息化负 ...

  7. springboot读取腾讯企业邮箱的时候怎么设置Properties

    1.请看代码,使用pop3去读取 // 准备连接服务器的会话信息Properties props = new Properties();props.setProperty("mail.sto ...

  8. python邮件自动发送_使用python,通过腾讯企业邮件自动发送邮件

    今天试了一下用python自动发送邮件,已经成功. 前期设置 在发送邮件前,先要去腾讯企业邮箱设置一下:获取到授权码. 步骤为: 1.打开企业邮箱,点击设置->安全 2.关联微信 3.启用客户端 ...

  9. springboot 发送腾讯企业邮箱

    如果配置写在application.properties 就直接引入使用即可 @Resource private JavaMailSenderImpl javaMailSender; 如果配置在Apo ...

  10. Java中利用企业QQ邮箱发送邮件

    package test; import java.util.Date; import java.util.Properties; import javax.mail.internet.Interne ...

最新文章

  1. VS2015中配置MSComm通讯控件和注意事项
  2. 斐波那契数列python递归 0、1、1、2、3_python: 递归和递推方法求斐波那契数列
  3. 如何获取客户端的真实IP
  4. 使用 ApplicationLoader 上传应用到 Appstore
  5. Effective Java读书笔记完结啦
  6. 新基建火了,开源云计算渠道能做什么?
  7. php中memcache的使用,PHP中使用memcache
  8. “ 鸡尾酒会问题”(cocktail party problem)
  9. OSError解决办法
  10. Deep Voice 论文
  11. 【嵌入式Linux】开发环境搭建
  12. 串口工具Kermit
  13. 【每日蓝桥】10、一三年省赛Java组真题“剪格子”
  14. python语言中整数1010的二进制是多少_10的二进制是多少哦啊?怎么算 O(∩_∩)O谢谢?...
  15. 3ds Max随堂笔记 材质和类型贴图通道
  16. 微信小程序全局音频设置,手机上播放不了音频的问题解决方案,微信小程序音频无法播放问题.
  17. 自然语言处理就业前景怎么样?
  18. 连接计算机与网络传输设备的接口设备,1394连接和本地连接有什么不同
  19. parallelStream和fork/join 原理和使用
  20. Python制作小软件——4. 利用PyInstaller打包成exe文件

热门文章

  1. 关于修复msvcp110.dll丢失的问题
  2. 一种实用的BOOST电路_UC3842升压设计
  3. MSTAR雷达数据集总结
  4. 店铺动态评分怎么生效?店铺评分低会影响天猫店铺续签吗?
  5. Java高级编程9-姜国海 网络应用编程
  6. 开心网android客户端,开心网Android客户端V3.8.1升级评测
  7. python range 小数_python中如何表示一个无限循环小数?(不用分数的形式)python,使用range语...
  8. 多表连接查询与高级查询上(第三天)
  9. 面向对象的五个基本原则
  10. 自适应辛普森(Simpson)积分