mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 01:27:01 +00:00
Add the 821.From / return-path of an email to the stored message (#560)
as a Return-Path: header. This is visible in the source view and as a header via the REST API. Signed-off-by: Steve Atkins <steve@wordtothewise.com>
This commit is contained in:
@@ -112,7 +112,7 @@ func (s *StoreManager) Deliver(
|
||||
for _, mb := range inbound.Mailboxes {
|
||||
// Append recipient and timestamp to generated Received header.
|
||||
recvd := fmt.Sprintf("%s for <%s>; %s\r\n", recvdHeader, mb, tstamp)
|
||||
|
||||
returnPath := fmt.Sprintf("Return-Path: <%s>\r\n", from.Address.Address)
|
||||
// Deliver message.
|
||||
logger.Debug().Str("mailbox", mb).Msg("Delivering message")
|
||||
delivery := &Delivery{
|
||||
@@ -124,7 +124,7 @@ func (s *StoreManager) Deliver(
|
||||
Subject: inbound.Subject,
|
||||
Size: inbound.Size,
|
||||
},
|
||||
Reader: io.MultiReader(strings.NewReader(recvd), bytes.NewReader(source)),
|
||||
Reader: io.MultiReader(strings.NewReader(returnPath), strings.NewReader(recvd), bytes.NewReader(source)),
|
||||
}
|
||||
id, err := s.Store.AddMessage(delivery)
|
||||
if err != nil {
|
||||
|
||||
@@ -501,6 +501,38 @@ func TestMailboxForAddress(t *testing.T) {
|
||||
assert.Equal(t, addr, got, "FullNaming mode should return a full address for mailbox")
|
||||
}
|
||||
|
||||
func TestReturnPath(t *testing.T) {
|
||||
sm, _ := testStoreManager()
|
||||
|
||||
recvdHeader := "Received: xyz\n"
|
||||
msgSource := `From: from@example.com
|
||||
To: u1@example.com
|
||||
Subject: return path
|
||||
|
||||
test email`
|
||||
|
||||
// Deliver message.
|
||||
origin, _ := sm.AddrPolicy.ParseOrigin("821from@example.com")
|
||||
recipient, _ := sm.AddrPolicy.NewRecipient("u1@example.com")
|
||||
err := sm.Deliver(origin, []*policy.Recipient{recipient}, recvdHeader, []byte(msgSource))
|
||||
require.NoError(t, err)
|
||||
|
||||
// Find message ID.
|
||||
msgs, err := sm.GetMetadata("u1@example.com")
|
||||
require.NoError(t, err, "Failed to read mailbox")
|
||||
require.Len(t, msgs, 1, "Unexpected mailbox len")
|
||||
id := msgs[0].ID
|
||||
|
||||
// Read back and verify source.
|
||||
r, err := sm.SourceReader("u1@example.com", id)
|
||||
require.NoError(t, err, "SourceReader must succeed")
|
||||
gotBytes, err := io.ReadAll(r)
|
||||
require.NoError(t, err, "Failed to read source")
|
||||
|
||||
got := string(gotBytes)
|
||||
assert.Contains(t, got, "Return-Path: <821from@example.com>\r\n", "Source should contain return-path")
|
||||
}
|
||||
|
||||
// Returns an empty StoreManager and extension Host pair, configured for testing.
|
||||
func testStoreManager() (*message.StoreManager, *extension.Host) {
|
||||
extHost := extension.NewHost()
|
||||
|
||||
2
pkg/test/testdata/basic.golden
vendored
2
pkg/test/testdata/basic.golden
vendored
@@ -2,7 +2,7 @@ Mailbox: recipient
|
||||
From: <fromuser@inbucket.org>
|
||||
To: [<recipient@inbucket.org>]
|
||||
Subject: basic subject
|
||||
Size: 204
|
||||
Size: 242
|
||||
|
||||
BODY TEXT:
|
||||
Basic message.
|
||||
|
||||
2
pkg/test/testdata/encodedheader.golden
vendored
2
pkg/test/testdata/encodedheader.golden
vendored
@@ -2,7 +2,7 @@ Mailbox: recipient
|
||||
From: X-äéß Y-äéß <fromuser@inbucket.org>
|
||||
To: [Test of ȇɲʢȯȡɪɴʛ <recipient@inbucket.org>]
|
||||
Subject: Test of ȇɲʢȯȡɪɴʛ
|
||||
Size: 338
|
||||
Size: 376
|
||||
|
||||
BODY TEXT:
|
||||
Basic message.
|
||||
|
||||
2
pkg/test/testdata/fullname.golden
vendored
2
pkg/test/testdata/fullname.golden
vendored
@@ -2,7 +2,7 @@ Mailbox: recipient
|
||||
From: From User <fromuser@inbucket.org>
|
||||
To: [Rec I. Pient <recipient@inbucket.org>]
|
||||
Subject: basic subject
|
||||
Size: 233
|
||||
Size: 271
|
||||
|
||||
BODY TEXT:
|
||||
Basic message.
|
||||
|
||||
2
pkg/test/testdata/no-to-ipv4.golden
vendored
2
pkg/test/testdata/no-to-ipv4.golden
vendored
@@ -2,7 +2,7 @@ Mailbox: ip4recipient
|
||||
From: <fromuser@inbucket.org>
|
||||
To: [<ip4recipient@[192.168.123.123]>]
|
||||
Subject: basic subject
|
||||
Size: 180
|
||||
Size: 218
|
||||
|
||||
BODY TEXT:
|
||||
No-To message.
|
||||
|
||||
2
pkg/test/testdata/no-to-ipv6.golden
vendored
2
pkg/test/testdata/no-to-ipv6.golden
vendored
@@ -2,7 +2,7 @@ Mailbox: ip6recipient
|
||||
From: <fromuser@inbucket.org>
|
||||
To: [<ip6recipient@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334]>]
|
||||
Subject: basic subject
|
||||
Size: 180
|
||||
Size: 218
|
||||
|
||||
BODY TEXT:
|
||||
No-To message.
|
||||
|
||||
Reference in New Issue
Block a user