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:
@@ -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)),
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user