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
}
|