From 63e272e2700bd04c302d2be2faf9a8d55f52ab71 Mon Sep 17 00:00:00 2001 From: Jakub Date: Thu, 29 Feb 2024 12:21:29 +0100 Subject: [PATCH] feat(GODT-3193): preserve attachment encoding. --- pkg/message/parser.go | 4 ++++ pkg/message/parser_test.go | 11 ++++++++++ .../text_plain_xml_attachment_cp1250.eml | 22 +++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 pkg/message/testdata/text_plain_xml_attachment_cp1250.eml diff --git a/pkg/message/parser.go b/pkg/message/parser.go index 491d3323..f714a6fe 100644 --- a/pkg/message/parser.go +++ b/pkg/message/parser.go @@ -205,6 +205,10 @@ func convertForeignEncodings(p *parser.Parser) error { return p.ConvertMetaCharset() }). RegisterContentTypeHandler("text/.*", func(p *parser.Part) error { + if p.IsAttachment() { + return nil + } + return p.ConvertToUTF8() }). Walk() diff --git a/pkg/message/parser_test.go b/pkg/message/parser_test.go index 6108270e..7aa9e704 100644 --- a/pkg/message/parser_test.go +++ b/pkg/message/parser_test.go @@ -837,6 +837,17 @@ func TestPatchNewLineWithHtmlBreaks(t *testing.T) { } } +func TestParseCp1250Attachment(t *testing.T) { + r := require.New(t) + f := getFileReader("text_plain_xml_attachment_cp1250.eml") + + m, err := Parse(f) + r.NoError(err) + + r.Len(m.Attachments, 1) + r.Equal("text/xml; charset=windows-1250; name=\"cp1250.xml\"", m.Attachments[0].Header.Get("Content-Type")) +} + func getFileReader(filename string) io.Reader { f, err := os.Open(filepath.Join("testdata", filename)) if err != nil { diff --git a/pkg/message/testdata/text_plain_xml_attachment_cp1250.eml b/pkg/message/testdata/text_plain_xml_attachment_cp1250.eml new file mode 100644 index 00000000..3e9b916b --- /dev/null +++ b/pkg/message/testdata/text_plain_xml_attachment_cp1250.eml @@ -0,0 +1,22 @@ +From: Sender +To: Receiver +Content-Type: multipart/mixed; boundary="------------iOaeSk0jVHjMucH3kQFwS1LB" + +This is a multi-part message in MIME format. +--------------iOaeSk0jVHjMucH3kQFwS1LB +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 8bit + +created by me 😎 + +--------------iOaeSk0jVHjMucH3kQFwS1LB +Content-Type: text/xml; charset=windows-1250; name="cp1250.xml" +Content-Disposition: attachment; filename="cp1250.xml" +Content-Transfer-Encoding: 8bit + + + +Horní náměstí +ŠCheckCharsá + +--------------iOaeSk0jVHjMucH3kQFwS1LB--