Skip to content

email module generates wrong MIME header with quoted-printable encoded extra space with Python 3.12.4 #120930

Closed

Description

@jun66j5

Bug report

Bug description:

In Python 3.12.4, using EmailMessage class with long non-ASCII characters in the subject, the resulting, encoded extra space =?utf-8?q?_?= is generated. The issue doesn't occur with Python 3.12.3 and 3.11.9.

Python 3.12.4

Python 3.12.4 (main, Jun 20 2024, 23:12:11) [GCC 13.2.1 20240309] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from email import message_from_string
>>> from email.message import EmailMessage
>>> from email.header import decode_header, make_header
>>> msg = EmailMessage()
>>> msg.set_content(u'Body text.\n', cte='quoted-printable')
>>> subject = 'A_very' + ' long' * 23 + ' súmmäry'
>>> subject
'A_very long long long long long long long long long long long long long long long long long long long long long long long súmmäry'
>>> msg['Subject'] = subject
>>> print(msg.as_string())
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Subject: A_very long long long long long long long long long long long long
 long long long long long long long long long long long =?utf-8?q?s=C3=BAmm?=
 =?utf-8?q?_?==?utf-8?q?=C3=A4ry?=

Body text.

>>> parsed_msg = message_from_string(msg.as_string())
>>> parsed_subject = str(make_header(decode_header(parsed_msg['Subject'])))
>>> parsed_subject
'A_very long long long long long long long long long long long long long long long long long long long long long long long súmm äry'
>>> subject == parsed_subject
False
>>>

Python 3.12.3

Python 3.12.3 (main, May 23 2024, 00:56:56) [GCC 13.2.1 20240309] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from email import message_from_string
>>> from email.message import EmailMessage
>>> from email.header import decode_header, make_header
>>> msg = EmailMessage()
>>> msg.set_content(u'Body text.\n', cte='quoted-printable')
>>> subject = 'A_very' + ' long' * 23 + ' súmmäry'
>>> subject
'A_very long long long long long long long long long long long long long long long long long long long long long long long súmmäry'
>>> msg['Subject'] = subject
>>> print(msg.as_string())
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Subject: A_very long long long long long long long long long long long long
 long long long long long long long long long long long =?utf-8?q?s=C3=BAmm?=
 =?utf-8?q?=C3=A4ry?=

Body text.

>>> parsed_msg = message_from_string(msg.as_string())
>>> parsed_subject = str(make_header(decode_header(parsed_msg['Subject'])))
>>> parsed_subject
'A_very long long long long long long long long long long long long long long long long long long long long long long long súmmäry'
>>> subject == parsed_subject
True
>>>

CPython versions tested on:

3.12

Operating systems tested on:

No response

Linked PRs

Activity

  1. dtrodrigues commented on Jun 26, 2024

    @dtrodrigues
    Contributor

    Bisected to ffe9ba0 / #92081

  2. added a commit that references this issue on Jul 14, 2024
  3. added a commit that references this issue on Jul 18, 2024
  4. added 2 commits that reference this issue on Jul 18, 2024
  5. added 2 commits that reference this issue on Jul 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions