Bladeren bron

郵件修改

lyhzzz 2 jaren geleden
bovenliggende
commit
c295ab7059

+ 2 - 0
src/main/java/com/fdkankan/ucenter/common/constants/ResultCode.java

@@ -9,4 +9,6 @@ public class ResultCode {
     public static final String FAILURE_MSG_400003 = "获取深时下载状态失败";
     public static final int FAILURE_CODE_400004 = 400004;
     public static final String FAILURE_MSG_400004 = "获取深时下载链接失败";
+    public static final int FAILURE_CODE_400005 = 400005;
+    public static final String FAILURE_MSG_400005 = "获取邮件模板错误";
 }

+ 21 - 0
src/main/java/com/fdkankan/ucenter/controller/MailTemplateController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.ucenter.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-10
+ */
+@RestController
+@RequestMapping("/ucenter/mailTemplate")
+public class MailTemplateController {
+
+}
+

+ 57 - 0
src/main/java/com/fdkankan/ucenter/controller/TestController.java

@@ -10,6 +10,8 @@ import com.fdkankan.common.util.SecurityUtil;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.sms.SendMailAcceUtils;
+import com.fdkankan.ucenter.common.MailUtil;
 import com.fdkankan.ucenter.common.OssPath;
 import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.common.Result;
@@ -20,6 +22,7 @@ import com.fdkankan.ucenter.entity.SceneProRe;
 import com.fdkankan.ucenter.service.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
@@ -63,4 +66,58 @@ public class TestController {
         return Result.success( );
     }
 
+
+    @RequestMapping("/sendMail")
+    public Result sendMail() throws Exception {
+        Integer days =30;
+        String userName = "luomin@cgaii.com";
+        //String userName = "1413541360@qq.com";
+        String msgType = "premium";
+        if(days!=null && days >= 0){
+            if(days > 0){
+                String EN_CODE_MSG_EUR = MailUtil.EN_CODE_MSG_EUR.replace("${member}",msgType+" ");
+                SendMailAcceUtils.sendMail(userName,
+                        MailUtil.EN_CODE_SUBJECT_GQ, EN_CODE_MSG_EUR.replace("${code}",days.toString()),
+                        null);
+            }else{
+                SendMailAcceUtils.sendMail(userName,
+                        MailUtil.EN_CODE_SUBJECT_GQ, MailUtil.EN_CODE_MSG_EUR_TODAY.replace("${member}"," "+msgType),
+                        null);
+            }
+        }else{
+            String EN_CODE_MSG_EUR_GQ = MailUtil.EN_CODE_MSG_EUR_GQ.replace("${member}",msgType+" ");
+            SendMailAcceUtils.sendMail(userName,
+                    MailUtil.EN_CODE_SUBJECT_GQ, EN_CODE_MSG_EUR_GQ,null);
+        }
+        return Result.success( );
+    }
+    @Autowired
+    IMailTemplateService mailTemplateService;
+
+    @GetMapping("/sendMail1")
+    public Result sendMail1(@RequestParam(required = false)String userName) throws Exception {
+        //luomin@cgaii.com
+        Integer[] days ={-1,0,30};
+        for (Integer day : days) {
+            if(day == null || day<0){
+                mailTemplateService.sendPeExMail(userName);
+                continue;
+            }
+            if(day > 0){
+                mailTemplateService.sendPeNoExMail(userName,day);
+                continue;
+            }
+            mailTemplateService.sendPeTodayExMail(userName);
+        }
+        return Result.success( );
+    }
+
+    @GetMapping("/sendMail2")
+    public Result sendMail2(@RequestParam(required = false)String userName) throws Exception {
+        //luomin@cgaii.com
+        mailTemplateService.sendCodeMail(userName,"123456","en");
+        mailTemplateService.sendCodeMail(userName,"123456","zh");
+        return Result.success( );
+    }
+
 }

+ 90 - 0
src/main/java/com/fdkankan/ucenter/entity/MailTemplate.java

@@ -0,0 +1,90 @@
+package com.fdkankan.ucenter.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-10
+ */
+@Getter
+@Setter
+@TableName("t_mail_template")
+public class MailTemplate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 发件人邮箱
+     */
+    @TableField("send_mail")
+    private String sendMail;
+
+    /**
+     * 发件人邮箱密码
+     */
+    @TableField("send_password")
+    private String sendPassword;
+
+    /**
+     * 发件人主机
+     */
+    @TableField("send_host")
+    private String sendHost;
+
+    /**
+     * 收件主题
+     */
+    @TableField("subject")
+    private String subject;
+
+    /**
+     * 邮件内容
+     */
+    @TableField("msg")
+    private String msg;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+    /**
+     * 0订单发票,1深时演示场景,2验证码,3权益会员过期
+     */
+    @TableField("type")
+    private Integer type;
+
+    /**
+     * zh 中文,en英文
+     */
+    @TableField("lang")
+    private String lang;
+
+
+}

