|
@@ -19,14 +19,14 @@ import (
|
|
)
|
|
)
|
|
|
|
|
|
type MailMessage struct {
|
|
type MailMessage struct {
|
|
- Date time.Time `description:"收件时间"`
|
|
+ Date time.Time `description:"收件时间"`
|
|
- Uid uint32 `description:"该邮件在邮箱中的唯一id"`
|
|
+ Uid uint32 `description:"该邮件在邮箱中的唯一id"`
|
|
- FromEmail string `description:"发件人邮箱"`
|
|
+ FromAddress string `description:"发件人邮箱"`
|
|
- From string `description:"发件人名称"`
|
|
+ From string `description:"发件人名称"`
|
|
- Title string `description:"邮件标题"`
|
|
+ Title string `description:"邮件标题"`
|
|
- Content string `description:"邮件主体正文"`
|
|
+ Content string `description:"邮件主体正文"`
|
|
- Resources map[string]string `description:"正文内嵌资源"`
|
|
+ Resources map[string]string `description:"正文内嵌资源"`
|
|
- Attachment map[string]string `description:"附件资源"`
|
|
+ Attachment map[string]string `description:"附件资源"`
|
|
}
|
|
}
|
|
|
|
|
|
func ListenMail(mailAddress, folder, userName, password string, readBatchSize, fromEmailIndex int, mailMessageChan chan MailMessage, mailMessageDoneChan chan bool) (err error) {
|
|
func ListenMail(mailAddress, folder, userName, password string, readBatchSize, fromEmailIndex int, mailMessageChan chan MailMessage, mailMessageDoneChan chan bool) (err error) {
|
|
@@ -114,6 +114,7 @@ func ListenMail(mailAddress, folder, userName, password string, readBatchSize, f
|
|
from = to - maxNum + 1
|
|
from = to - maxNum + 1
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
|
|
step := uint32(5)
|
|
step := uint32(5)
|
|
for i := from; i <= to; {
|
|
for i := from; i <= to; {
|
|
@@ -160,14 +161,16 @@ func ListenMail(mailAddress, folder, userName, password string, readBatchSize, f
|
|
os.Remove(v)
|
|
os.Remove(v)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- global.FILE_LOG.Fatalf("读取邮件内容时出现错误:%v \n", tmpErr)
|
|
+ global.FILE_LOG.Errorf("读取邮件内容时出现错误:%v \n", tmpErr)
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
-
|
|
+
|
|
- if isRead {
|
|
+ if !isRead {
|
|
-
|
|
+ continue
|
|
- mailMessageChan <- emailMessage
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ mailMessageChan <- emailMessage
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -180,119 +183,6 @@ func ListenMail(mailAddress, folder, userName, password string, readBatchSize, f
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
|
|
func readEveryMsg(msg *imap.Message) (emailMessage MailMessage, ok bool, err error) {
|
|
func readEveryMsg(msg *imap.Message) (emailMessage MailMessage, ok bool, err error) {
|
|
ok = true
|
|
ok = true
|
|
@@ -337,15 +227,23 @@ func readEveryMsg(msg *imap.Message) (emailMessage MailMessage, ok bool, err err
|
|
|
|
|
|
|
|
|
|
{
|
|
{
|
|
- from, err := mr.Header.AddressList("From")
|
|
+ fromStr := mr.Header.Get("From")
|
|
- if err != nil {
|
|
+ fmt.Println(fromStr)
|
|
- log.Println("发件人 异常:", err.Error())
|
|
+
|
|
- }
|
|
+ if !strings.Contains(fromStr, "@") {
|
|
- if len(from) > 0 {
|
|
+ emailMessage.FromAddress = fromStr
|
|
- emailMessage.FromEmail = from[0].Address
|
|
+ emailMessage.From = fromStr
|
|
- emailMessage.From = from[0].Name
|
|
+ } else {
|
|
-
|
|
+ from, tmpErr := mr.Header.AddressList("From")
|
|
-
|
|
+ if tmpErr != nil {
|
|
|
|
+ log.Println("发件人 异常:", err.Error())
|
|
|
|
+ }
|
|
|
|
+ if len(from) > 0 {
|
|
|
|
+ emailMessage.FromAddress = from[0].Address
|
|
|
|
+ emailMessage.From = from[0].Name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -479,7 +377,7 @@ func isIgnore(emailMessage MailMessage) bool {
|
|
lowerFrom := strings.ToLower(emailMessage.From)
|
|
lowerFrom := strings.ToLower(emailMessage.From)
|
|
for _, email := range global.CONFIG.Email.IgnoreEmail {
|
|
for _, email := range global.CONFIG.Email.IgnoreEmail {
|
|
if utils.ContainsWholeWord(lowerFrom, email) {
|
|
if utils.ContainsWholeWord(lowerFrom, email) {
|
|
- global.FILE_LOG.Infof("发件人包含%s,过滤掉,标题:%s", email, emailMessage.From)
|
|
+ global.FILE_LOG.Infof("发件人包含%s,过滤掉,发件人:%s;标题:%s;所属下标:%d", email, emailMessage.From, emailMessage.Title, emailMessage.Uid)
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -487,23 +385,23 @@ func isIgnore(emailMessage MailMessage) bool {
|
|
|
|
|
|
for _, email := range global.CONFIG.Email.IgnoreEmailCaseSensitive {
|
|
for _, email := range global.CONFIG.Email.IgnoreEmailCaseSensitive {
|
|
if utils.ContainsWholeWord(emailMessage.From, email) {
|
|
if utils.ContainsWholeWord(emailMessage.From, email) {
|
|
- global.FILE_LOG.Infof("发件人包含%s,过滤掉,标题:%s", email, emailMessage.From)
|
|
+ global.FILE_LOG.Infof("发件人包含%s,过滤掉,发件人:%s;标题:%s;所属下标:%d", email, emailMessage.From, emailMessage.Title, emailMessage.Uid)
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
+
|
|
- lowerFromAddress := strings.ToLower(emailMessage.FromEmail)
|
|
+ lowerFromAddress := strings.ToLower(emailMessage.FromAddress)
|
|
for _, emailAddress := range global.CONFIG.Email.IgnoreEmailAddress {
|
|
for _, emailAddress := range global.CONFIG.Email.IgnoreEmailAddress {
|
|
if utils.ContainsWholeWord(lowerFromAddress, emailAddress) {
|
|
if utils.ContainsWholeWord(lowerFromAddress, emailAddress) {
|
|
- global.FILE_LOG.Infof("发件人邮箱包含%s,过滤掉,标题:%s", emailAddress, emailMessage.FromEmail)
|
|
+ global.FILE_LOG.Infof("发件人邮箱包含%s,过滤掉,发件人邮箱地址:%s;标题:%s;所属下标:%d", emailAddress, emailMessage.FromAddress, emailMessage.Title, emailMessage.Uid)
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
+
|
|
for _, emailAddress := range global.CONFIG.Email.IgnoreEmailAddressCaseSensitive {
|
|
for _, emailAddress := range global.CONFIG.Email.IgnoreEmailAddressCaseSensitive {
|
|
- if utils.ContainsWholeWord(emailMessage.FromEmail, emailAddress) {
|
|
+ if utils.ContainsWholeWord(emailMessage.FromAddress, emailAddress) {
|
|
- global.FILE_LOG.Infof("发件人邮箱包含%s,过滤掉,标题:%s", emailAddress, emailMessage.FromEmail)
|
|
+ global.FILE_LOG.Infof("发件人邮箱包含%s,过滤掉,发件人邮箱地址:%s;标题:%s;所属下标:%d", emailAddress, emailMessage.FromAddress, emailMessage.Title, emailMessage.Uid)
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -512,7 +410,7 @@ func isIgnore(emailMessage MailMessage) bool {
|
|
lowerTitle := strings.ToLower(emailMessage.Title)
|
|
lowerTitle := strings.ToLower(emailMessage.Title)
|
|
for _, title := range global.CONFIG.Email.IgnoreEmailTitle {
|
|
for _, title := range global.CONFIG.Email.IgnoreEmailTitle {
|
|
if utils.ContainsWholeWord(lowerTitle, title) {
|
|
if utils.ContainsWholeWord(lowerTitle, title) {
|
|
- global.FILE_LOG.Infof("邮件标题包含%s,过滤掉,标题:%s", title, emailMessage.Title)
|
|
+ global.FILE_LOG.Infof("邮件标题包含%s,过滤掉,标题:%s,所属下标:%d", title, emailMessage.Title, emailMessage.Uid)
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -520,7 +418,7 @@ func isIgnore(emailMessage MailMessage) bool {
|
|
|
|
|
|
for _, title := range global.CONFIG.Email.IgnoreEmailTitleCaseSensitive {
|
|
for _, title := range global.CONFIG.Email.IgnoreEmailTitleCaseSensitive {
|
|
if utils.ContainsWholeWord(emailMessage.Title, title) {
|
|
if utils.ContainsWholeWord(emailMessage.Title, title) {
|
|
- global.FILE_LOG.Infof("邮件标题包含%s,过滤掉,标题:%s", title, emailMessage.Title)
|
|
+ global.FILE_LOG.Infof("邮件标题包含%s,过滤掉,标题:%s,所属下标:%d", title, emailMessage.Title, emailMessage.Uid)
|
|
return true
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
}
|