| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- package com.cyksj.service.mail.impl;
- import cn.hutool.core.util.StrUtil;
- import cn.hutool.http.HttpRequest;
- import cn.hutool.http.HttpStatus;
- import cn.hutool.http.HttpUtil;
- import com.baomidou.mybatisplus.core.toolkit.StringUtils;
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
- import com.cyksj.common.exception.BusinessRuntimeException;
- import com.cyksj.common.util.StringUtil;
- import com.cyksj.common.util.TicketCodeCommonUtil;
- import com.cyksj.mapper.sys.SysEmailMapper;
- import com.cyksj.model.entity.SysEmail;
- import com.cyksj.service.mail.YhMailService;
- import com.cyksj.service.relation.GroupsRelationNetflixService;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * 项目名: yhlxj2
- * 文件名: YhEmailServiceImpl
- * 创建者: JavaZou
- * 创建时间:2024/8/19 15:40
- */
- @Service
- @RequiredArgsConstructor
- @Slf4j
- public class YhEmailServiceImpl implements YhMailService {
- private final GroupsRelationNetflixService groupsRelationNetflixService;
- private final SysEmailMapper sysEmailMapper;
- @Override
- public String getVerifyCode(String account, String relateEmail, Long goodsId, Integer type, Integer linkType, Boolean isReturnDeviceUrl) throws Exception {
- String body = readEmail(StrUtil.isNotEmpty(relateEmail) ? relateEmail : account);
- String code = getDifferentGoodsCode(goodsId, body, type, linkType, isReturnDeviceUrl);
- if (StrUtil.isEmpty(code)) {
- throw BusinessRuntimeException.getInstance("请重新发送对应邮件");
- }
- return code;
- }
- @Override
- public String readResetPwdResetLink(String account) {
- String body = readEmail(account);
- String prefix = "https://auth0.openai.com/u/reset-verify";
- if (body.contains(prefix)) {
- String query = StrUtil.subBetween(body, "<" + prefix, ">");
- if(StringUtils.isBlank(query)){
- query = StrUtil.subBetween(body, "(" + prefix, ")");
- if(StringUtils.isBlank(query)){
- query = StrUtil.subBetween(body, "( " + prefix, " )");
- }
- }
- String link = prefix + query;
- if (link.contains("\uE53B")) {
- link = link.replace("\uE53B", "=");
- }
- if (!link.contains("=")) {
- link = link.replaceAll("(ticket)[^=]", "$1=");
- }
- return link;
- }
- throw BusinessRuntimeException.getInstance("读取重置密码邮件失败或被新邮件覆盖");
- }
- @Override
- public String getGptCode(String account) {
- String body = readEmail(account);
- String prefix = "Enter this temporary verification";
- if (body.contains(prefix)) {
- String str = StrUtil.subAfter(body, prefix, true);
- String code = StringUtil.getVerifyCodePattern(str, 6);
- return code;
- }
- throw BusinessRuntimeException.getInstance("获取验证码失败或被新邮件覆盖");
- }
- public String readEmail(String account) {
- //获取邮箱密码
- SysEmail sysEmail = sysEmailMapper.selectOne(Wrappers.lambdaQuery(SysEmail.class)
- .eq(SysEmail::getEmail, account)
- .last("limit 1"));
- if (sysEmail == null) {
- log.info("获取账号:{}验证码异常,未配置对应系统邮箱", account);
- throw BusinessRuntimeException.getInstance("对应邮箱配置不存在...");
- }
- String url = "http://yinhelx.com/api/controller.php";
- Map<String, Object> params = new HashMap<>();
- params.put("imap_key", "imap_56568niua@@");
- params.put("fun", "imap_read");
- params.put("imap_ip", "yinhelx.com");
- params.put("port", "143");
- params.put("username", account);
- params.put("password", sysEmail.getPassword());
- params.put("mbox_id", "0");
- params.put("delete", "0");
- HttpRequest post = HttpUtil.createPost(url);
- post.form(params);
- cn.hutool.http.HttpResponse execute = post.execute();
- if (execute.getStatus() != HttpStatus.HTTP_OK) {
- throw BusinessRuntimeException.getInstance("获取验证码异常,请联系客服...");
- }
- return execute.body();
- }
- public String getDifferentGoodsCode(Long goodsId, String body, Integer type, Integer linkType, Boolean isReturnDeviceUrl) {
- String code = null;
- //奈飞
- if (goodsId == 1) {
- if (type != null && type == 1) {
- if (body.contains("輸入此代碼登入") || body.contains("输入此代码登录") || body.contains("Enter this code to sign in")) {
- code = StrUtil.subBetween(body, "輸入此代碼登入", "請在裝置上輸入上");
- if (StrUtil.isEmpty(code)) {
- code = StrUtil.subAfter(body, "输入此代码登录", true);
- }
- if (StrUtil.isEmpty(code)) {
- code = StrUtil.subAfter(body, "Enter this code to sign in", true);
- }
- }
- if (StrUtil.isEmpty(code)) {
- throw BusinessRuntimeException.getInstance("查询失败,请检查是否发送了登陆码..");
- }
- } else {
- String urlPref;
- //更新装置
- if (linkType == 1) {
- urlPref = "https://www.netflix.com/account/update-primary-location";
- code = StrUtil.subBetween(body, "[" + urlPref, "]");
- } else {
- //验证链接
- urlPref = "https://www.netflix.com/account/travel/verify";
- code = StrUtil.subBetween(body, "[" + urlPref, "]");
- }
- if (StrUtil.isEmpty(code)) {
- throw BusinessRuntimeException.getInstance("请在奈飞端点击“传送电子邮件”");
- }
- String url = urlPref + code;
- //非点击装置同步更新按钮 直接返回链接
- if (linkType == 2) return url;
- //直接返回同步更新装置url
- if (isReturnDeviceUrl) {
- return url;
- }
- //失败返回验证链接
- if (!groupsRelationNetflixService.confirmUpdate(url)) {
- return url;
- }
- return StrUtil.EMPTY;
- }
- }
- //除奈飞
- if (StrUtil.isEmpty(code)) {
- code = TicketCodeCommonUtil.getTicketCodeStr(body, goodsId);
- }
- return code;
- }
- }
|