|
@@ -35,8 +35,15 @@ func ListenMail() (err error) {
|
|
|
go afterByListen(mailMessageChan, mailMessageDoneChan)
|
|
|
|
|
|
fmt.Println("开始监听邮件")
|
|
|
+
|
|
|
+ emailMessageUID, err := report.GetMaxOutsideReportByEmailMessageId()
|
|
|
+ // 已经存在了,那么就返回
|
|
|
+ if err != nil {
|
|
|
+ global.FILE_LOG.Errorf("获取已入库的最大邮件id失败:%s", err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
mailAddress := fmt.Sprintf("%s:%d", global.CONFIG.Email.Host, global.CONFIG.Email.Port)
|
|
|
- mail.ListenMail(mailAddress, global.CONFIG.Email.Folder, global.CONFIG.Email.UserName, global.CONFIG.Email.Password, global.CONFIG.Email.ReadBatchSize, mailMessageChan, mailMessageDoneChan)
|
|
|
+ mail.ListenMail(mailAddress, global.CONFIG.Email.Folder, global.CONFIG.Email.UserName, global.CONFIG.Email.Password, global.CONFIG.Email.ReadBatchSize, emailMessageUID, mailMessageChan, mailMessageDoneChan)
|
|
|
|
|
|
return
|
|
|
}
|
|
@@ -48,18 +55,18 @@ func afterByListen(mailMessageChan chan mail.MailMessage, mailMessageDoneChan ch
|
|
|
}()
|
|
|
for {
|
|
|
select {
|
|
|
- case mailMessage := <-mailMessageChan:
|
|
|
+ case emailMessage := <-mailMessageChan:
|
|
|
//fmt.Println("读取成功")
|
|
|
- //fmt.Println(mailMessage.Title)
|
|
|
- handleMailMessage(mailMessage)
|
|
|
+ //fmt.Println(emailMessage.Title)
|
|
|
+ handleMailMessage(emailMessage)
|
|
|
case <-time.After(10 * time.Second):
|
|
|
//fmt.Println("监听超时了")
|
|
|
break
|
|
|
case <-mailMessageDoneChan:
|
|
|
fmt.Println("读取完成一轮了")
|
|
|
for len(mailMessageChan) > 0 {
|
|
|
- mailMessage := <-mailMessageChan
|
|
|
- handleMailMessage(mailMessage)
|
|
|
+ emailMessage := <-mailMessageChan
|
|
|
+ handleMailMessage(emailMessage)
|
|
|
}
|
|
|
fmt.Println("结束了")
|
|
|
return
|
|
@@ -67,32 +74,33 @@ func afterByListen(mailMessageChan chan mail.MailMessage, mailMessageDoneChan ch
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func handleMailMessage(mailMessage mail.MailMessage) (err error) {
|
|
|
+func handleMailMessage(emailMessage mail.MailMessage) (err error) {
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
- global.FILE_LOG.Errorf("邮件处理失败,邮件标题:%s,错误原因:%v", mailMessage.Title, err)
|
|
|
+ global.FILE_LOG.Errorf("邮件处理失败,邮件标题:%s,错误原因:%v", emailMessage.Title, err)
|
|
|
}
|
|
|
|
|
|
- for _, v := range mailMessage.Resources {
|
|
|
+ for _, v := range emailMessage.Resources {
|
|
|
os.Remove(v)
|
|
|
}
|
|
|
|
|
|
- for _, v := range mailMessage.Attachment {
|
|
|
+ for _, v := range emailMessage.Attachment {
|
|
|
os.Remove(v)
|
|
|
}
|
|
|
}()
|
|
|
//rootPath := `C:\Users\123\go\src\eta\eta_email_analysis\static\`
|
|
|
ossClient := oss.NewOssClient()
|
|
|
- //fmt.Println(mailMessage.Title)
|
|
|
+ //fmt.Println(emailMessage.Title)
|
|
|
outsideReportAttachmentList := make([]*report.OutsideReportAttachment, 0)
|
|
|
|
|
|
- emailMessageUID := int(mailMessage.Uid)
|
|
|
+ emailMessageUID := int(emailMessage.Uid)
|
|
|
outReport, err := report.GetOutsideReportByEmailMessageId(emailMessageUID)
|
|
|
// 已经存在了,那么就返回
|
|
|
if err == nil {
|
|
|
- fmt.Println("已存在,就不处理了,报告标题:", outReport.Title)
|
|
|
+ global.FILE_LOG.Debugf("已存在,就不处理了,报告标题:%s", outReport.Title)
|
|
|
return
|
|
|
}
|
|
|
+ fmt.Println("开始处理邮件,标题:", emailMessage.Title, ";邮件下标:", emailMessage.Uid)
|
|
|
// sql报错,那么就返回
|
|
|
if err != nil && !utils.IsErrNoRow(err) {
|
|
|
return
|
|
@@ -102,7 +110,7 @@ func handleMailMessage(mailMessage mail.MailMessage) (err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- for k, v := range mailMessage.Resources {
|
|
|
+ for k, v := range emailMessage.Resources {
|
|
|
randStr := utils.GetRandStringNoSpecialChar(28)
|
|
|
ext := path.Ext(v)
|
|
|
fileName := randStr + ext
|
|
@@ -110,16 +118,16 @@ func handleMailMessage(mailMessage mail.MailMessage) (err error) {
|
|
|
resourceUrl, tmpErr := ossClient.UploadFile(fileName, v, "")
|
|
|
//os.Remove(v)
|
|
|
if tmpErr != nil {
|
|
|
- fmt.Println("上传文件失败:", tmpErr)
|
|
|
+ global.FILE_LOG.Error(emailMessage.Title, "- 文件上传文件失败:", tmpErr)
|
|
|
continue
|
|
|
}
|
|
|
tmpK := strings.Replace(k, "<", "cid:", -1)
|
|
|
tmpK = strings.Replace(tmpK, ">", "", -1)
|
|
|
|
|
|
- mailMessage.Content = strings.Replace(mailMessage.Content, fmt.Sprint(tmpK, `"`), fmt.Sprint(resourceUrl, `"`), -1)
|
|
|
+ emailMessage.Content = strings.Replace(emailMessage.Content, fmt.Sprint(tmpK, `"`), fmt.Sprint(resourceUrl, `"`), -1)
|
|
|
}
|
|
|
|
|
|
- for name, v := range mailMessage.Attachment {
|
|
|
+ for name, v := range emailMessage.Attachment {
|
|
|
var fileSize int64
|
|
|
fileInfo, tmpErr := os.Stat(v)
|
|
|
if tmpErr != nil {
|
|
@@ -134,7 +142,7 @@ func handleMailMessage(mailMessage mail.MailMessage) (err error) {
|
|
|
resourceUrl, tmpErr := ossClient.UploadFile(fileName, v, "")
|
|
|
//defer os.Remove(v)
|
|
|
if tmpErr != nil {
|
|
|
- fmt.Println("上传文件失败:", tmpErr)
|
|
|
+ global.FILE_LOG.Error(emailMessage.Title, " - 文件上传文件失败:", tmpErr)
|
|
|
continue
|
|
|
}
|
|
|
outsideReportAttachmentList = append(outsideReportAttachmentList, &report.OutsideReportAttachment{
|
|
@@ -147,19 +155,19 @@ func handleMailMessage(mailMessage mail.MailMessage) (err error) {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- //fileName := fmt.Sprintf("%s%s.%s", rootPath, mailMessage.Title, "html")
|
|
|
+ //fileName := fmt.Sprintf("%s%s.%s", rootPath, emailMessage.Title, "html")
|
|
|
|
|
|
- htmlEscapeBody := html.EscapeString(mailMessage.Content)
|
|
|
+ htmlEscapeBody := html.EscapeString(emailMessage.Content)
|
|
|
//fmt.Println(htmlEscapeBody)
|
|
|
- //err = utils.SaveToFile([]byte(mailMessage.Content), fileName)
|
|
|
+ //err = utils.SaveToFile([]byte(emailMessage.Content), fileName)
|
|
|
//if err != nil {
|
|
|
// fmt.Println(fileName, "生成失败;err:", err)
|
|
|
//}
|
|
|
|
|
|
var sysUserId int
|
|
|
- sysUserName := mailMessage.FromEmail
|
|
|
+ sysUserName := emailMessage.FromEmail
|
|
|
// 查找用户
|
|
|
- if mailMessage.From != `` {
|
|
|
+ if emailMessage.From != `` {
|
|
|
tmpEmailStrList := strings.Split(sysUserName, "<")
|
|
|
if len(tmpEmailStrList) >= 2 {
|
|
|
sysUserName = tmpEmailStrList[1]
|
|
@@ -179,14 +187,14 @@ func handleMailMessage(mailMessage mail.MailMessage) (err error) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- reportUpdateTime := mailMessage.Date
|
|
|
+ reportUpdateTime := emailMessage.Date
|
|
|
if reportUpdateTime.IsZero() {
|
|
|
reportUpdateTime = time.Now()
|
|
|
}
|
|
|
reportInfo := &report.OutsideReport{
|
|
|
OutsideReportID: 0,
|
|
|
Source: 3,
|
|
|
- Title: mailMessage.Title,
|
|
|
+ Title: emailMessage.Title,
|
|
|
Abstract: "",
|
|
|
ClassifyID: 0,
|
|
|
ClassifyName: "",
|