aboutsummaryrefslogtreecommitdiff
path: root/services/email.go
blob: 36ae5f6fb3ede9d1b2691dd9d8168992d7db22ca (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
30
31
package services

import (
	"dove/messages"
	"dove/utils/email"
	"dove/utils/logger"
)

func ProcessEmail(rawMessage []byte, recipientAddresses []string) error {
	parsedEmail, parseError := email.Parse(rawMessage)
	if parseError != nil {
		logger.Errorf(LOG_PREFIX, messages.EmailParseFailed, parseError)
		return parseError
	}

	mailboxes := ResolveMailboxes(recipientAddresses)
	if len(mailboxes) == 0 {
		return nil
	}

	for _, mailbox := range mailboxes {
		if storeError := storeEmailForMailbox(rawMessage, parsedEmail, mailbox); storeError != nil {
			logger.Errorf(LOG_PREFIX, messages.EmailStoreFailed, storeError)
			return storeError
		}
	}

	logger.Infof(LOG_PREFIX, messages.EmailProcessed, len(mailboxes))

	return nil
}