1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-17 09:37:02 +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,
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)),
}