1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-19 10:37:01 +00:00

event: Use pointers for InboundMessage addresses (#447)

* event: Use pointers for InboundMessage addresses

To ease conversions to/from MessageMetadata

Signed-off-by: James Hillyerd <james@hillyerd.com>

* message: test StoreManager.MailboxForAddress()

Signed-off-by: James Hillyerd <james@hillyerd.com>

---------

Signed-off-by: James Hillyerd <james@hillyerd.com>
This commit is contained in:
James Hillyerd
2023-11-22 17:28:33 -08:00
committed by GitHub
parent d2121a52a9
commit c1d5d49126
6 changed files with 49 additions and 41 deletions

View File

@@ -57,20 +57,24 @@ func (s *StoreManager) Deliver(
if err != nil {
return err
}
fromaddr, err := enmime.ParseAddressList(header.Get("From"))
if err != nil || len(fromaddr) == 0 {
fromaddr = make([]*mail.Address, 1)
fromaddr[0] = &from.Address
fromAddrs, err := enmime.ParseAddressList(header.Get("From"))
if err != nil || len(fromAddrs) == 0 {
// Failed to parse From header, use SMTP MAIL FROM instead.
fromAddrs = make([]*mail.Address, 1)
fromAddrs[0] = &from.Address
}
toaddr, err := enmime.ParseAddressList(header.Get("To"))
toAddrs, err := enmime.ParseAddressList(header.Get("To"))
if err != nil {
toaddr = make([]*mail.Address, len(recipients))
// Failed to parse To header, use SMTP RCPT TO instead.
toAddrs = make([]*mail.Address, len(recipients))
for i, torecip := range recipients {
toaddr[i] = &torecip.Address
toAddrs[i] = &torecip.Address
}
}
subject := header.Get("Subject")
subject := header.Get("Subject")
now := time.Now()
tstamp := now.UTC().Format(recvdTimeFmt)
@@ -79,14 +83,11 @@ func (s *StoreManager) Deliver(
for i, recip := range recipients {
mailboxes[i] = recip.Mailbox
}
toAddrs := make([]mail.Address, len(toaddr))
for i, addr := range toaddr {
toAddrs[i] = *addr
}
// Construct InboundMessage event and process through extensions.
inbound := &event.InboundMessage{
Mailboxes: mailboxes,
From: *fromaddr[0],
From: fromAddrs[0],
To: toAddrs,
Subject: subject,
Size: int64(len(source)),
@@ -105,13 +106,9 @@ func (s *StoreManager) Deliver(
} else {
// Event response overrides destination mailboxes and address policy.
inbound = extResult
toaddr = make([]*mail.Address, len(inbound.To))
for i := range inbound.To {
toaddr[i] = &inbound.To[i]
}
}
// Deliver to mailboxes.
// Deliver to each mailbox.
for _, mb := range inbound.Mailboxes {
// Append recipient and timestamp to generated Recieved header.
recvd := fmt.Sprintf("%s for <%s>; %s\r\n", recvdHeader, mb, tstamp)
@@ -121,8 +118,8 @@ func (s *StoreManager) Deliver(
delivery := &Delivery{
Meta: event.MessageMetadata{
Mailbox: mb,
From: &inbound.From,
To: toaddr,
From: inbound.From,
To: inbound.To,
Date: now,
Subject: inbound.Subject,
},