1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package mail
- import (
- "errors"
- "eta/eta_email_analysis/global"
- "fmt"
- "github.com/emersion/go-imap"
- "github.com/emersion/go-imap/client"
- "github.com/emersion/go-message/mail"
- "log"
- "strings"
- )
- func ListenMailV2(c *client.Client, index int) (fromAddress, fromName string, err error) {
-
- seqSet := new(imap.SeqSet)
- seqSet.AddRange(uint32(index), uint32(index))
-
-
-
- items := []imap.FetchItem{imap.FetchFlags, imap.FetchEnvelope, imap.FetchRFC822}
-
- messages := make(chan *imap.Message, 5)
- fetchDone := make(chan error, 1)
- go func() {
-
- fetchDone <- c.Fetch(seqSet, items, messages)
- }()
- err = <-fetchDone
- if err != nil {
- global.LOG.Errorf("获取邮件信息出现错误:%v \n", err)
- return
- }
-
-
- for msg := range messages {
- return readEveryMsgV2(msg)
- }
- return
- }
- func readEveryMsgV2(msg *imap.Message) (fromAddress, fromName string, err error) {
-
- r := msg.GetBody(&imap.BodySectionName{})
- if r == nil {
- global.FILE_LOG.Info("服务器没有返回消息内容")
- }
- mr, err := mail.CreateReader(r)
- if err != nil {
-
- err = errors.New(fmt.Sprintf("邮件读取时出现错误:%v \n", err))
- return
- }
-
- {
- fromStr := mr.Header.Get("From")
-
-
- if !strings.Contains(fromStr, "@") {
- fromStr = strings.TrimSpace(fromStr)
- fromStr = strings.TrimPrefix(fromStr, `"`)
- fromStr = strings.TrimSuffix(fromStr, `"`)
-
- fromAddress = fromStr
- fromName = fromStr
- } else {
- from, tmpErr := mr.Header.AddressList("From")
- if tmpErr != nil {
- log.Println("发件人 异常:", err.Error())
- }
- if len(from) > 0 {
- fromAddress = from[0].Address
- fromName = from[0].Name
-
-
- }
- }
- }
- return
- }
|