diff --git a/pkg/message/rfc5322/benchmark_test.go b/pkg/message/rfc5322/benchmark_test.go
new file mode 100644
index 00000000..ad075c8e
--- /dev/null
+++ b/pkg/message/rfc5322/benchmark_test.go
@@ -0,0 +1,157 @@
+// Copyright (c) 2020 Proton Technologies AG
+//
+// This file is part of ProtonMail Bridge.
+//
+// ProtonMail Bridge is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// ProtonMail Bridge is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with ProtonMail Bridge. If not, see .
+
+package rfc5322
+
+import (
+ "net/mail"
+ "testing"
+)
+
+func BenchmarkStandardSet(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ parseSet(benchStandardSet)
+ }
+}
+
+func BenchmarkStandardSetGolang(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ parseSetGolang(benchStandardSet)
+ }
+}
+
+func BenchmarkEncodedSet(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ parseSet(benchEncodedSet)
+ }
+}
+
+func BenchmarkEncodedSetGolang(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ parseSetGolang(benchEncodedSet)
+ }
+}
+
+func BenchmarkAddressListSet(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ parseSet(benchAddressListSet)
+ }
+}
+
+func BenchmarkAddressListSetGolang(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ parseSetGolang(benchAddressListSet)
+ }
+}
+
+func BenchmarkGroupSet(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ parseSet(benchGroupSet)
+ }
+}
+
+func BenchmarkGroupSetGolang(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ parseSetGolang(benchGroupSet)
+ }
+}
+
+func parseSet(set []string) {
+ for _, addr := range set {
+ _, _ = ParseAddressList(addr)
+ }
+}
+
+func parseSetGolang(set []string) {
+ for _, addr := range set {
+ _, _ = mail.ParseAddressList(addr)
+ }
+}
+
+var benchStandardSet = []string{
+ `user@example.com`,
+ `John Doe `,
+ `Mary Smith `,
+ `"Joe Q. Public" `,
+ `Mary Smith `,
+ `jdoe@example.org`,
+ `Who? `,
+ ``,
+ `"Giant; \"Big\" Box" `,
+ `Pete `,
+ `"Mary Smith: Personal Account" `,
+ `Pete(A nice \) chap) `,
+ `Gogh Fir `,
+ `normal name `,
+ `"comma, name" `,
+ `name (ignore comment)`,
+ `"Mail Robot" <>`,
+ `Michal Hořejšek `,
+ `First Last `,
+ `First Last `,
+ `First Last `,
+ `First Last `,
+ `First Last `,
+ ``,
+ `user@domain `,
+ `First Last < user@domain.com>`,
+ `First Middle @ Last `,
+ `user@domain.com,`,
+ `First Middle "Last" `,
+ `First Middle Last `,
+ `First Middle"Last" `,
+ `First Middle "Last"`,
+ `First "Middle" "Last" `,
+ `First "Middle""Last" `,
+}
+
+var benchEncodedSet = []string{
+ `=?US-ASCII?Q?Keith_Moore?= `,
+ `=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= `,
+ `=?ISO-8859-1?Q?Andr=E9?= Pirard `,
+ `=?ISO-8859-1?Q?Olle_J=E4rnefors?= `,
+ `=?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= `,
+ `Nathaniel Borenstein (=?iso-8859-8?b?7eXs+SDv4SDp7Oj08A==?=)`,
+ `=?UTF-8?B?PEJlemUgam3DqW5hPg==?= `,
+ `First Middle =?utf-8?Q?Last?= `,
+ `First Middle =?utf-8?Q?Last?=`,
+ `First =?utf-8?Q?Middle?= =?utf-8?Q?Last?= `,
+ `First =?utf-8?Q?Middle?==?utf-8?Q?Last?= `,
+ `First "Middle"=?utf-8?Q?Last?= `,
+ `First "Middle" =?utf-8?Q?Last?= `,
+ `First "Middle" =?utf-8?Q?Last?=`,
+ `=?UTF-8?B?PEJlemUgam3DqW5hPg==?= `,
+ `=?utf-8?B?6YCZ5piv5ryi5a2X55qE5LiA5YCL5L6L5a2Q?= `,
+ `=?utf-8?B?8J+MmfCfjbc=?= `,
+ `=?utf-8?B?8J+MmfCfjbc=?= `,
+}
+
+var benchAddressListSet = []string{
+ `Alice , Bob , Eve `,
+ `Ed Jones ,joe@where.test,John `,
+ `name (ignore comment) , (Comment as name) username2@server.com`,
+ `"normal name" , "comma, name" `,
+ `"comma, one" , "comma, two" `,
+ `normal name , (comment)All.(around)address@(the)server.com`,
+ `normal name , All.("comma, in comment")address@(the)server.com`,
+}
+
+var benchGroupSet = []string{
+ `A Group:Ed Jones ,joe@where.test,John ;`,
+ `Undisclosed recipients:;`,
+ `(Empty list)(start)Hidden recipients :(nobody(that I know)) ;`,
+}