email.utils : utilitaires divers

Code source : Lib/email/utils.py


Il y a quelques utilitaires utiles fournis dans le module email.utils :

email.utils.localtime(dt=None)

Renvoie l'heure locale en tant qu'objet datetime avisé. S'il est appelé sans arguments, renvoie l'heure actuelle. Sinon, l'argument dt doit être une instance datetime, et il est converti dans le fuseau horaire local en fonction de la base de données des fuseaux horaires du système. Si dt est naïf (c'est-à-dire que dt.tzinfo vaut None), il est supposé être en heure locale. Dans ce cas, une valeur positive ou nulle pour isdst amène localtime à supposer initialement que l'heure d'été est ou n'est pas (respectivement) en vigueur pour l'heure spécifiée. Une valeur négative pour isdst fait que localtime tente de deviner si l'heure d'été est en vigueur pour l'heure spécifiée.

Nouveau dans la version 3.3.

email.utils.make_msgid(idstring=None, domain=None)

Renvoie une chaîne adaptée à un en-tête Message-ID compatible RFC 2822. idstring, s'il est fourni, est une chaîne utilisée pour renforcer l'unicité de l'identifiant du message. Le domain facultatif, s'il est fourni, fournit la partie du msgid après le '@'. La valeur par défaut est le nom d'hôte local. Il n'est normalement pas nécessaire de remplacer cette valeur par défaut, mais cela peut être utile dans certains cas, comme la construction d'un système distribué qui utilise un nom de domaine cohérent sur plusieurs hôtes.

Modifié dans la version 3.2: ajout du mot-clé domaine.

Les fonctions restantes font partie de l'ancienne API de messagerie (Compat32). Il n'est pas nécessaire de les utiliser directement avec la nouvelle API, car l'analyse et le formatage qu'elles fournissent sont effectués automatiquement par le mécanisme d'analyse d'en-tête de la nouvelle API.

email.utils.quote(str)

Renvoie une nouvelle chaîne avec les barres obliques inverses (backslash) dans str remplacées par deux barres obliques inverses et les guillemets doubles remplacés par des guillemets doubles échappés par une barre oblique inverse.

email.utils.unquote(str)

Renvoie une nouvelle chaîne qui est une version sans guillemets de str. Si str se termine et commence par des guillemets doubles, ils sont supprimés. De même, si str est encadrée par des chevrons mathématiques, ils sont supprimés.

email.utils.parseaddr(address, *, strict=True)

Analyse l'adresse – qui devrait être la valeur d'un champ contenant une adresse tel que To ou Cc – dans ses parties constituantes realname et email address. Renvoie un n-uplet de cette information, sauf si l'analyse échoue, alors un couple ('', '') est renvoyé.

If strict is true, use a strict parser which rejects malformed inputs.

Modifié dans la version 3.11.10: Add strict optional parameter and reject malformed inputs by default.

email.utils.formataddr(pair, charset='utf-8')

L'inverse de parseaddr(), elle prend un couple de la forme (realname, email_address) et renvoie la valeur de chaîne appropriée pour un en-tête To ou Cc. Si le premier élément de pair s'évalue à faux, alors le deuxième élément est renvoyé sans modification.

Le charset optionnel est le jeu de caractères qui est utilisé dans l'encodage RFC 2047 du realname si le realname contient des caractères non-ASCII. Cela peut être une instance de str ou un Charset. La valeur par défaut est utf-8.

Modifié dans la version 3.3: ajout de l'option charset.

email.utils.getaddresses(fieldvalues, *, strict=True)

This method returns a list of 2-tuples of the form returned by parseaddr(). fieldvalues is a sequence of header field values as might be returned by Message.get_all.

If strict is true, use a strict parser which rejects malformed inputs.

Here's a simple example that gets all the recipients of a message:

from email.utils import getaddresses

tos = msg.get_all('to', [])
ccs = msg.get_all('cc', [])
resent_tos = msg.get_all('resent-to', [])
resent_ccs = msg.get_all('resent-cc', [])
all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs)

Modifié dans la version 3.11.10: Add strict optional parameter and reject malformed inputs by default.

email.utils.parsedate(date)

Tente d'analyser une date selon les règles de la RFC 2822. Cependant, certains expéditeurs ne suivent pas ce format comme spécifié, donc parsedate() fait son possible dans de tels cas. date est une chaîne contenant une date RFC 2822, telle que "Mon, 20 Nov 1995 19:12:08 -0500". Si elle réussit à analyser la date, parsedate() renvoie un 9-uplet qui peut être passé directement à time.mktime() ; sinon None est renvoyé. Notez que les indices 6, 7 et 8 du n-uplet résultat ne sont pas utilisables.

email.utils.parsedate_tz(date)

