SpringBoot利用线程池发送邮件

1. 创建线程池

//创建线程池
@Bean
public ThreadPoolTaskExecutor createThreadPoolTaskExecutor() {
    ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
    threadPoolTaskExecutor.setCorePoolSize(5);
    threadPoolTaskExecutor.setMaxPoolSize(10);
    return threadPoolTaskExecutor;
}

2. 配置邮箱信息

spring:
    mail:
      host: smtp.qq.com
      port: 587     #qq邮箱465、587
      default-encoding: UTF-8  #qq邮箱
      protocol: smtp
      username: [email protected]
      password: xxxxxxxxx
      properties:
            mail:
                smtp:
                  auth: true
                  timeout: 25000

3. 编码

@Component
public class EmailConfig {

	/**
	 * 邮箱地址
	 */
	@Value("${spring.mail.username}")
	private String from;
	
	/**
	 * 密码
	 */
	@Value("${spring.mail.password}")
    public String password;
	
	/**
	 * 协议
	 */
	@Value("${spring.mail.protocol}")
	public String protocol;
	
    /**
     * 端口
     */
    @Value("${spring.mail.port}")
    public String port;
    
    /**
     * 服务器地址
     */
    @Value("${spring.mail.host}")
    public String host;

	public String getFrom() {
		return from;
	}

	public void setFrom(String from) {
		this.from = from;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getProtocol() {
		return protocol;
	}

	public void setProtocol(String protocol) {
		this.protocol = protocol;
	}

	public String getPort() {
		return port;
	}

	public void setPort(String port) {
		this.port = port;
	}

	public String getHost() {
		return host;
	}

	public void setHost(String host) {
		this.host = host;
	}
    
}


###发送代码###

@Autowired
	EmailConfig emailConfig;

	@Autowired
    private JavaMailSender mailSender;
	
	@Autowired
	MailHistoryDao mailHistoryDao;
	
	@Autowired
	TaskExecutor taskExecutor;
	
	public void sendMail (final String recipient, final String subject, final String content, final String processInstanceId) {
		taskExecutor.execute(new Runnable() {
			
			@Override
			public void run() {
				
				final boolean result = sendSimpleMail(recipient, subject, content);
				final MailHistory mailHistory = new MailHistory();
				mailHistory.setRecipient(recipient);
				mailHistory.setSender(emailConfig.getFrom());
				mailHistory.setSubject(subject);
				mailHistory.setContent(content);
				mailHistory.setCreateTime(new Date());
				mailHistory.setProcessInstanceId(processInstanceId);
				mailHistory.setStatus(result);
				
				mailHistoryDao.add(mailHistory);
			}
		});
		
	}
	
	/**
	 * @param recipient 收件人
	 * @param subject 主题
	 * @param content 内容
	 * @return
	 */
	public boolean sendSimpleMail(final String recipient, final String subject, final String content) {

        try {
        	logger.info("邮件发送:收件人" + recipient + ", 主题:" + subject);
            final SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(emailConfig.getFrom());
            message.setTo(recipient);
            message.setSubject(subject);
            message.setText(content);
            message.setSentDate(new Date());
            mailSender.send(message);
            logger.info("邮件发送成功");
            return true;
        } catch (final Exception e) {
        	logger.error("邮件发送失败", e);
        	return false;
        }

    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章