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

    }

 

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