-
Notifications
You must be signed in to change notification settings - Fork 8
/
parse.go
73 lines (67 loc) · 1.39 KB
/
parse.go
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package mailutil
import (
"net/mail"
"sort"
"strings"
)
type Addresses []*mail.Address
func (addrs Addresses) TrimSpace(trimName, trimAddress bool) {
for i := range addrs {
if trimName {
addrs[i].Name = strings.TrimSpace(addrs[i].Name)
}
if trimAddress {
addrs[i].Address = strings.TrimSpace(addrs[i].Address)
}
}
}
func (addrs Addresses) Strings(smtpOnly, smtpToLower, sortAsc bool) []string {
strs := []string{}
for _, addr := range addrs {
if addr == nil {
continue
}
var str string
if smtpOnly {
if smtpToLower {
str = strings.ToLower(addr.Address)
} else {
str = addr.Address
}
} else {
str = addr.String()
}
strs = append(strs, str)
}
if sortAsc {
sort.Strings(strs)
}
return strs
}
/*
var rxAddressRFC5322Capture = regexp.MustCompile(`<([^><]+?)>`)
// ParseMulti will parse multiple email addresses from a string using
// RFC 5322 angle brackets. `mail.ParseAddressList()` will only handle
// comma delimiters.
func ParseMulti(input string) (Addresses, error) {
addrs := Addresses{}
m := rxAddressRFC5322Capture.FindAllStringSubmatch(input, -1)
if len(m) == 0 {
return addrs, nil
}
for _, mx := range m {
try := strings.TrimSpace(mx[1])
if len(try) == 0 {
continue
}
addr, err := mail.ParseAddress(try)
if err != nil {
return addrs, err
}
if addr != nil {
addrs = append(addrs, addr)
}
}
return addrs, nil
}
*/