修改接收邮件

master
bynt 2 years ago
parent 0f449030c0
commit 7ac6c17bd8

@ -119,10 +119,12 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>javax.mail</groupId> <groupId>com.sun.mail</groupId>
<artifactId>mail</artifactId> <artifactId>javax.mail</artifactId>
<version>${mail.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.lingala.zip4j</groupId> <groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId> <artifactId>zip4j</artifactId>

@ -61,5 +61,5 @@ public interface CacheKey {
/** /**
* dmp * dmp
*/ */
String DMP_REQUEST_ID = "dmp::request::id"; String DMP_REQUEST_ID = "dmp::request::";
} }

@ -146,7 +146,7 @@ public class EncryptUtil {
return new String(cipher.doFinal(Objects.requireNonNull(parseHexStr2Byte(res)))); return new String(cipher.doFinal(Objects.requireNonNull(parseHexStr2Byte(res))));
} }
} catch (Exception e) { } catch (Exception e) {
log.error("++++++++++++++++++ the keyGeneratorES error +++++++++++++++"); log.error("++++++++++++++++++ the keyGeneratorES error res as {} key as {} +++++++++++++++", res, key);
} }
return null; return null;
} }

@ -133,17 +133,29 @@ public class MailUtil {
// 1. 创建参数配置, 用于连接邮件服务器的参数配置 // 1. 创建参数配置, 用于连接邮件服务器的参数配置
// 参数配置 // 参数配置
Properties props = new Properties(); Properties props = new Properties();
// 使用的协议JavaMail规范要求
props.setProperty("mail.transport.protocol", "smtp"); // 端口
props.put("mail.smtp.port", "587");
// 发件人的邮箱的 SMTP 服务器地址 // 发件人的邮箱的 SMTP 服务器地址
props.setProperty("mail.smtp.host", "smtp.office365.com"); props.put("mail.smtp.host", "smtp.office365.com");
// 当前smtp host设为可信任 否则抛出javax.mail.MessagingException: Could not convert socket to TLS
props.put("mail.smtp.ssl.trust", "smtp.office365.com");
// 使用的协议JavaMail规范要求
props.put("mail.transport.protocol", "smtp");
// 需要请求认证 // 需要请求认证
props.setProperty("mail.smtp.auth", "true"); props.put("mail.smtp.auth", "true");
// 开启STARTTLS // 开启STARTTLS
props.setProperty("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.starttls.enable", "true");
// 开启 SSL 连接, 以及更详细的发送步骤请看上一篇: 基于 JavaMail 的 Java 邮件发送:简单邮件发送 // ssl
props.put("mail.smtp.ssl", "true");
// 开启 SSL 连接, 以及更详细的发送步骤请看上一篇: 基于 JavaMail 的 Java 邮件发送:简单邮件发送
// 2. 根据配置创建会话对象, 用于和邮件服务器交互 // 2. 根据配置创建会话对象, 用于和邮件服务器交互
Session session = Session.getInstance(props); Session session = Session.getInstance(props);
// 设置为debug模式, 可以查看详细的发送 log // 设置为debug模式, 可以查看详细的发送 log
@ -165,7 +177,7 @@ public class MailUtil {
// 7. 关闭连接 // 7. 关闭连接
transport.close(); transport.close();
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); log.error("===================== send message error {} ==========================", ex.getMessage());
} }
} }

