email.contentmanager: Managing MIME Content¶
Código fuente: Lib/email/contentmanager.py
Added in version 3.6: [1]
- class email.contentmanager.ContentManager¶
- Clase base para gestores de contenido. Proporciona los mecanismos de registro estándar para registrar convertidores entre contenido MIME y otras representaciones, así como los métodos de envío - get_contenty- set_content.- get_content(msg, *args, **kw)¶
- Busca una función de controlador basada en el - mimetypede msg (ver el siguiente párrafo), la llama, le pasa todos los argumentos y retorna el resultado de la llamada. La expectativa es que el controlador extraiga la carga útil de msg y retorne un objeto que codifica información sobre los datos extraídos.- Para encontrar el controlador, busca las siguientes llaves en el registro, deteniéndose con la primera que encuentre: - la cadena que representa el tipo MIME completo ( - maintype/subtype)
- la cadena de caracteres que representa el - maintype
- la cadena de caracteres vacía 
 - Si ninguna de estas llaves produce un controlador, se lanza una excepción - KeyErrorpara el tipo MIME completo.
 - set_content(msg, obj, *args, **kw)¶
- Si el - maintypees- multipart, se lanza un- TypeError; de lo contrario, busca una función de controlador basada en el tipo de obj (ver el siguiente párrafo), llama a- clear_content()en el msg y llama a la función de controlador, pasando todos los argumentos. La expectativa es que el controlador transforme y almacene obj en msg, posiblemente realizando otros cambios a msg también, como agregar varios encabezados MIME para codificar la información necesaria para interpretar los datos almacenados.- Para encontrar el controlador, obtiene el tipo de obj ( - typ = type(obj)), y busca las siguientes llaves en el registro, deteniéndose con la primera encontrada:- el tipo en sí ( - typ)
- el nombre completo de calificación del tipo ( - typ.__module__ + '.' + typ.__qualname__).
- the type’s - qualname(- typ.__qualname__)
- the type’s - name(- typ.__name__).
 - If none of the above match, repeat all of the checks above for each of the types in the MRO ( - typ.__mro__). Finally, if no other key yields a handler, check for a handler for the key- None. If there is no handler for- None, raise a- KeyErrorfor the fully qualified name of the type.- También agrega un encabezado MIME-Version si no hay uno presente (vea también - MIMEPart).
 - add_get_handler(key, handler)¶
- Registra el handler de funciones como el manejador de key. Para los posibles valores de key, consulte - get_content().
 - add_set_handler(typekey, handler)¶
- Registra el handler como la función a llamar cuando un objeto de un tipo coincidente typekey se pasa a - set_content(). Para los posibles valores de typekey, consulte- set_content().
 
Instancias gestoras de contenido¶
Actualmente, el paquete de correo electrónico solo proporciona un administrador de contenido concreto, raw_data_manager, aunque en el futuro se pueden agregar más. raw_data_manager es el content_manager proporcionado por EmailPolicy y sus derivados.
- email.contentmanager.raw_data_manager¶
- Este administrador de contenido proporciona sólo una interfaz mínima más allá de la proporcionada por - Messageen sí: trata solo con texto, cadenas de bytes sin procesar, y objetos- Message. Sin embargo, proporciona ventajas significativas en comparación con la API base:- get_contenten una parte de texto retornará una cadena de caracteres unicode sin que la aplicación tenga que decodificarla manualmente,- set_contentproporciona un amplio conjunto de opciones para controlar los encabezados añadidos a una parte y controlar la codificación de transferencia de contenido, y permite el uso de los diversos métodos- add_, simplificando así la creación de mensajes multiparte.- email.contentmanager.get_content(msg, errors='replace')¶
- Retorna la carga útil de la parte como una cadena de caracteres (para partes de - text), un objeto- EmailMessage(para partes de- message/rfc822), o un objeto de- bytes(para todos los demás tipos que no son multiparte). Lanza un- KeyErrorsi se llama en un- multipart. Si la parte es una parte de- texty se especifica errors, se usa como el controlador de errores al decodificar la carga útil a unicode. El controlador de errores predeterminado es- replace.
 - email.contentmanager.set_content(msg, <'str'>, subtype="plain", charset='utf-8', cte=None, disposition=None, filename=None, cid=None, params=None, headers=None)¶
- email.contentmanager.set_content(msg, <'bytes'>, maintype, subtype, cte="base64", disposition=None, filename=None, cid=None, params=None, headers=None)
- email.contentmanager.set_content(msg, <'EmailMessage'>, cte=None, disposition=None, filename=None, cid=None, params=None, headers=None)
- Añade cabeceras y carga útil al msg: - Añade un encabezado Content-Type con un valor - maintype/subtype.- Para - str, establece el- maintypede MIME en- text, y establece el subtipo en subtype si se especifica, o- plainsi no está presente.
- Para - bytes, usa el maintype y subtype especificados, o lanza un- TypeErrorsi no se especifican.
- Para objetos - EmailMessage, establece el maintype en- message, y establece el subtype en subtype si se especifica o- rfc822si no se especifica. Si subtype es- partial, se lanza un error (los objetos de- bytesdeben usarse para construir partes- message/partial).
 - Si se proporciona charset (lo cual solo es válido para - str), codifica la cadena de caracteres en bytes utilizando el conjunto de caracteres especificado. El valor por defecto es- utf-8. Si el charset especificado es un alias conocido del nombre de un conjunto de caracteres del estándar MIME, utiliza el conjunto de caracteres estándar en su lugar.- Si se establece cte, codifica la carga útil mediante la codificación de transferencia de contenido especificada y establece el encabezado Content-Transfer-Encoding en ese valor. Los valores posibles para cte son - quoted-printable,- base64,- 7bit,- 8bit, y- binary. Si la entrada no se puede codificar en la codificación especificada (por ejemplo, especificando un cte de- 7bitpara una entrada que contiene valores no ASCII), se lanza un- ValueError.- For - strobjects, if cte is not set use heuristics to determine the most compact encoding. Prior to encoding,- str.splitlines()is used to normalize all line boundaries, ensuring that each line of the payload is terminated by the current policy’s- linesepproperty (even if the original string did not end with one).
- For - bytesobjects, cte is taken to be base64 if not set, and the aforementioned newline translation is not performed.
- Para - EmailMessage, según RFC 2046, se lanza un error si se solicita un cte de- quoted-printableo- base64para el subtype- rfc822, y para cualquier cte que no sea- 7bitpara el subtype- external-body. Para- message/rfc822, se usa- 8bitsi no se especifica cte. Para todos los demás valores de subtype, se usa- 7bit.
 - Nota - Un cte de - binarytodavía no funciona correctamente. El objeto- EmailMessagemodificado por- set_contentes correcto, pero- BytesGeneratorno lo serializa correctamente.- Si se establece disposición, se usa como valor del encabezado Content-Disposition. Si no se especifica y se especifica filename, agrega el encabezado con el valor - attachment. Si no se especifica disposition y tampoco se especifica filename, no agrega el encabezado. Los únicos valores válidos para disposition son- attachmente- inline.- Si se especifica el filename, se usa como el valor del parámetro - filenamedel encabezado Content-Disposition.- Si se especifica cid, agrega un encabezado Content-ID con valor cid. - Si se especifica params, itera su método - itemsy use los pares resultantes- (key, value)para establecer parámetros adicionales en el encabezado Content-Type.- Si se especifica headers y es una lista de cadenas de caracteres de la forma - headername: headervalueo una lista de objetos- header(que se distinguen de las cadenas de caracteres por tener un atributo- name), agrega los encabezados a msg.
 
Notas al pie de página