email as_bytes() corruption of headers with SMTPUTF8 policy

Ouverte
#99,927 3 commentaires 3 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
45/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
backend

Piste de recherche

Reproduisez le problème avec email.message_from_bytes et msg.as_bytes(policy=email.policy.SMTPUTF8) en utilisant l’exemple du rapport. Suivez ensuite les points d’entrée de l’analyse et de la sérialisation des en-têtes du paquet email, puis ajoutez un test de régression qui préserve le nom d’affichage Unicode et corresponde à la sortie attendue.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

stdlib topic-email type-bug

Bug report

Reading and then writing RFC2822 messages with SMTPUTF8 policy results in header corruption.

import email
import email.policy

odata = '''From: Unicôde Nâme <example@example.com>
To: Name One <name-one@example.com>, Name Two <name-two@example.com>, Unicôde Nàme <unicode-name@example.com>
Subject: Unicôde Subjéct

This message contains Uniçôde Çôntent.
'''

msg = email.message_from_bytes(odata.encode(), policy=email.policy.SMTPUTF8)

ndata = msg.as_bytes(policy=email.policy.SMTPUTF8)
print(ndata.decode())

Expected output:

From: Unicôde Nâme <example@example.com>
To: Name One <name-one@example.com>, Name Two <name-two@example.com>,
 Unicôde Nàme <unicode-name@example.com>
Subject: Unicôde Subjéct

This message contains Uniçôde Çôntent.

Actual output:

From: Unicôde Nâme <example@example.com>
To: Name One <name-one@example.com>, Name Two <name-two@example.com>,
 =?unknown-8bit?q?Unic=C3=B4de_N=C3=A0me?= <unicode-name@example.com>
Subject: Unicôde Subjéct

This message contains Uniçôde Çôntent.

Your environment

  • CPython versions tested on: Python 3.11.0
  • Operating system and architecture: Linux x86-64, Fedora 37
Langage dominant
Python
Étoiles
77.2k
Forks
36k
Merge moyen
1 j 9 h
PR mergées (30 j)
558

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de python/cpython

Toutes les issues de python/cpython

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.