@ -93,10 +93,11 @@ public class DeliveryBalanceTask {
continue; continue;
} }
String fileUrl = deliveryProperties.getFileUrl(); String fileUrl = deliveryProperties.getFileUrl();
Integer num = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_ID); String format = DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_PATTERN);
Integer num = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_ID.concat(format));
// 转换DTO // 转换DTO
List<ImeiDTO> toList = Convert.toList(ImeiDTO.class, taskImeiList); List<ImeiDTO> toList = Convert.toList(ImeiDTO.class, taskImeiList);
String format = DateUtil.format(DateUtil.date(), DatePattern.PURE_DATE_PATTERN);
Integer batch = ObjectUtil.isNull(num) ? DefaultNumberConstants.ONE_NUMBER : num + DefaultNumberConstants.ONE_NUMBER; Integer batch = ObjectUtil.isNull(num) ? DefaultNumberConstants.ONE_NUMBER : num + DefaultNumberConstants.ONE_NUMBER;
String taskImeiName = "BY".concat(StrPool.UNDERLINE).concat(format).concat(StrPool.UNDERLINE).concat(String.valueOf(batch)); String taskImeiName = "BY".concat(StrPool.UNDERLINE).concat(format).concat(StrPool.UNDERLINE).concat(String.valueOf(batch));
@ -113,16 +114,16 @@ public class DeliveryBalanceTask {
deliveryProperties.getEmailPassword(), deliveryProperties.getEmailPassword(),
deliveryProperties.getToEmailAddress(), zipPath, taskImeiName); deliveryProperties.getToEmailAddress(), zipPath, taskImeiName);
// 保存批次号 // 保存批次号
redisUtils.set(CacheKey.DMP_REQUEST_ID, batch, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS); redisUtils.set(CacheKey.DMP_REQUEST_ID.concat(format), batch, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS);
// 修改状态 修改余额 // 修改状态 修改余额
taskImeiService.updateBath(taskId, taskImeiName, DefaultNumberConstants.ONE_NUMBER); taskImeiService.updateBath(taskId, taskImeiName, DefaultNumberConstants.ONE_NUMBER);
deliveryRecordService.saveDeliveryRecord(zipPath, taskImeiName, taskImeiList.size(), taskId, userId); deliveryRecordService.saveDeliveryRecord(zipPath, taskImeiName, taskImeiList.size(), taskId, userId);
companyService.updateUserBalanceByCompanyId(sub.doubleValue(), companyByUserId.getId()); companyService.updateUserBalanceByCompanyId(sub.doubleValue(), companyByUserId.getId());
// 删除文件 // 删除文件
FileUtil.del(csvPath); boolean csvResult = FileUtil.del(csvPath);
FileUtil.del(zipPath); boolean zipResult = FileUtil.del(zipPath);
log.info("=========================== the csv path as {}, zip path as {} ========================", csvPath, zipPath); log.info("=========================== the csv path as {}, zip path as {} csvResult as {} zipResult as {} ========================", csvPath, zipPath, csvResult, zipResult);
} }
} }
} }

@ -31,8 +31,8 @@
<properties> <properties>
<jwt.version>3.9.0</jwt.version> <jwt.version>3.9.0</jwt.version>
<mail.version>1.4</mail.version>
<poi.version>4.0.0</poi.version> <poi.version>4.0.0</poi.version>
<mail.version>1.6.2</mail.version>
<oshi.version>5.7.1</oshi.version> <oshi.version>5.7.1</oshi.version>
<guava.version>23.0</guava.version> <guava.version>23.0</guava.version>
<yauaa.version>5.23</yauaa.version> <yauaa.version>5.23</yauaa.version>
@ -244,8 +244,8 @@
<dependency> <dependency>
<groupId>javax.mail</groupId> <groupId>com.sun.mail</groupId>
<artifactId>mail</artifactId> <artifactId>javax.mail</artifactId>
<version>${mail.version}</version> <version>${mail.version}</version>
</dependency> </dependency>

