Skip to content

Commit a6bbc98

Browse files
feat(GODT-2201): RFC5322 AddressList parser rewritten in Go
1 parent 09ab705 commit a6bbc98

16 files changed

Lines changed: 2622 additions & 19 deletions

imap/envelope.go

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package imap
22

33
import (
4+
"github.com/ProtonMail/gluon/rfc5322"
45
"net/mail"
56
"strings"
67

7-
"github.com/ProtonMail/gluon/internal/parser"
88
"github.com/ProtonMail/gluon/rfc822"
99
"github.com/sirupsen/logrus"
1010
)
@@ -29,47 +29,44 @@ func envelope(header *rfc822.Header, c *paramList, writer parListWriter) error {
2929
addString(writer, header.Get("Date")).
3030
addString(writer, header.Get("Subject"))
3131

32-
addressParser := parser.NewRFC5322AddressListParser()
33-
defer addressParser.Close()
34-
3532
if v, ok := header.GetChecked("From"); !ok {
3633
fields.addString(writer, "")
3734
} else {
38-
fields.addAddresses(writer, tryParseAddressList(addressParser, v))
35+
fields.addAddresses(writer, tryParseAddressList(v))
3936
}
4037

4138
if v, ok := header.GetChecked("Sender"); ok {
42-
fields.addAddresses(writer, tryParseAddressList(addressParser, v))
39+
fields.addAddresses(writer, tryParseAddressList(v))
4340
} else if v, ok := header.GetChecked("From"); ok {
44-
fields.addAddresses(writer, tryParseAddressList(addressParser, v))
41+
fields.addAddresses(writer, tryParseAddressList(v))
4542
} else {
4643
fields.addString(writer, "")
4744
}
4845

4946
if v, ok := header.GetChecked("Reply-To"); ok {
50-
fields.addAddresses(writer, tryParseAddressList(addressParser, v))
47+
fields.addAddresses(writer, tryParseAddressList(v))
5148
} else if v, ok := header.GetChecked("From"); ok {
52-
fields.addAddresses(writer, tryParseAddressList(addressParser, v))
49+
fields.addAddresses(writer, tryParseAddressList(v))
5350
} else {
5451
fields.addString(writer, "")
5552
}
5653

5754
if v, ok := header.GetChecked("To"); !ok {
5855
fields.addString(writer, "")
5956
} else {
60-
fields.addAddresses(writer, tryParseAddressList(addressParser, v))
57+
fields.addAddresses(writer, tryParseAddressList(v))
6158
}
6259

6360
if v, ok := header.GetChecked("Cc"); !ok {
6461
fields.addString(writer, "")
6562
} else {
66-
fields.addAddresses(writer, tryParseAddressList(addressParser, v))
63+
fields.addAddresses(writer, tryParseAddressList(v))
6764
}
6865

6966
if v, ok := header.GetChecked("Bcc"); !ok {
7067
fields.addString(writer, "")
7168
} else {
72-
fields.addAddresses(writer, tryParseAddressList(addressParser, v))
69+
fields.addAddresses(writer, tryParseAddressList(v))
7370
}
7471

7572
fields.addString(writer, header.Get("In-Reply-To"))
@@ -79,8 +76,8 @@ func envelope(header *rfc822.Header, c *paramList, writer parListWriter) error {
7976
return nil
8077
}
8178

82-
func tryParseAddressList(parser *parser.RFC5322AddressListParser, val string) []*mail.Address {
83-
addr, err := parser.Parse(val)
79+
func tryParseAddressList(val string) []*mail.Address {
80+
addr, err := rfc5322.ParseAddressList(val)
8481
if err != nil {
8582
logrus.WithError(err).Error("Failed to parse address")
8683
return []*mail.Address{{Name: val}}

0 commit comments

Comments
 (0)