diff options
author | Julian Swagemakers <julian@swagemakers.org> | 2024-10-23 20:48:04 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2024-10-24 22:13:51 +0200 |
commit | 4f866e6894ef5731193ee88a2c5a5b00c1113de4 (patch) | |
tree | 78ff0065815426d490aeef3369b22b8a8205e5d7 /worker/imap/imap_test.go | |
parent | fc31a5c20032b45d314ecef4c9ebde7fd7f90bc8 (diff) | |
download | aerc-4f866e6894ef5731193ee88a2c5a5b00c1113de4.tar.gz |
imap: strip whitespace from Message-Id and In-Reply-To
Outlook.com is generating fairly long Message-IDs and using folding[0]
to put the ID on a new line. This is resulting in the Message-ID to
contain a leading white space, which is preventing `TrimPrefix` from
removing the less than symbol. When replying the In-Reply-To header will
then contain "< <message-id>" which is not desired and prevents email
clients or lists form correctly associating the email replied to. For
example lore.kernel.org[1]. Trimming tabs, newlines, and spaces from
Message-ID resolves the issue.
[0]: https://datatracker.ietf.org/doc/html/rfc822#section-3.1.1
[1]: https://lore.kernel.org/git/D4U1RWVWEW5D.2T853XSBO1FPA@swagemakers.org/#t
Changelog-fixed: Remove unwanted less than symbol from In-Reply-To
header when Message-ID uses folding.
Signed-off-by: Julian Swagemakers <julian@swagemakers.org>
Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'worker/imap/imap_test.go')
-rw-r--r-- | worker/imap/imap_test.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/worker/imap/imap_test.go b/worker/imap/imap_test.go new file mode 100644 index 00000000..6a0615cb --- /dev/null +++ b/worker/imap/imap_test.go @@ -0,0 +1,51 @@ +package imap + +import ( + "testing" + "time" + + "git.sr.ht/~rjarry/aerc/models" + "github.com/emersion/go-message/mail" + + "github.com/emersion/go-imap" + "github.com/stretchr/testify/assert" +) + +func TestTranslateEnvelope(t *testing.T) { + date, _ := time.Parse("2010-01-31", "1992-10-24") + givenAddress := imap.Address{ + PersonalName: "PERSONAL_NAME", + AtDomainList: "AT_DOMAIN_LIST", + MailboxName: "MAILBOX_NAME", + HostName: "HOST_NAME", + } + givenMessageID := " \r\n\r \t <initial-message-id@with-leading-space>\t\r" + given := imap.Envelope{ + Date: date, + Subject: "Test Subject", + From: []*imap.Address{&givenAddress}, + ReplyTo: []*imap.Address{&givenAddress}, + To: []*imap.Address{&givenAddress}, + Cc: []*imap.Address{&givenAddress}, + Bcc: []*imap.Address{&givenAddress}, + MessageId: givenMessageID, + InReplyTo: givenMessageID, + } + expectedMessageID := "initial-message-id@with-leading-space" + expectedAddress := mail.Address{ + Name: "PERSONAL_NAME", + Address: "MAILBOX_NAME@HOST_NAME", + } + expected := models.Envelope{ + Date: date, + Subject: "Test Subject", + From: []*mail.Address{&expectedAddress}, + ReplyTo: []*mail.Address{&expectedAddress}, + To: []*mail.Address{&expectedAddress}, + Cc: []*mail.Address{&expectedAddress}, + Bcc: []*mail.Address{&expectedAddress}, + MessageId: expectedMessageID, + InReplyTo: expectedMessageID, + } + assert.Equal(t, &expected, translateEnvelope(&given)) +} |