mail icon indicating copy to clipboard operation
mail copied to clipboard

Attachment is incorrectly added to the email which has html and text part

Open ibalosh opened this issue 3 years ago • 2 comments

In the example in the readme file there is this code snippet:

@mail = Mail.new do
  to      '[email protected]'
  from    'Mikel Lindsaar <[email protected]>'
  subject 'First multipart email sent with Mail'

  text_part do
    body 'Here is the attachment you wanted'
  end

  html_part do
    content_type 'text/html; charset=UTF-8'
    body '<h1>Funky Title</h1><p>Here is the attachment you wanted</p>'
  end

  add_file '/path/to/myfile.pdf'
end

this snippet would generate an email which would look something like this:

Date: Wed, 02 Nov 2022 12:39:14 +0100
From: Mikel Lindsaar <[email protected]>
To: [email protected]
Message-ID: <[email protected]>
Subject: First multipart email sent with Mail
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="--==_mimepart_636256ddc87d7_bfc52f8-4b1";
 charset=UTF-8
Content-Transfer-Encoding: 7bit


----==_mimepart_636256ddc87d7_bfc52f8-4b1
Content-Type: text/plain;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

Here is the attachment you wanted
----==_mimepart_636256ddc87d7_bfc52f8-4b1
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

<h1>Funky Title</h1><p>Here is the attachment you wanted</p>
----==_mimepart_636256ddc87d7_bfc52f8-4b1
Content-Type: image/png;
 filename=postmark.png
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename=postmark.png
Content-ID: <[email protected]>

iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAMAAAAJixmgAAABU1BMVEUAAAD+
/v77+/v4+PjNzc3R0dHNzc3w8PDl5eX4+Pj9/f37+/v+/v7Nzc3W1tb8/Pzi
4uLNzc3W1tb+/v77+/vNzc3S0tL////Ozs7+/v7Nzc39/f3Z2dnNzc319fXO...

Judging by RFC 2046 the email should have been generated with structure that looks something like this:

  • multipart/mixed
    • multipart/alternative
      • text/plain
      • text/html
    • attachment

while the structure is:

  • multipart/alternative
    • text/plain
    • text/html
    • attachment

which seems wrong since RFC says:

The multipart/alternative type is syntactically identical to multipart/mixed, but the semantics are different. In particular, each of the parts is an "alternative" version of the same information. [...] In general, the best choice is the LAST part of a type supported by the recipient system's local environment.

by my understanding, multiplart/alternative is mostly used for viewing alternative representation of content html, text, or something else, while attachment is not fitting this case.

I have reproduced this with mail.gem version 2.7.1

ibalosh avatar Nov 02 '22 11:11 ibalosh

@ibalosh I think you're just relying on the default simple behaviour, and you'll have to force the content-types and parts if you want that structure; a bit further into the readme you can find samples on how to use multipart/mixed, multipart/related, and multipart/alternative: https://github.com/mikel/mail/blob/master/README.md#writing-and-sending-a-multipartalternative-html-and-text-email

dlouzan avatar Dec 27 '22 11:12 dlouzan

@dlouzan thank you for reply. I agree, that is how I am creating multipart messages, using something like the example you shared, so I can have proper structure in the email. I am not using the simple example.

Still though, the incorrect placements I shared is generated by example which is in the readme file. If that's not how email should be created, it should not be there at all.

ibalosh avatar Jan 17 '23 09:01 ibalosh