aboutsummaryrefslogtreecommitdiff
path: root/utils/email/parse.go
blob: 549ac2fb499af153e18fa927927219d875bea19d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package email

import (
	"bytes"

	"github.com/jhillyerd/enmime"
)

func Parse(rawMessage []byte) (*ParsedEmail, error) {
	envelope, parseError := enmime.ReadEnvelope(bytes.NewReader(rawMessage))
	if parseError != nil {
		return nil, parseError
	}

	return &ParsedEmail{
		MessageID:      envelope.GetHeader("Message-ID"),
		FromAddress:    extractAddress(envelope.GetHeader("From")),
		FromName:       extractName(envelope.GetHeader("From")),
		ToAddresses:    extractAddressList(envelope.GetHeader("To")),
		CcAddresses:    extractAddressList(envelope.GetHeader("Cc")),
		BccAddresses:   extractAddressList(envelope.GetHeader("Bcc")),
		ReplyToAddress: envelope.GetHeader("Reply-To"),
		ReturnPath:     envelope.GetHeader("Return-Path"),
		Subject:        envelope.GetHeader("Subject"),
		Snippet:        generateSnippet(envelope.Text),
		Size:           int64(len(rawMessage)),
		Attachments:    extractAttachments(envelope),
	}, nil
}