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<EmailConfigMapper, EmailConfig> 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());
|
}
|
}
|
}
|