github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/core/utils/importmail/parse.go (about) 1 package importmail 2 3 import ( 4 "errors" 5 "strings" 6 "time" 7 8 "github.com/DusanKasan/parsemail" 9 rd "github.com/benoitkugler/goACVE/server/core/rawdata" 10 ) 11 12 // Mail est un mail importé depuis le message brut (code source) 13 type Mail struct { 14 Content string 15 Received time.Time 16 From string // expéditeur 17 } 18 19 func NewMail(source string) (Mail, error) { 20 mess, err := parsemail.Parse(strings.NewReader(source)) 21 if err != nil { 22 return Mail{}, err 23 } 24 content := mess.TextBody 25 if content == "" { // on essaie avec le HTML 26 content = mess.HTMLBody 27 } 28 received := mess.Date 29 adresses := mess.From 30 if len(adresses) == 0 { 31 return Mail{}, errors.New("missing From adresse") 32 } 33 return Mail{ 34 Content: content, 35 Received: received, 36 From: adresses[0].Address, 37 }, nil 38 } 39 40 // AsMessage crée les éléments correspondant aux méta-données du mail. 41 // Le champ `IdMessage` du contenu doit être mis à jour. 42 func (p Mail) AsMessage(idFacture int64) (rd.Message, rd.MessageMessage) { 43 message := rd.Message{ 44 IdFacture: idFacture, 45 Created: rd.Time(p.Received), 46 Kind: rd.MResponsable, 47 Vu: true, 48 } 49 contenu := rd.MessageMessage{ 50 Contenu: rd.String(p.Content), 51 GuardKind: rd.MResponsable, 52 } 53 return message, contenu 54 }