修改邮件功能

master
bynt 1 year ago
parent 73a26a2e41
commit 19c8b1004f

@ -78,6 +78,7 @@ public class MailSourceTask {
/**
*
*/
@SneakyThrows
@Scheduled(cron = "0 0/10 * * * ? ")
@Transactional(rollbackFor = Exception.class)
public void receiveMail() {
@ -85,93 +86,88 @@ public class MailSourceTask {
List<Message> list = MailUtil.readMailByIMAP
(deliveryProperties.getEmailAddress(), deliveryProperties.getEmailPassword());
if (CollUtil.isNotEmpty(list)) {
try {
for (Message message : list) {
// 获取未读的邮件内容 且与之对应
if (deliveryProperties.getToEmailAddress().equalsIgnoreCase
(MailUtil.getFrom((MimeMessage) message))) {
String taskName = message.getSubject();
Object objCache = redisUtils.get(taskName);
if (ObjectUtil.isNotNull(objCache)) {
continue;
}
// 设置十分钟缓存
redisUtils.set(taskName, taskName, DefaultNumberConstants.TEN_NUMBER, TimeUnit.MINUTES);
// 内容获取发送请求
DeliveryRecord byTaskName = deliveryRecordService.findByTaskName(taskName);
if (ObjectUtil.isNotNull(byTaskName)
&& byTaskName.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
log.info("================ the receive mail taskName as {} ==============", taskName);
Task task = new Task();
Long taskId = byTaskName.getTaskId();
CsvReader reader = CsvUtil.getReader();
List<String> tagList = Lists.newArrayList();
List<String> phoneList = Lists.newArrayList();
List<String> decryptList = Lists.newArrayList();
// 解析附件内容并保存文件
String path = MailUtil.saveAttachMent
(message, deliveryProperties.getFileUrl());
// 解压文件
String unzipPath =
CompressUtil.unzipFiles(deliveryProperties.getFileUrl(),
path, deliveryProperties.getZipPassword());
if (ObjectUtil.isNotNull(byTaskName.getType())) {
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER
|| byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) {
File file = new File(unzipPath);
File parseFile = Objects.requireNonNull
(file.listFiles())[DefaultNumberConstants.ZERO_NUMBER];
// 解析文件
CsvData data = reader.read(parseFile);
CsvRow strings = data.getRows().get(DefaultNumberConstants.ZERO_NUMBER);
String tagStr = strings.get(DefaultNumberConstants.ONE_NUMBER);
// csv通配
data.getRows().forEach(clue -> {
phoneList.add(clue.size() == DefaultNumberConstants.THREE_NUMBER
? clue.get(DefaultNumberConstants.TWO_NUMBER) : clue.get(DefaultNumberConstants.THREE_NUMBER));
tagList.add(tagStr);
});
// 去除重复
List<String> phoneSets = Lists.newArrayList(Sets.newHashSet(phoneList));
log.info("=============== the phone list as {} ==================", phoneList.size());
// 集合分割
List<List<String>> partitions = ListUtil.partition(phoneSets, DefaultNumberConstants.TWO_HUNDRED);
for (List<String> partition : partitions) {
String join = Joiner.on(StrPool.COMMA).skipNulls().join(partition);
// 批量解析号码
SecretResponseBean responseBean = DecryptPnoUtil.batchDecryptPno
(Base64.encode(StringUtils.substringBeforeLast(join, StrPool.COMMA)));
if (ObjectUtil.isNotNull(responseBean) && ObjectUtil.isNotNull(responseBean.getTels())) {
String decodeStr = Base64.decodeStr(responseBean.getTels());
String[] split = decodeStr.split(StrPool.COMMA);
if (split.length > DefaultNumberConstants.ZERO_NUMBER) {
decryptList.addAll(Lists.newArrayList(Arrays.asList(split)));
}
for (Message message : list) {
// 获取未读的邮件内容 且与之对应
if (deliveryProperties.getToEmailAddress().equalsIgnoreCase
(MailUtil.getFrom((MimeMessage) message))) {
String taskName = message.getSubject();
Object objCache = redisUtils.get(taskName);
if (ObjectUtil.isNotNull(objCache)) {
continue;
}
// 设置十分钟缓存
redisUtils.set(taskName, taskName, DefaultNumberConstants.TEN_NUMBER, TimeUnit.MINUTES);
// 内容获取发送请求
DeliveryRecord byTaskName = deliveryRecordService.findByTaskName(taskName);
if (ObjectUtil.isNotNull(byTaskName)
&& byTaskName.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
log.info("================ the receive mail taskName as {} ==============", taskName);
Task task = new Task();
Long taskId = byTaskName.getTaskId();
CsvReader reader = CsvUtil.getReader();
List<String> tagList = Lists.newArrayList();
List<String> phoneList = Lists.newArrayList();
List<String> decryptList = Lists.newArrayList();
// 解析附件内容并保存文件
String path = MailUtil.saveAttachMent
(message, deliveryProperties.getFileUrl());
// 解压文件
String unzipPath =
CompressUtil.unzipFiles(deliveryProperties.getFileUrl(),
path, deliveryProperties.getZipPassword());
if (ObjectUtil.isNotNull(byTaskName.getType())) {
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER
|| byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) {
File file = new File(unzipPath);
File parseFile = Objects.requireNonNull
(file.listFiles())[DefaultNumberConstants.ZERO_NUMBER];
// 解析文件
CsvData data = reader.read(parseFile);
CsvRow strings = data.getRows().get(DefaultNumberConstants.ZERO_NUMBER);
String tagStr = strings.get(DefaultNumberConstants.ONE_NUMBER);
// csv通配
data.getRows().forEach(clue -> {
phoneList.add(clue.size() == DefaultNumberConstants.THREE_NUMBER
? clue.get(DefaultNumberConstants.TWO_NUMBER) : clue.get(DefaultNumberConstants.THREE_NUMBER));
tagList.add(tagStr);
});
// 去除重复
List<String> phoneSets = Lists.newArrayList(Sets.newHashSet(phoneList));
log.info("=============== the phone list as {} ==================", phoneList.size());
// 集合分割
List<List<String>> partitions = ListUtil.partition(phoneSets, DefaultNumberConstants.TWO_HUNDRED);
for (List<String> partition : partitions) {
String join = Joiner.on(StrPool.COMMA).skipNulls().join(partition);
// 批量解析号码
SecretResponseBean responseBean = DecryptPnoUtil.batchDecryptPno
(Base64.encode(StringUtils.substringBeforeLast(join, StrPool.COMMA)));
if (ObjectUtil.isNotNull(responseBean) && ObjectUtil.isNotNull(responseBean.getTels())) {
String decodeStr = Base64.decodeStr(responseBean.getTels());
String[] split = decodeStr.split(StrPool.COMMA);
if (split.length > DefaultNumberConstants.ZERO_NUMBER) {
decryptList.addAll(Lists.newArrayList(Arrays.asList(split)));
}
}
// 剔除空值
decryptList = decryptList.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
// 请求黑名单
if (CollUtil.isNotEmpty(decryptList)) {
log.info("=================== the decryptList size as {} =====================", decryptList.size());
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER) {
saveClue(taskName, byTaskName, task, taskId, tagList, decryptList, path, unzipPath);
}
if (byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) {
downResource(taskName, tagList, decryptList, path, unzipPath);
}
if (byTaskName.getType() == DefaultNumberConstants.TWO_NUMBER) {
sendRequest(taskName, byTaskName, decryptList, path);
}
}
// 剔除空值
decryptList = decryptList.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
// 请求黑名单
if (CollUtil.isNotEmpty(decryptList)) {
log.info("=================== the decryptList size as {} =====================", decryptList.size());
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER) {
saveClue(taskName, byTaskName, task, taskId, tagList, decryptList, path, unzipPath);
}
if (byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) {
downResource(taskName, tagList, decryptList, path, unzipPath);
}
if (byTaskName.getType() == DefaultNumberConstants.TWO_NUMBER) {
sendRequest(taskName, byTaskName, decryptList, path);
}
}
}
}
}
}
} catch (Exception e) {
log.error("=================== the receive mail error message as {} ===========", e.getMessage());
throw new BadRequestException("接收邮件失败");
}
}
}

Loading…
Cancel
Save