|
@@ -11,7 +11,6 @@ import (
|
|
|
"fmt"
|
|
|
"github.com/google/uuid"
|
|
|
"html"
|
|
|
- "io/fs"
|
|
|
"log"
|
|
|
"os"
|
|
|
"path"
|
|
@@ -36,8 +35,9 @@ func ListenMail() {
|
|
|
//Fix()
|
|
|
//return
|
|
|
lockListenEmail.Lock()
|
|
|
+
|
|
|
// 目录创建
|
|
|
- _ = ensureDirExists(fmt.Sprintf("%s%s", global.CONFIG.Serve.StaticDir, `file`))
|
|
|
+ _ = utils.EnsureDirExists(fmt.Sprintf("%s%s", global.CONFIG.Serve.StaticDir, `file`))
|
|
|
|
|
|
mailMessageChan := make(chan mail.MailMessage, 5) // 创建一个通道,用于接收邮件消息
|
|
|
mailMessageDoneChan := make(chan bool, 1) // 创建一个通道,用于接收邮件消息
|
|
@@ -119,6 +119,12 @@ func afterByListen(mailMessageChan chan mail.MailMessage, mailMessageDoneChan ch
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// handleMailMessage
|
|
|
+// @Description: 邮箱处理
|
|
|
+// @author: Roc
|
|
|
+// @datetime 2025-04-28 14:08:23
|
|
|
+// @param emailMessage mail.MailMessage
|
|
|
+// @return err error
|
|
|
func handleMailMessage(emailMessage mail.MailMessage) (err error) {
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
@@ -220,48 +226,62 @@ func handleMailMessage(emailMessage mail.MailMessage) (err error) {
|
|
|
for _, v := range ruleList {
|
|
|
tmpTitle := strings.ToLower(emailMessage.Title)
|
|
|
rule := strings.ToLower(v.Rule)
|
|
|
- if strings.Contains(tmpTitle, rule) {
|
|
|
- title = v.Title
|
|
|
- abstract = v.Abstract
|
|
|
- classifyId = v.ClassifyId
|
|
|
- classify, e := report.GetClassifyByClassifyId(v.ClassifyId)
|
|
|
- if e != nil {
|
|
|
- err = e
|
|
|
- global.FILE_LOG.Error("获取分类失败:", err)
|
|
|
- return
|
|
|
+
|
|
|
+ // 规则类型校验
|
|
|
+ switch v.RuleType {
|
|
|
+ case `email`: // 邮箱号匹配
|
|
|
+ if strings.ToLower(emailMessage.FromAddress) != rule { // 如果邮箱号与规则不匹配,那么就过滤该规则
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ default: // 默认标题匹配
|
|
|
+ if !strings.Contains(tmpTitle, rule) { // 如果标题与规则不匹配,那么就过滤该规则
|
|
|
+ continue
|
|
|
}
|
|
|
- classifyName = classify.ClassifyName
|
|
|
-
|
|
|
- // 特殊规则
|
|
|
- //if strings.Contains(title, "海外分公司市场信息月报") || strings.Contains(title, "区域市场信息月报") {
|
|
|
- // if emailMessage.From == "report.pcanalyst00@petrochina-usa.com" {
|
|
|
- // sysUserName = "PCI"
|
|
|
- // break
|
|
|
- // } else {
|
|
|
- // v.Author = emailMessage.From
|
|
|
- // }
|
|
|
- //}
|
|
|
-
|
|
|
- if v.Author != `` {
|
|
|
- if strings.Contains(v.Author, "@") {
|
|
|
- sysUser, tmpErr := eta.GetSysUserByEmail(v.Author)
|
|
|
- if tmpErr != nil && !utils.IsErrNoRow(tmpErr) {
|
|
|
- err = tmpErr
|
|
|
- return
|
|
|
- }
|
|
|
- if sysUser.AdminId > 0 {
|
|
|
- sysUserId = sysUser.AdminId
|
|
|
- sysUserName = sysUser.RealName
|
|
|
- } else {
|
|
|
- sysUserName = v.Author
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 配置了标题,那么就使用,否则就使用原标题
|
|
|
+ if v.Title != `` {
|
|
|
+ title = v.Title
|
|
|
+ }
|
|
|
+ abstract = v.Abstract
|
|
|
+ classifyId = v.ClassifyId
|
|
|
+ classify, e := report.GetClassifyByClassifyId(v.ClassifyId)
|
|
|
+ if e != nil {
|
|
|
+ err = e
|
|
|
+ global.FILE_LOG.Error("获取分类失败:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ classifyName = classify.ClassifyName
|
|
|
+
|
|
|
+ // 特殊规则
|
|
|
+ //if strings.Contains(title, "海外分公司市场信息月报") || strings.Contains(title, "区域市场信息月报") {
|
|
|
+ // if emailMessage.From == "report.pcanalyst00@petrochina-usa.com" {
|
|
|
+ // sysUserName = "PCI"
|
|
|
+ // break
|
|
|
+ // } else {
|
|
|
+ // v.Author = emailMessage.From
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+
|
|
|
+ if v.Author != `` {
|
|
|
+ if strings.Contains(v.Author, "@") {
|
|
|
+ sysUser, tmpErr := eta.GetSysUserByEmail(v.Author)
|
|
|
+ if tmpErr != nil && !utils.IsErrNoRow(tmpErr) {
|
|
|
+ err = tmpErr
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if sysUser.AdminId > 0 {
|
|
|
+ sysUserId = sysUser.AdminId
|
|
|
+ sysUserName = sysUser.RealName
|
|
|
} else {
|
|
|
sysUserName = v.Author
|
|
|
}
|
|
|
+ } else {
|
|
|
+ sysUserName = v.Author
|
|
|
}
|
|
|
-
|
|
|
- break
|
|
|
}
|
|
|
+
|
|
|
+ break
|
|
|
}
|
|
|
|
|
|
for k, v := range emailMessage.Resources {
|
|
@@ -343,16 +363,3 @@ func handleMailMessage(emailMessage mail.MailMessage) (err error) {
|
|
|
|
|
|
return
|
|
|
}
|
|
|
-func ensureDirExists(dirPath string) error {
|
|
|
- info, err := os.Stat(dirPath)
|
|
|
- if err == nil {
|
|
|
- if info.IsDir() {
|
|
|
- return nil // 目录已存在
|
|
|
- }
|
|
|
- return fmt.Errorf("path '%s' exists but is not a directory", dirPath)
|
|
|
- }
|
|
|
- if os.IsNotExist(err) {
|
|
|
- return os.MkdirAll(dirPath, fs.ModePerm)
|
|
|
- }
|
|
|
- return err
|
|
|
-}
|