On 1/31/25 17:38, Mark Sapiro wrote:
On 1/31/25 12:14, Schulz wrote:
---- these are the first lines of the .eml:
MIME-Version: 1.0 Date: Tue, 28 Jan 2025 19:31:15 +0000 Content-Type: multipart/mixed; boundary="6efe513a-b2f8-47e5-ace0-b3b6aa5a056c-1" From: "J. Schulz" <js@jslz.de> Message-ID: <17def72e63ed443458a88ec892a17fe01b8a287c@jslz.de> TLS-Required: No Subject: empty, but another att To: it@freie-dorfschule.de
--6efe513a-b2f8-47e5-ace0-b3b6aa5a056c-1 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable
--6efe513a-b2f8-47e5-ace0-b3b6aa5a056c-1 Content-Type: application/pdf; name="someExample.pdf" Content-Disposition: attachment; filename="someExample.pdf" Content-Transfer-Encoding: base64
JVBERi0xLjcKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0 ZURlY29kZT4+CnN0cmVhbQp4nC2NTQvCMBiD7++vCHjz0L7t1q2DMXAfgoeBg4Ln4TpRULEU 9OdbRB4SCISEhcKb5C7E6zqfI9qxoxcYLFhbmMoIXRrYXAlbKARPpy0eNKSWPAa/PsN9jtEv G83Of2Jdy7E79OCmafv/UCJcqHVkCmFRlsmzCm6B3CsohltrVqw545wNF0llSjZRNe5Gg6Pp 9zfhC14SKM4KZW5kc3RyZWFtCmVuZG9iagoKMyAwIG9iagoxNTMKZW5kb2JqCgo3IDAgb2Jq Cjw8L0xlbmd0aCA4IDAgUi9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoMSA5MDc2Pj4Kc3Ry ZWFtCnic5Vh9dFPHlb/zniTLH1iSP4RtGd4zwh9gW7ItTIAa/LAtYbDBso1BAgJ6lmQkYkta SbZj0haTJoGYzyaEtEnOhuajTQgJz5AcTEqBLbs9yTZp04/ddje00G6a3Z4mkO02Pd3TYO+d 0bP5aJKes2f/2yfPmzv3zr33N/feGWmcjA8GIQtGgQfJPyDH5s3K1APAWwAkxz+UFPsiGgfS VwG4V/pi2weeOLPlDwCawwBpr27vH+n7k+ZkC0AWNm0sFJQD8rtQCWB6FW0sDiHjyRvHdTj+ AMfzQwPJe/+Fe00DkGPEsbk/6pdbtKMoz6mg4wH53lhCU8/jWMKxGJEHgu+9/
I see the issue. Mailman's content filtering sees this multipart message as having two parts, the first of which is empty, so it tries to recast the message as a single part message containing only the second part. The problem is this code only works if the second part is a text/* part. Here it decodes the base64 encoded pdf and tries to recast it as unicode text which works for text/* parts with a declared charset, but not for non-text parts. This patch is untested, but I think it will fix the issue. ``` --- a/src/mailman/handlers/mime_delete.py +++ b/src/mailman/handlers/mime_delete.py @@ -221,7 +221,7 @@ Replaced multipart/alternative part with first alternative. def reset_payload(msg, subpart): # Reset payload of msg to contents of subpart, and fix up content headers - if subpart.is_multipart(): + if subpart.is_multipart() or subpart.get_content_maintype() != 'text': msg.set_payload(subpart.get_payload()) else: cset = subpart.get_content_charset() or 'us-ascii' ``` -- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan