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}