Hi,
> the "=<newline>" when decoded would turn into a newline proper, which is what you have now with transfer-encoding=8bit.
No, this is where you err. Have a look at RFC 2045, ch. 6.7, item (5) "soft line breaks". Content-Transfer-Encoding: quoted-printable only uses some basic ASCII letters directly to represent themselves and the "=" as an escape character. A non-escape line break in the e-mail body is a hard line break and must be displayed to the user as is (i.e. end of paragraph). A line-break preceded by an "=" indicates a soft-line break and must be removed from the text before the text is rendered on the user's screen. Those soft line breaks can also be placed in the middle of a word without introducing a space.
> and I'm not sure where the "double line breaks" are coming from.
Speaking of "double" line breaks is misleading, better call them superfluous annoying line breaks. Assume you have a narrow screen that approximately can display 50 characters and the e-mail body has hard line breaks every 76 characters. Then the email viewer renders a first line of text with 50 characters, then wraps the line, because the right border of the display is reached and the second line which is the rest of the first line of the email body is only half-filled with 26 characters, because the email body contains a hard line break. The result is an email with alternating half-filled lines.
> Yes, one way to "hack it" on the sending side would be to wrap at some larger boundary, not 76 characters. You'd have less wrapping on the receiving side then, but you'd still have it in long sentences
No, you would not, if you would not insert additional hard line breaks anywhere, not after 76 characters, not after 100, never. Only put hard line breaks into the email body where the user who typed the email inserted them by purpose, i.e.usually at the end of a paragraph. However, as I already admitted this is not compliant to any RFC but it works and for example is also the way how the auto-generated emails of this forum are formatted.
So let my sum up what options exists:
Option 1: No additional hard line breaks at all
This option is basically what I discussed last. If a user composed a new email never insert additional hard line breaks into the email body but only keep the line breaks that were introduced by the composer by purpose. This basically means "one paragraph per line". This solution is cheap, simple and works with any charset and any Content-Transfer-Encoding. However, it is not compliant to any RFC which request that no line of an email body must exceed 76 characters.
Pros: simple, cheap solution, "just works"
Cons: incompliant to RFCs
Option 2: The quoted-printable-solution
Prior to format=flowed there has been already a solution to allow the client to re-flow the content as specified by RFC 2045, sec. 6.7 The idea is to indicate "soft" line beaks by a preceding =. This kind of line breaks are no real line breaks that should be considered as a part of the content but line breaks that are only inserted to follow the 76 characters per line limitation. This approach is widely supported and chosen by all major desktop email clients.
Pros: Totally compliant to any RFC, widely supported
Cons: Blow up of data volume because only octets with decimal values of 33 through 60 and 62 through 126 are represented literally, everything else is escaped by = followed by hexadecimal digests
Option 3: The format=flowed-solution
"Modern" alternative to option 2. Any octet can be represented literally, because format=flowed can be combined with Content-Transfer-Encoding: 8bit. Single line breaks indicate "soft" line breaks, i.e. line breaks that are only inserted to adhere to the 76 character limitation; double line breaks indicate "hard" line breaks, i.e. end of paragraph. In some way this resembles the LaTeX approach.
Pros: Compact representation of octets, can be combined with 8-bit encoding, totally compliant to any RFC
Cons: Not widely supported, most e-mail clients to not understand the format=flowed directive