From b655c0cc11b2e0adf247359f5a1cba1d7fbd296e Mon Sep 17 00:00:00 2001 From: James Hillyerd Date: Mon, 30 Oct 2023 17:10:09 -0700 Subject: [PATCH] smtp: Use enmime.DecodeHeaders for better performance (#413) Signed-off-by: James Hillyerd --- pkg/message/manager.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pkg/message/manager.go b/pkg/message/manager.go index 9e5dde1..7253f7b 100644 --- a/pkg/message/manager.go +++ b/pkg/message/manager.go @@ -48,18 +48,16 @@ func (s *StoreManager) Deliver( prefix string, source []byte, ) (string, error) { - // TODO enmime is too heavy for this step, only need header. - // Go's header parsing isn't good enough, so this is blocked on enmime issue #64. - env, err := enmime.ReadEnvelope(bytes.NewReader(source)) + header, err := enmime.DecodeHeaders(source) if err != nil { return "", err } - fromaddr, err := env.AddressList("From") + fromaddr, err := enmime.ParseAddressList(header.Get("From")) if err != nil || len(fromaddr) == 0 { fromaddr = make([]*mail.Address, 1) fromaddr[0] = &from.Address } - toaddr, err := env.AddressList("To") + toaddr, err := enmime.ParseAddressList(header.Get("To")) if err != nil { toaddr = make([]*mail.Address, len(recipients)) for i, torecip := range recipients { @@ -74,7 +72,7 @@ func (s *StoreManager) Deliver( From: fromaddr[0], To: toaddr, Date: time.Now(), - Subject: env.GetHeader("Subject"), + Subject: header.Get("Subject"), }, Reader: io.MultiReader(strings.NewReader(prefix), bytes.NewReader(source)), }