@ -251,12 +251,13 @@ public interface ClueService {
/** /**
* 线 * 线
* *
* @param tagList
* @param phoneList * @param phoneList
* @param taskId * @param taskId
* @param userId * @param userId
* @param num * @param num
*/ */
void saveClue(List<String> phoneList, Long taskId, Long userId, Integer num); void saveClue(List<String> tagList, List<String> phoneList, Long taskId, Long userId, Integer num);
/** /**
* 线crm * 线crm

@ -1,5 +1,6 @@
package com.baiye.module.service.dto; package com.baiye.module.service.dto;
import cn.hutool.core.annotation.Alias;
import lombok.Data; import lombok.Data;
/** /**
@ -8,6 +9,12 @@ import lombok.Data;
*/ */
@Data @Data
public class MailDTO { public class MailDTO {
private String imei; @Alias("phone")
private String phone;
@Alias("tag")
private String tag; private String tag;
@Alias("corp")
private String corp;
@Alias("decryptInfo")
private String decryptInfo;
} }

@ -977,15 +977,16 @@ public class ClueServiceImpl implements ClueService {
@Override @Override
public void saveClue(List<String> phoneList, Long taskId, Long userId, Integer num) { public void saveClue(List<String> tagList, List<String> phoneList, Long taskId, Long userId, Integer num) {
if (CollUtil.isNotEmpty(phoneList)) { if (CollUtil.isNotEmpty(phoneList)) {
for (String phone : phoneList) { for (int i = 0; i < phoneList.size(); i++) {
String phone = phoneList.get(i);
if (StringUtils.isNotBlank(phone)) { if (StringUtils.isNotBlank(phone)) {
boolean bool = MobileUtil.checkPhone(phone); if (MobileUtil.checkPhone(phone)) {
if (bool) {
Clue clue = new Clue(); Clue clue = new Clue();
clue.setNid(phone); clue.setNid(phone);
clue.setCreateBy(userId); clue.setCreateBy(userId);
clue.setCastInfo(tagList.get(i));
clue.setOrigin(DefaultNumberConstants.FIVE_NUMBER); clue.setOrigin(DefaultNumberConstants.FIVE_NUMBER);
Clue save = clueRepository.save(clue); Clue save = clueRepository.save(clue);
ClueMiddle clueMiddle = new ClueMiddle(); ClueMiddle clueMiddle = new ClueMiddle();

@ -1,11 +1,8 @@
package com.baiye.task; package com.baiye.task;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.text.csv.CsvData; import cn.hutool.core.text.csv.CsvData;
import cn.hutool.core.text.csv.CsvReader; import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvUtil; import cn.hutool.core.text.csv.CsvUtil;
@ -18,16 +15,11 @@ import com.baiye.module.entity.DeliveryRecord;
import com.baiye.module.entity.Task; import com.baiye.module.entity.Task;
import com.baiye.module.service.ClueService; import com.baiye.module.service.ClueService;
import com.baiye.module.service.DeliveryRecordService; import com.baiye.module.service.DeliveryRecordService;
import com.baiye.module.service.dto.SecretResponseBean;
import com.baiye.util.CompressUtil; import com.baiye.util.CompressUtil;
import com.baiye.util.DecryptPnoUtil;
import com.baiye.util.MailUtil; import com.baiye.util.MailUtil;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -67,11 +59,11 @@ public class MailSourceTask {
try { try {
for (Message message : list) { for (Message message : list) {
// 获取邮件的状态 // 获取邮件的状态
Flags flags = message.getFlags(); /* Flags flags = message.getFlags();
!flags.contains(Flags.Flag.SEEN) &&*/
// 获取未读的邮件内容 且与之对应 // 获取未读的邮件内容 且与之对应
if (!flags.contains(Flags.Flag.SEEN) && if (deliveryProperties.getToEmailAddress().equalsIgnoreCase
deliveryProperties.getToEmailAddress().equalsIgnoreCase (MailUtil.getFrom((MimeMessage) message))) {
(MailUtil.getFrom((MimeMessage) message))) {
String taskName = message.getSubject(); String taskName = message.getSubject();
// 内容获取发送请求 // 内容获取发送请求
DeliveryRecord byTaskName = deliveryRecordService.findByTaskName(taskName); DeliveryRecord byTaskName = deliveryRecordService.findByTaskName(taskName);
@ -80,8 +72,8 @@ public class MailSourceTask {
Task task = new Task(); Task task = new Task();
Long taskId = byTaskName.getTaskId(); Long taskId = byTaskName.getTaskId();
CsvReader reader = CsvUtil.getReader(); CsvReader reader = CsvUtil.getReader();
List<String> tagList = Lists.newArrayList();
List<String> phoneList = Lists.newArrayList(); List<String> phoneList = Lists.newArrayList();
List<String> decryptionList = Lists.newArrayList();
// 解析附件内容并保存文件 // 解析附件内容并保存文件
String path = MailUtil.saveAttachMent String path = MailUtil.saveAttachMent
(message, deliveryProperties.getFileUrl()); (message, deliveryProperties.getFileUrl());
@ -94,21 +86,13 @@ public class MailSourceTask {
(file.listFiles())[DefaultNumberConstants.ZERO_NUMBER]; (file.listFiles())[DefaultNumberConstants.ZERO_NUMBER];
// 解析文件 // 解析文件
CsvData data = reader.read(parseFile); CsvData data = reader.read(parseFile);
data.getRows().forEach(clue -> tagList.add
(clue.get(DefaultNumberConstants.ONE_NUMBER)));
data.getRows().forEach(clue -> decryptionList.add data.getRows().forEach(clue -> phoneList.add
(clue.get(DefaultNumberConstants.ZERO_NUMBER))); (clue.get(DefaultNumberConstants.THREE_NUMBER)));
List<List<String>> partitions = ListUtil.partition
(decryptionList, DefaultNumberConstants.TWO_HUNDRED);
for (List<String> partition : partitions) {
String join = Joiner.on(StrPool.COMMA).join(partition);
SecretResponseBean responseBean
= DecryptPnoUtil.batchDecryptPno(Base64.encode
(StringUtils.substringBeforeLast(join, StrPool.COMMA)));
String phoneStr = Base64.decodeStr(responseBean.getTels());
phoneList.addAll(Splitter.on(StrPool.COMMA).splitToList(phoneStr));
}
// 将imei转为线索 // 将imei转为线索
clueService.saveClue(phoneList, byTaskName.getTaskId(), clueService.saveClue(tagList, phoneList, byTaskName.getTaskId(),
byTaskName.getUserId(), DefaultNumberConstants.FOUR_NUMBER); byTaskName.getUserId(), DefaultNumberConstants.FOUR_NUMBER);
// 修改任务总条数 // 修改任务总条数
Integer taskNum = clueService.findTaskNum(taskId); Integer taskNum = clueService.findTaskNum(taskId);

Loading…
Cancel
Save