all repos — postern @ fc287763b9ce6b6f9823e11c0b1173da0446ebc5

Modern mail management

internal/imap/address.go (view raw)

 1package imap
 2
 3import (
 4	"fmt"
 5	"net/mail"
 6	"strings"
 7
 8	"github.com/emersion/go-imap/v2"
 9)
10
11func parseAddressList(s string) ([]imap.Address, error) {
12	if s == "" {
13		return []imap.Address{}, nil
14	}
15
16	addresses, err := mail.ParseAddressList(s)
17	if err != nil {
18		return nil, err
19	}
20
21	result := make([]imap.Address, 0, len(addresses))
22	for _, a := range addresses {
23		atSignPosition := strings.LastIndex(a.Address, "@")
24		if atSignPosition <= 0 { // need at least one character before the '@' sign
25			return nil, fmt.Errorf("invalid address: %s", a.Address)
26		}
27
28		local, host := a.Address[:atSignPosition], a.Address[atSignPosition+1:]
29
30		result = append(result, imap.Address{
31			Name:    a.Name,
32			Mailbox: local,
33			Host:    host,
34		})
35	}
36	return result, nil
37}