1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-17 17:47:03 +00:00

smtp: Use enmime.DecodeHeaders for better performance (#413)

Signed-off-by: James Hillyerd <james@hillyerd.com>
This commit is contained in:
James Hillyerd
2023-10-30 17:10:09 -07:00
committed by GitHub
parent 163a84f353
commit b655c0cc11

View File

@@ -48,18 +48,16 @@ func (s *StoreManager) Deliver(
prefix string, prefix string,
source []byte, source []byte,
) (string, error) { ) (string, error) {
// TODO enmime is too heavy for this step, only need header. header, err := enmime.DecodeHeaders(source)
// Go's header parsing isn't good enough, so this is blocked on enmime issue #64.
env, err := enmime.ReadEnvelope(bytes.NewReader(source))
if err != nil { if err != nil {
return "", err return "", err
} }
fromaddr, err := env.AddressList("From") fromaddr, err := enmime.ParseAddressList(header.Get("From"))
if err != nil || len(fromaddr) == 0 { if err != nil || len(fromaddr) == 0 {
fromaddr = make([]*mail.Address, 1) fromaddr = make([]*mail.Address, 1)
fromaddr[0] = &from.Address fromaddr[0] = &from.Address
} }
toaddr, err := env.AddressList("To") toaddr, err := enmime.ParseAddressList(header.Get("To"))
if err != nil { if err != nil {
toaddr = make([]*mail.Address, len(recipients)) toaddr = make([]*mail.Address, len(recipients))
for i, torecip := range recipients { for i, torecip := range recipients {
@@ -74,7 +72,7 @@ func (s *StoreManager) Deliver(
From: fromaddr[0], From: fromaddr[0],
To: toaddr, To: toaddr,
Date: time.Now(), Date: time.Now(),
Subject: env.GetHeader("Subject"), Subject: header.Get("Subject"),
}, },
Reader: io.MultiReader(strings.NewReader(prefix), bytes.NewReader(source)), Reader: io.MultiReader(strings.NewReader(prefix), bytes.NewReader(source)),
} }