diff --git a/etc/swaks-tests/mime-inline.raw b/etc/swaks-tests/mime-inline.raw new file mode 100644 index 0000000..911885f --- /dev/null +++ b/etc/swaks-tests/mime-inline.raw @@ -0,0 +1,43 @@ +Subject: Inline attachment +From: %FROM_ADDRESS% +To: %TO_ADDRESS% +Message-ID: <1234@example.com> +Date: %DATE% +Content-Type: multipart/mixed; boundary=boundary1 + +--boundary1 +Content-Type: text/html; charset=utf-8 +Content-Transfer-Encoding: quoted-printable + + + + +Hello World HTML + + +

Hello World

+ + + +--boundary1 +Content-Type: application/pdf; name=Hello-World.pdf +Content-Transfer-Encoding: base64 +Content-Disposition: inline; name=Hello-World.pdf; + filename=Hello-World.pdf + +JVBERi0xLjQKJcK1wrYKCjEgMCBvYmoKPDwvVGl0bGUoSGVsbG8gV29ybGQpL0F1dGhvcihBZHJp +dW0pPj4KZW5kb2JqCgoyIDAgb2JqCjw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAzIDAgUj4+CmVuZG9i +agoKMyAwIG9iago8PC9UeXBlL1BhZ2VzL01lZGlhQm94WzAgMCA1OTUgODQyXS9SZXNvdXJjZXM8 +PC9Gb250PDwvRjEgNCAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4dF0+Pi9LaWRzWzUgMCBSXS9Db3Vu +dCAxPj4KZW5kb2JqCgo0IDAgb2JqCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1R5cGUxL0Jhc2VGb250 +L0hlbHZldGljYS9FbmNvZGluZy9XaW5BbnNpRW5jb2Rpbmc+PgplbmRvYmoKCjUgMCBvYmoKPDwv +VHlwZS9QYWdlL1BhcmVudCAzIDAgUi9Db250ZW50cyA2IDAgUj4+CmVuZG9iagoKNiAwIG9iago8 +PC9MZW5ndGggNTEvRmlsdGVyL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnic03czVDCxUAhJ43IK4TI3 +UjA3MVMISeHS8EjNyclXCM8vyknRVAjJ4nIN4QIA3FcKuwplbmRzdHJlYW0KZW5kb2JqCgp4cmVm +CjAgNwowMDAwMDAwMDAwIDY1NTM2IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAwMDA3MSAw +MDAwMCBuIAowMDAwMDAwMTE3IDAwMDAwIG4gCjAwMDAwMDAyNDIgMDAwMDAgbiAKMDAwMDAwMDMz +MSAwMDAwMCBuIAowMDAwMDAwMzkwIDAwMDAwIG4gCgp0cmFpbGVyCjw8L1NpemUgNy9JbmZvIDEg +MCBSL1Jvb3QgMiAwIFI+PgpzdGFydHhyZWYKNTA5CiUlRU9GCg== + + +--boundary1-- diff --git a/etc/swaks-tests/run-tests.sh b/etc/swaks-tests/run-tests.sh index a6f0f61..660b4ef 100755 --- a/etc/swaks-tests/run-tests.sh +++ b/etc/swaks-tests/run-tests.sh @@ -63,3 +63,6 @@ swaks $* --data mime-errors.raw # IP RCPT domain swaks $* --to="swaks@[127.0.0.1]" --h-Subject: "IPv4 RCPT Address" --body text.txt swaks $* --to="swaks@[IPv6:2001:db8:aaaa:1::100]" --h-Subject: "IPv6 RCPT Address" --body text.txt + +# Inline attachment test +swaks $* --data mime-inline.raw diff --git a/pkg/message/message.go b/pkg/message/message.go index ea3616d..a6b5f52 100644 --- a/pkg/message/message.go +++ b/pkg/message/message.go @@ -28,7 +28,9 @@ func New(m event.MessageMetadata, e *enmime.Envelope) *Message { // Attachments returns the MIME attachments for the message. func (m *Message) Attachments() []*enmime.Part { - return m.env.Attachments + attachments := append([]*enmime.Part{}, m.env.Inlines...) + attachments = append(attachments, m.env.Attachments...) + return attachments } // Header returns the header map for this message. diff --git a/pkg/rest/apiv1_controller_test.go b/pkg/rest/apiv1_controller_test.go index a3bffdf..e7a1fda 100644 --- a/pkg/rest/apiv1_controller_test.go +++ b/pkg/rest/apiv1_controller_test.go @@ -201,6 +201,10 @@ func TestRestMessage(t *testing.T) { FileName: "favicon.png", ContentType: "image/png", }}, + Inlines: []*enmime.Part{{ + FileName: "statement.pdf", + ContentType: "application/pdf", + }}, }, ) mm.AddMessage("good", msg1) @@ -236,10 +240,14 @@ func TestRestMessage(t *testing.T) { decodedStringEquals(t, result, "header/To/[0]", "fred@fish.com") decodedStringEquals(t, result, "header/To/[1]", "keyword@nsa.gov") decodedStringEquals(t, result, "header/From/[0]", "noreply@inbucket.org") - decodedStringEquals(t, result, "attachments/[0]/filename", "favicon.png") - decodedStringEquals(t, result, "attachments/[0]/content-type", "image/png") - decodedStringEquals(t, result, "attachments/[0]/download-link", "http://localhost/serve/mailbox/good/0001/attach/0/favicon.png") - decodedStringEquals(t, result, "attachments/[0]/view-link", "http://localhost/serve/mailbox/good/0001/attach/0/favicon.png") + decodedStringEquals(t, result, "attachments/[0]/filename", "statement.pdf") + decodedStringEquals(t, result, "attachments/[0]/content-type", "application/pdf") + decodedStringEquals(t, result, "attachments/[0]/download-link", "http://localhost/serve/mailbox/good/0001/attach/0/statement.pdf") + decodedStringEquals(t, result, "attachments/[0]/view-link", "http://localhost/serve/mailbox/good/0001/attach/0/statement.pdf") + decodedStringEquals(t, result, "attachments/[1]/filename", "favicon.png") + decodedStringEquals(t, result, "attachments/[1]/content-type", "image/png") + decodedStringEquals(t, result, "attachments/[1]/download-link", "http://localhost/serve/mailbox/good/0001/attach/1/favicon.png") + decodedStringEquals(t, result, "attachments/[1]/view-link", "http://localhost/serve/mailbox/good/0001/attach/1/favicon.png") if t.Failed() { // Wait for handler to finish logging