email as_bytes() corruption of headers with SMTPUTF8 policy

Abierto
#99,927 3 comentarios 3 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
python
Área
backend

Línea de trabajo

Reproduce el problema con email.message_from_bytes y msg.as_bytes(policy=email.policy.SMTPUTF8) usando el ejemplo del informe. Rastrea los puntos de entrada del paquete email para el análisis y la serialización de encabezados, y después añade una prueba de regresión que conserve el nombre visible Unicode y coincida con la salida esperada.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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
Lenguaje dominante
Python
Estrellas
77.2k
Forks
36k
Merge medio
1 d 9 h
PR fusionados (30 d)
558

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de python/cpython

Todos los issues de python/cpython

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.