Effectue la même fonction que parsedate(), mais renvoie soit None ou un 10-uplet ; les 9 premiers éléments constituent un n-uplet qui peut être passé directement à time.mktime(), et le dixième est le décalage du fuseau horaire de la date par rapport à UTC (qui est le terme officiel pour Greenwich Mean Time) [1]. Si la chaîne d'entrée n'a pas de fuseau horaire, le dernier élément du n-uplet renvoyé est 0, qui représente l'UTC. Notez que les indices 6, 7 et 8 du n-uplet résultat ne sont pas utilisables.

email.utils.parsedate_to_datetime(date)

L'inverse de format_datetime(). Effectue la même fonction que parsedate() mais, en cas de succès, renvoie un datetime ; sinon une ValueError est levée si date contient une valeur invalide telle qu'une heure supérieure à 23 ou un décalage de fuseau horaire non compris entre −24 et 24 heures. Si la date d'entrée a un fuseau horaire de -0000, le datetime sera un datetime naïf, et si la date est conforme aux RFC, elle représentera une heure en UTC mais sans indication du fuseau horaire source réel du message d'où provient la date. Si la date d'entrée a un autre décalage de fuseau horaire valide, le datetime sera un datetime avisé avec le timezone tzinfo adéquat.

Nouveau dans la version 3.3.

email.utils.mktime_tz(tuple)

Transforme un 10-uplet renvoyé par parsedate_tz() en un horodatage UTC (en secondes depuis Epoch). Si l'élément de fuseau horaire dans le n-uplet est None, elle considère que l'heure est locale.

email.utils.formatdate(timeval=None, localtime=False, usegmt=False)

Renvoie une chaîne de date conforme à la RFC 2822, par exemple :

Fri, 09 Nov 2001 01:08:47 -0000

timeval, s'il est fourni, est une valeur de temps à virgule flottante telle qu'acceptée par time.gmtime() et time.localtime(), sinon l'heure actuelle est utilisée.

L'option localtime est un indicateur qui, lorsqu'il est True, interprète timeval et renvoie une date relative au fuseau horaire local au lieu de UTC, en tenant correctement compte de l'heure d'été. La valeur par défaut est False, ce qui signifie que l'UTC est utilisée.

L'option usegmt est un indicateur qui, lorsqu'il est True, affiche une chaîne de date avec le fuseau horaire sous la forme de la chaîne ASCII GMT, plutôt qu'un -0000 numérique. C'est nécessaire pour certains protocoles (tels que HTTP). Cela ne s'applique que lorsque localtime est False. La valeur par défaut est False.

email.utils.format_datetime(dt, usegmt=False)

Comme formatdate, mais l'entrée est une instance datetime. S'il s'agit d'un groupe date-heure naïf, il est considéré être « UTC sans information sur le fuseau horaire source », et le -0000 conventionnel est utilisé pour le fuseau horaire. S'il s'agit d'un datetime avisé, alors le décalage numérique du fuseau horaire est utilisé. S'il s'agit d'un groupe date-heure avisé avec un décalage de fuseau horaire de zéro, alors usegmt peut être défini sur True, la chaîne GMT est alors utilisée à la place du décalage numérique du fuseau horaire. Cela fournit un moyen de générer des en-têtes de date HTTP conformes aux normes.

Nouveau dans la version 3.3.

email.utils.decode_rfc2231(s)

Décode la chaîne s selon la RFC 2231.

email.utils.encode_rfc2231(s, charset=None, language=None)

Encode la chaîne s selon la RFC 2231. charset et language, s'ils sont fournis, indiquent le jeu de caractères et le nom de la langue à utiliser. Si aucun n'est donné, s est renvoyé telle quelle. Si charset est donné mais que language ne l'est pas, la chaîne est encodée en utilisant la chaîne vide pour language.

email.utils.collapse_rfc2231_value(value, errors='replace', fallback_charset='us-ascii')

Lorsqu'un paramètre d'en-tête est encodé au format RFC 2231, Message.get_param peut renvoyer un triplet contenant le jeu de caractères, la langue et la valeur. collapse_rfc2231_value() transforme cela en une chaîne Unicode. errors (facultatif) est passé à l'argument errors de la méthode encode() de str ; sa valeur par défaut est 'replace'. fallback_charset (facultatif) spécifie le jeu de caractères à utiliser si celui de l'en-tête RFC 2231 n'est pas connu de Python ; sa valeur par défaut est 'us-ascii'.

Pour plus de commodité, si la valeur transmise à collapse_rfc2231_value() n'est pas un n-uplet, ce doit être une chaîne et elle est renvoyée sans guillemets.

email.utils.decode_params(params)

Décode la liste des paramètres selon la RFC 2231. params est une séquence de couples contenant des éléments de la forme (content-type, string-value).

Notes