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  }