SpringBoot:用腾讯企业微信邮箱发送邮件

需求

准备

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

实现代码

配置文件

引入发送邮箱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

异步线程池配置

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";




    @Bean
    public 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 {
          
   

    @Autowired
    private ISendEmailService sendEmailService;

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

结果

经验分享 程序员 微信小程序 职场和发展