package com.oying.service.impl; import cn.hutool.extra.mail.Mail; import cn.hutool.extra.mail.MailAccount; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import com.oying.domain.EmailConfig; import com.oying.domain.dto.EmailDto; import com.oying.exception.BadRequestException; import com.oying.mapper.EmailConfigMapper; import com.oying.service.EmailService; import com.oying.utils.EncryptUtils; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * @author Z * @date 2018-12-26 */ @Service @RequiredArgsConstructor @CacheConfig(cacheNames = "email") public class EmailServiceImpl extends ServiceImpl implements EmailService { @Override @CachePut(key = "'config'") @Transactional(rollbackFor = Exception.class) public EmailConfig config(EmailConfig emailConfig, EmailConfig old) throws Exception { emailConfig.setId(1L); if(!emailConfig.getPass().equals(old.getPass())){ // 对称加密 emailConfig.setPass(EncryptUtils.desEncrypt(emailConfig.getPass())); } saveOrUpdate(emailConfig); return emailConfig; } @Override @Cacheable(key = "'config'") public EmailConfig find() { EmailConfig emailConfig = getById(1L); return emailConfig == null ? new EmailConfig() : emailConfig; } @Override @Transactional(rollbackFor = Exception.class) public void send(EmailDto emailDto, EmailConfig emailConfig){ if(emailConfig.getId() == null){ throw new BadRequestException("请先配置,再操作"); } // 封装 MailAccount account = new MailAccount(); // 设置用户 String user = emailConfig.getFromUser().split("@")[0]; account.setUser(user); account.setHost(emailConfig.getHost()); account.setPort(Integer.parseInt(emailConfig.getPort())); account.setAuth(true); try { // 对称解密 account.setPass(EncryptUtils.desDecrypt(emailConfig.getPass())); } catch (Exception e) { throw new BadRequestException(e.getMessage()); } account.setFrom(emailConfig.getUser()+"<"+emailConfig.getFromUser()+">"); // ssl方式发送 account.setSslEnable(true); // 使用STARTTLS安全连接 account.setStarttlsEnable(true); // 解决jdk8之后默认禁用部分tls协议,导致邮件发送失败的问题 account.setSslProtocols("TLSv1 TLSv1.1 TLSv1.2"); String content = emailDto.getContent(); // 发送 try { int size = emailDto.getTos().size(); Mail.create(account) .setTos(emailDto.getTos().toArray(new String[size])) .setTitle(emailDto.getSubject()) .setContent(content) .setHtml(true) //关闭session .setUseGlobalSession(false) .send(); }catch (Exception e){ throw new BadRequestException(e.getMessage()); } } }