19.1.5. email.errors : exceptions et classes pour les anomalies

Code source : Lib/email/errors.py


Les classes d’exception suivantes sont définies dans le module email.errors :

exception email.errors.MessageError

Exception de base, dont héritent toutes les exceptions du paquet email. Cette classe hérite de la classe native Exception et ne définit aucune méthode additionnelle.

exception email.errors.MessageParseError

Exception de base pour les exceptions levées par la classe Parser. Elle hérite de MessageError. Cette classe est aussi utilisée en interne par l’analyseur de headerregistry.

exception email.errors.HeaderParseError

Cette exception, dérivée de MessageParseError, est levée sous différentes conditions lors de l’analyse des en-têtes RFC 5322 du message. Lorsque la méthode set_boundary() est invoquée, elle lève cette erreur si le type du contenu est inconnu. La classe Header lève cette exception pour certains types d’erreurs provenant du décodage base64. Elle la lève aussi quand un en-tête est créé et qu’il semble contenir un en-tête imbriqué, c’est-à-dire que la ligne qui suit ressemble à un en-tête et ne commence pas par des caractères d’espacement.

exception email.errors.BoundaryError

Obsolète, n’est plus utilisé.

exception email.errors.MultipartConversionError

Cette exception est levée quand le contenu, que la méthode add_payload() essaie d’ajouter à l’objet Message, est déjà un scalaire et que le type principal du message Content-Type est manquant ou différent de multipart. MultipartConversionError hérite à la fois de MessageError et de TypeError.

Comme la méthode Message.add_payload() est obsolète, cette exception est rarement utilisée. Néanmoins, elle peut être levée si la méthode attach() est invoquée sur une instance de classe dérivée de MIMENonMultipart (p. ex. MIMEImage).

Voici la liste des anomalies que peut identifier FeedParser pendant l’analyse des messages. Notez que les anomalies sont signalées à l’endroit où elles sont détectées : par exemple, dans le cas d’une malformation de l’en-tête d’un message imbriqué dans un message de type multipart/alternative, l’anomalie est signalée sur le message imbriqué seulement.

Toutes les anomalies sont des sous-classes de email.errors.MessageDefect.

  • NoBoundaryInMultipartDefect — Un message qui prétend être composite (multipart en anglais), mais qui ne contient pas de séparateur boundary.

  • StartBoundaryNotFoundDefect — Le message ne contient pas le séparateur de départ indiqué dans le Content-Type.

  • CloseBoundaryNotFoundDefect — Le séparateur de départ a été trouvé, mais pas le séparateur de fin correspondant.

    Nouveau dans la version 3.3.

  • FirstHeaderLineIsContinuationDefect — La première ligne de l’en-tête du message est une ligne de continuation.

  • MisplacedEnvelopeHeaderDefect — Un en-tête Unix From est présent à l’intérieur d’un bloc d’en-tête.

  • MissingHeaderBodySeparatorDefect — Une ligne d’en-tête ne contient pas de caractères d’espacement au début et aucun « : ». L’analyse continue en supposant qu’il s’agit donc de la première ligne du corps du message.

    Nouveau dans la version 3.3.

  • MalformedHeaderDefect – Un en-tête est mal formé ou il manque un « : ».

    Obsolète depuis la version 3.3: Cette anomalie est obsolète depuis plusieurs versions de Python.

  • MultipartInvariantViolationDefect – A message claimed to be a multipart, but no subparts were found. Note that when a message has this defect, its is_multipart() method may return false even though its content type claims to be multipart.

  • InvalidBase64PaddingDefect — Remplissage incorrect d’un bloc d’octets encodés en base64. Des caractères de remplissage ont été ajoutés pour permettre le décodage, mais le résultat du décodage peut être invalide.

  • InvalidBase64CharactersDefect — Des caractères n’appartenant pas à l’alphabet base64 ont été rencontrés lors du décodage d’un bloc d’octets encodés en base64. Les caractères ont été ignorés, mais le résultat du décodage peut être invalide.

  • InvalidBase64LengthDefect — Le nombre de caractères (autres que de remplissage) d’un bloc d’octets encodés en base64 est invalide (1 de plus qu’un multiple de 4). Le bloc encodé n’a pas été modifié.