+ 1 - 1
src/main/java/com/fdkankan/ucenter/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir") ;
 
         generate(path,"ucenter", getTables(new String[]{
-                "t_agent_new_log",
+                "t_mail_template",
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 2 - 2
src/main/java/com/fdkankan/ucenter/interceptor/ControllerAopInterceptor.java

@@ -65,12 +65,12 @@ public class ControllerAopInterceptor {
 		// 记录开始时间
 		long start = System.currentTimeMillis();
 
-		log.info("请求| ip:{} , 请求接口:{} ,请求时间:{}, 参数:{} , 请求token:{} ",
+		log.warn("请求| ip:{} , 请求接口:{} ,请求时间:{}, 参数:{} , 请求token:{} ",
 				ip, requestURL, start,paramsBuf.toString(), request.getHeader("token"));
 		// 执行目标方法
 		result = pjp.proceed();
 		// 获取执行完的时间 打印返回报文
-		log.info("返回| 请求接口:{} , 请求时间:{} , 处理时间:{} 毫秒 , 返回结果 :{}",
+		log.warn("返回| 请求接口:{} , 请求时间:{} , 处理时间:{} 毫秒 , 返回结果 :{}",
 				requestURL, start, (System.currentTimeMillis() - start), result);
 		return result;
 	}

+ 18 - 0
src/main/java/com/fdkankan/ucenter/mapper/IMailTemplateMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.ucenter.mapper;
+
+import com.fdkankan.ucenter.entity.MailTemplate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-10
+ */
+@Mapper
+public interface IMailTemplateMapper extends BaseMapper<MailTemplate> {
+
+}

+ 37 - 0
src/main/java/com/fdkankan/ucenter/service/IMailTemplateService.java

@@ -0,0 +1,37 @@
+package com.fdkankan.ucenter.service;
+
+import com.fdkankan.ucenter.entity.MailTemplate;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-10
+ */
+public interface IMailTemplateService extends IService<MailTemplate> {
+
+    Boolean sendMail(String email, MailTemplate emailTemplate, String file);
+
+    MailTemplate getTemplate(Integer type,String lang);
+
+    /**
+     * 发送邮箱验证码
+     */
+    Boolean sendCodeMail(String email,String code,String lang);
+
+    /**
+     * 发送会员权益过期邮件
+     */
+    Boolean sendPeExMail(String email);
+    /**
+     * 发送会员权益即将过期邮件
+     */
+    Boolean sendPeNoExMail(String email,Integer day);
+    /**
+     * 发送会员权益今天过期
+     */
+    Boolean sendPeTodayExMail(String email);
+}

+ 80 - 0
src/main/java/com/fdkankan/ucenter/service/impl/MailTemplateServiceImpl.java

@@ -0,0 +1,80 @@
+package com.fdkankan.ucenter.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.ucenter.common.constants.ResultCode;
+import com.fdkankan.ucenter.entity.MailTemplate;
+import com.fdkankan.ucenter.mapper.IMailTemplateMapper;
+import com.fdkankan.ucenter.service.IMailTemplateService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.ucenter.util.SendMailUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-10
+ */
+@Service
+public class MailTemplateServiceImpl extends ServiceImpl<IMailTemplateMapper, MailTemplate> implements IMailTemplateService {
+
+    @Override
+    public Boolean sendMail(String email , MailTemplate mailTemplate, String file) {
+        if(mailTemplate == null){
+            throw new BusinessException(ResultCode.FAILURE_CODE_400005,ResultCode.FAILURE_MSG_400005);
+        }
+        return SendMailUtils.sendMail(mailTemplate.getSendMail(), mailTemplate.getSendPassword(), mailTemplate.getSendHost(),
+                email, mailTemplate.getSubject(), mailTemplate.getMsg(), file);
+    }
+
+    @Override
+    public MailTemplate getTemplate(Integer type,String lang) {
+        LambdaQueryWrapper<MailTemplate> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(MailTemplate::getType,type);
+        wrapper.eq(MailTemplate::getLang,lang);
+        return this.getOne(wrapper);
+    }
+
+
+    @Override
+    public Boolean sendCodeMail(String email, String code,String lang) {
+        MailTemplate mailTemplate = this.getTemplate(2,lang);
+        if(mailTemplate != null){
+            String msg = mailTemplate.getMsg();
+            if(StringUtils.isNotBlank(code)){
+                msg = msg.replace("{code}",code);
+            }
+            mailTemplate.setMsg(msg);
+        }
+        return sendMail(email,mailTemplate,null);
+    }
+
+    @Override
+    public Boolean sendPeExMail(String email) {
+        MailTemplate mailTemplate = this.getTemplate(3,"en");
+        return sendMail(email,mailTemplate,null);
+    }
+
+    @Override
+    public Boolean sendPeNoExMail(String email,Integer day) {
+        MailTemplate mailTemplate = this.getTemplate(4,"en");
+        if(mailTemplate != null){
+            String msg = mailTemplate.getMsg();
+            if(day != null && day >0){
+                msg = msg.replace("{day}",day.toString());
+            }
+            mailTemplate.setMsg(msg);
+        }
+        return sendMail(email,mailTemplate,null);
+    }
+
+    @Override
+    public Boolean sendPeTodayExMail(String email) {
+        MailTemplate mailTemplate = this.getTemplate(5,"en");
+        return sendMail(email,mailTemplate,null);
+    }
+}

+ 12 - 15
src/main/java/com/fdkankan/ucenter/service/impl/UserIncrementServiceImpl.java

@@ -33,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
+import java.security.GeneralSecurityException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -57,6 +58,8 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
     ISceneProService sceneProService;
     @Autowired
     SmsService smsService;
+    @Autowired
+    IMailTemplateService mailTemplateService;
 
     @Override
     public Long getCountByUserId(Long userId, int type) {
@@ -324,22 +327,16 @@ public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper,
                 }
                 if("aws".equals(NacosProperty.uploadType)  && StringUtil.isNotBlank(userEntity.getUserName())){
                     Integer days = userIds.get(userId);
-                    if(days!=null && days >= 0){
-                        if(days > 0){
-                            String EN_CODE_MSG_EUR = MailUtil.EN_CODE_MSG_EUR.replace("${member}",msgType+" ");
-                            SendMailAcceUtils.sendMail(userEntity.getUserName(),
-                                    MailUtil.EN_CODE_SUBJECT_GQ, EN_CODE_MSG_EUR.replace("${code}",String.valueOf(userIds.get(userId))),
-                                    null);
-                        }else{
-                            SendMailAcceUtils.sendMail(userEntity.getUserName(),
-                                    MailUtil.EN_CODE_SUBJECT_GQ, MailUtil.EN_CODE_MSG_EUR_TODAY.replace("${member}"," "+msgType),
-                                    null);
-                        }
-                    }else{
-                        String EN_CODE_MSG_EUR_GQ = MailUtil.EN_CODE_MSG_EUR_GQ.replace("${member}",msgType+" ");
-                        SendMailAcceUtils.sendMail(userEntity.getUserName(),
-                                MailUtil.EN_CODE_SUBJECT_GQ, EN_CODE_MSG_EUR_GQ,null);
+                    if(days == null || days<0){
+                        mailTemplateService.sendPeExMail(userEntity.getUserName());
+                        continue;
                     }
+                    if(days > 0){
+                        mailTemplateService.sendPeNoExMail(userEntity.getUserName(),userIds.get(userId));
+                        continue;
+                    }
+                    mailTemplateService.sendPeTodayExMail(userEntity.getUserName());
+
                 }
             }
         }

+ 95 - 0
src/main/java/com/fdkankan/ucenter/util/SendMailUtils.java

@@ -0,0 +1,95 @@
+package com.fdkankan.ucenter.util;
+
+import com.sun.mail.util.MailSSLSocketFactory;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
+import javax.activation.FileDataSource;
+import javax.mail.*;
+import javax.mail.internet.*;
+import java.util.Properties;
+
+/**
+ * Created by Hb_zzZ on 2020/3/16.
+ */
+public class SendMailUtils {
+
+
+    /**
+     * 发送带附件的邮件
+     * @param  from      发件人
+     * @param  pass      发件人密码
+     * @param  host      发件人主机
+     * @param receive    收件人
+     * @param subject    邮件主题
+     * @param msg        邮件内容
+     * @param filename   附件地址
+     *
+     */
+    public static boolean sendMail(String from,String pass,String host,
+                                   String receive, String subject, String msg, String filename) {
+        if (StringUtils.isEmpty(receive)) {
+            return false;
+        }
+        try {
+            // 获取系统属性
+            Properties properties = System.getProperties();
+            // 设置邮件服务器
+            properties.setProperty("mail.smtp.host", host);
+            properties.setProperty("mail.debug", "true");
+            properties.put("mail.smtp.auth", "true");
+            MailSSLSocketFactory sf = new MailSSLSocketFactory();
+            sf.setTrustAllHosts(true);
+            properties.put("mail.smtp.ssl.enable", "true");
+            properties.put("mail.smtp.ssl.socketFactory", sf);
+            // 获取默认session对象
+            Session session = Session.getDefaultInstance(properties, new Authenticator() {
+                public PasswordAuthentication getPasswordAuthentication() { // qq邮箱服务器账户、第三方登录授权码
+                    return new PasswordAuthentication(from, pass); // 发件人邮件用户名、密码
+                }
+            });
+            // 创建默认的 MimeMessage 对象
+            MimeMessage message = new MimeMessage(session);
+            // Set From: 头部头字段
+            message.setFrom(new InternetAddress(from));
+            // Set To: 头部头字段
+            message.addRecipient(Message.RecipientType.TO, new InternetAddress(receive));
+            // Set Subject: 主题文字
+            message.setSubject(subject);
+            // 创建消息部分
+            BodyPart messageBodyPart = new MimeBodyPart();
+            // 消息
+            messageBodyPart.setText(msg);
+            // 创建多重消息
+            MimeMultipart multipart = new MimeMultipart("mixed");
+
+            if(StringUtils.isNotEmpty(filename)){
+                // 附件部分
+                messageBodyPart = new MimeBodyPart();
+                // 设置要发送附件的文件路径
+                DataSource source = new FileDataSource(filename);
+                messageBodyPart.setDataHandler(new DataHandler(source));
+                // messageBodyPart.setFileName(filename);
+                // 处理附件名称中文(附带文件路径)乱码问题
+                messageBodyPart.setFileName(MimeUtility.encodeText(filename));
+                multipart.addBodyPart(messageBodyPart);
+            }
+            //html代码部分
+            MimeBodyPart htmlPart = new MimeBodyPart();
+            multipart.addBodyPart(htmlPart);
+            //html代码
+            htmlPart.setContent(msg, "text/html;charset=utf-8");
+            // 发送完整消息
+            message.setContent(multipart);
+            // 发送消息
+            Transport.send(message, new  Address[]{new InternetAddress(receive)});
+            // System.out.println("Sent message successfully....");
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+}

+ 3 - 7
src/main/resources/bootstrap-dev.yml

@@ -6,14 +6,14 @@ spring:
       config:
         server-addr: 120.24.144.164:8848
         file-extension: yaml
-        namespace: 4dkankan-test
+        namespace: 4dkankan-v4-dev
         extension-configs:
           - data-id: 4dkankan-center-ucenter.yaml
             group: DEFAULT_GROUP
             refresh: true
         shared-configs:
 
-          - data-id: common-redis-config-52.yaml
+          - data-id: common-redis-config.yaml
             group: DEFAULT_GROUP
             refresh: true
 
@@ -21,7 +21,7 @@ spring:
             group: DEFAULT_GROUP
             refresh: true
 
-          - data-id: other-config.yaml
+          - data-id: common-config.yaml
             group: DEFAULT_GROUP
             refresh: true
 
@@ -29,10 +29,6 @@ spring:
             group: DEFAULT_GROUP
             refresh: true
 
-          - data-id: common-config.yaml
-            group: DEFAULT_GROUP
-            refresh: true
-
           - data-id: forest-config.yaml
             group: DEFAULT_GROUP
             refresh: true

+ 1 - 1
src/main/resources/logback-spring.xml

@@ -195,7 +195,7 @@
 			<onMismatch>DENY</onMismatch>
 		</filter>
 	</appender>
-	<logger name="visitLog" level="INFO" additivity="true">
+	<logger name="visitLog" level="DEBUG" additivity="true">
 		<appender-ref ref="VISIT_FILE"/>
 	</logger>
 

+ 5 - 0
src/main/resources/mapper/ucenter/MailTemplateMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.ucenter.mapper.IMailTemplateMapper">
+
+</mapper>