smtplib – SMTP protocol client¶ (Français)

SMTP Objects¶

Une SMTP instance possède les méthodes suivantes :

SMTP.set_debuglevel(level)¶

Définir le niveau de sortie de débogage. Une valeur de 1 ou True pour level entraîne des messages de débogage pour la connexion et pour tous les messages envoyés et reçus du serveur. Une valeur de 2 pour le niveau entraîne l’horodatage de ces messages.

Changé dans la version 3.5 : ajout du debuglevel 2.

SMTP.docmd(cmd, args= »)¶

Envoyer une commande cmd au serveur. L’argument optionnel args est simplementconcaténé à la commande, séparé par un espace.

Ceci renvoie un 2-tuple composé d’un code de réponse numérique et de la ligne de réponse réelle (les réponses multilignes sont jointes en une longue ligne.)

En fonctionnement normal, il ne devrait pas être nécessaire d’appeler cette méthode explicitement.Elle est utilisée pour mettre en œuvre d’autres méthodes et peut être utile pour tester des extensions privées.

Si la connexion au serveur est perdue pendant l’attente de la réponse,SMTPServerDisconnected sera levée.

SMTP.connect(host=’localhost’, port=0)¶

Connecter à un hôte sur un port donné. Les valeurs par défaut consistent à se connecter à l’hôte local sur le port SMTP standard (25). Si le nom d’hôte se termine par deux points (':')suivis d’un nombre, ce suffixe sera supprimé et le nombre sera interprété comme le numéro de port à utiliser. Cette méthode est automatiquement invoquée par le constructeur si un hôte est spécifié lors de l’instanciation. Renvoie un2-tuple du code de réponse et du message envoyé par le serveur dans sa réponse de connexion.

Lève un événement d’audit smtplib.connect avec les arguments selfhostport.

SMTP.helo(name= »)¶

Identifiez-vous au serveur SMTP en utilisant HELO. L’argument hostname prend par défaut le nom de domaine pleinement qualifié de l’hôte local.Le message renvoyé par le serveur est stocké comme l’attribut helo_resp de l’objet.

En fonctionnement normal, il ne devrait pas être nécessaire d’appeler cette méthode explicitement.Elle sera implicitement appelée par le sendmail() lorsque cela sera nécessaire.

SMTP.ehlo(name= »)¶

Identifiez-vous à un serveur ESMTP en utilisant EHLO. L’argument hostname prend par défaut le nom de domaine pleinement qualifié de l’hôte local. Examine la réponse pour l’option ESMTP et la stocke pour être utilisée par has_extn().Définit également plusieurs attributs d’information : le message renvoyé par le serveur est stocké comme l’attribut ehlo_respdoes_esmtp est défini à true ou false selon que le serveur prend en charge ESMTP, etesmtp_features sera un dictionnaire contenant les noms des extensions de serviceSMTP que ce serveur prend en charge, et leurs paramètres (le cas échéant).

Sauf si vous souhaitez utiliser has_extn() avant d’envoyer le courrier, il ne devrait pas être nécessaire d’appeler cette méthode explicitement. Elle sera implicitement appelée parsendmail() lorsque cela sera nécessaire.

SMTP.ehlo_or_helo_if_needed()¶

Cette méthode appelle ehlo() et/ou helo() s’il n’y a pas eu de commande EHLO ou HELO précédente dans cette session. Il essaie d’abord ESMTP EHLO.

SMTPHeloError

Le serveur n’a pas répondu correctement à la HELO salutation.

SMTP.has_extn(name)¶

Retourner True si name est dans l’ensemble des extensions de service SMTP retournées par le serveur, False sinon. La casse est ignorée.

SMTP.verify(address)¶

Vérifie la validité d’une adresse sur ce serveur en utilisant le SMTP VRFY. Renvoie un atuple composé du code 250 et d’une adresse RFC 822 complète (y compris le humanname) si l’adresse de l’utilisateur est valide. Sinon, renvoie un code d’erreur SMTP de 400 ou plus et une chaîne d’erreur.

Note

De nombreux sites désactivent le SMTP VRFY afin de déjouer les spammeurs.

SMTP.login(user, password, *, initial_response_ok=True)¶

S’identifier sur un serveur SMTP qui nécessite une authentification. Les arguments sont le nom d’utilisateur et le mot de passe pour s’authentifier avec. S’il n’y a pas eu de commande précédenteEHLO ou HELO cette session, cette méthode essaie ESMTP EHLOen premier. Cette méthode retournera normalement si l’authentification a réussi, oupourra lever les exceptions suivantes :

SMTPHeloError

Le serveur n’a pas répondu correctement à la HELO salutation.

SMTPAuthenticationError

Le serveur n’a pas accepté la combinaison nom d’utilisateur/mot de passe.

SMTPNotSupportedError

La commande AUTH n’est pas prise en charge par le serveur.

SMTPException

Aucune méthode d’authentification appropriée n’a été trouvée.

Chaque méthode d’authentification prise en charge par smtplib est essayée à son tour si elle est annoncée comme prise en charge par le serveur. Voir auth() pour une liste des méthodes d’authentification prises en charge. initial_response_ok est transmis à auth().

L’argument mot-clé optionnel initial_response_ok spécifie si, pour les méthodes d’authentification qui le supportent, une « réponse initiale » telle que spécifiée dans le RFC 4954 peut être envoyée avec la commande AUTH, plutôt que de nécessiter un challenge/réponse.

Changé dans la version 3.5 : SMTPNotSupportedError peut être soulevée, et le paramètreinitial_response_ok a été ajouté.

SMTP.auth(mécanisme, authobject, *, initial_response_ok=True)¶

Emettre une SMTPAUTH commande pour le mécanisme d’authentification spécifié, et traiter la réponse au défi via authobject.

Mécanisme spécifie quel mécanisme d’authentification doit être utilisé comme argument de la commande AUTH ; les valeurs valides sont celles listées dans l’élément auth de esmtp_features.

authobject doit être un objet appelable prenant un argument unique facultatif :

data = authobject(challenge=None)

Si l’argument optionnel du mot-clé initial_response_ok est vrai,authobject() sera appelé en premier sans argument. Il peut retourner laRFC 4954 « réponse initiale » ASCII str qui sera encodée et envoyée avec la commande AUTH comme ci-dessous. Si la authobject() ne prend pas en charge une réponse initiale (par exemple parce qu’elle nécessite un challenge), elle doit retournerNone lorsqu’elle est appelée avec challenge=None. Si initial_response_ok estfalse, alors authobject() ne sera pas appelé en premier avec None.

Si la vérification de la réponse initiale renvoie None, ou si initial_response_ok estfalse, authobject() sera appelée pour traiter la réponse au défi du serveur ; l’argument de défi qui lui est transmis sera un bytes. Il devrait retourner des données ASCII str qui seront encodées en base64 et envoyées au serveur.

La classe SMTP fournit authobjects pour les mécanismes CRAM-MD5PLAIN,et LOGIN ; ils sont nommés respectivement SMTP.auth_cram_md5SMTP.auth_plain, et SMTP.auth_login. Ils exigent tous que les propriétés user et password de l’instance SMTP soient définies sur des valeurs appropriées.

Le code utilisateur n’a normalement pas besoin d’appeler auth directement, mais peut plutôt appeler la méthode login(), qui essaiera tour à tour chacun des mécanismes ci-dessus, dans l’ordre indiqué. auth est exposé pour faciliter la mise en œuvre de méthodes d’authentification qui ne sont pas (ou pas encore) supportées directement par smtplib.

Nouveauté dans la version 3.5.

SMTP.starttls(keyfile=None, certfile=None, context=None)

Mettre la connexion SMTP en mode TLS (Transport Layer Security). Toutes les commandes SMTP qui suivront seront cryptées. Vous devez ensuite appeler ehlo()à nouveau.

Si keyfile et certfile sont fournis, ils sont utilisés pour créer unessl.SSLContext.

Le paramètre contextuel optionnel est un objet ssl.SSLContext ; C’est une alternative à l’utilisation d’un keyfile et d’un certfile et, s’ils sont spécifiés, les deux keyfile et certfile doivent être None.

S’il n’y a pas eu de commande EHLO ou HELO précédente dans cette session,cette méthode essaie ESMTP EHLO en premier.

Déprogrammé depuis la version 3.6 : keyfile et certfile sont dépréciés en faveur du contexte.Veuillez utiliser ssl.SSLContext.load_cert_chain() à la place, ou laissezssl.create_default_context() sélectionner les CAcertificats de confiance du système pour vous.

SMTPHeloError

Le serveur n’a pas répondu correctement à la HELO salutation.

SMTPNotSupportedError

Le serveur ne prend pas en charge l’extension STARTTLS.

RuntimeError

Le supportSSL/TLS n’est pas disponible pour votre interpréteur Python.

Changé dans la version 3.3 : le contexte a été ajouté.

Changé dans la version 3.4 : La méthode supporte désormais la vérification du nom d’hôte avecSSLContext.check_hostname et l’indicateur de nom de serveur (voirHAS_SNI).

Changé dans la version 3.5 : L’erreur soulevée pour l’absence de support STARTTLS est désormais la sous-classeSMTPNotSupportedError au lieu de la baseSMTPException.

SMTP.sendmail(from_addr, to_addrs, msg, mail_options=(), rcpt_options=())¶

Envoyer du courrier. Les arguments requis sont une chaîne d’adresse de départ RFC 822, une liste de chaînes d’adresse d’arrivée RFC 822 (une chaîne nue sera traitée comme une liste avec 1address), et une chaîne de message. L’appelant peut passer une liste d’options ESMTP(telles que 8bitmime) à utiliser dans les commandes MAIL FROM comme mail_options.Les options ESMTP (telles que les commandes DSN) qui doivent être utilisées avec toutes les commandes RCPT peuvent être transmises comme rcpt_options. (Si vous devez utiliser différentes ESMTPoptions pour différents destinataires, vous devez utiliser les méthodes de bas niveau telles quemail()rcpt() et data() pour envoyer le message.)

Note

Les paramètres from_addr et to_addrs sont utilisés pour construire le messageenveloppe utilisé par les agents de transport. sendmail ne modifie en aucun cas les en-têtes du message.

msg peut être une chaîne contenant des caractères dans la plage ASCII, ou un bytestring. Une chaîne de caractères est codée en octets à l’aide du codec ascii, et les caractères \ret \n isolés sont convertis en caractères \r\n. Une chaîne d’octets n’est pas modifiée.

S’il n’y a pas eu de commande EHLO ou HELO précédente dans cette session, cetteméthode essaie ESMTP EHLO en premier. Si le serveur fait ESMTP, la taille du message et chacune des options spécifiées lui seront transmises (si l’option est dans le jeu de fonctionnalités que le serveur annonce). Si EHLO échoue, HELO sera essayéet les options ESMTP supprimées.

Cette méthode reviendra normalement si le courrier est accepté pour au moins un destinataire. Dans le cas contraire, elle lèvera une exception. Autrement dit, si cette méthode ne lève pas d’exception, alors quelqu’un devrait recevoir votre courrier. Si cette méthode ne lève pas d’exception, elle renvoie un dictionnaire, avec une entrée pour chaque destinataire qui a été refusé. Chaque entrée contient un tuple du code d’erreur SMTP et du message d’erreur d’accompagnement envoyé par le serveur.

Si SMTPUTF8 est inclus dans mail_options, et que le serveur le prend en charge,from_addr et to_addrs peuvent contenir des caractères non ASCII.

Cette méthode peut soulever les exceptions suivantes :

SMTPRecipientsRefused

Tous les destinataires ont été refusés. Personne n’a reçu le courrier. L’attribut recipients de l’objet exception est un dictionnaire contenant des informations sur les destinataires refusés (comme celui renvoyé lorsqu’au moins un destinataire a étéaccepté).

SMTPHeloError

Le serveur n’a pas répondu correctement à la HELO salutation.

SMTPSenderRefused

Le serveur n’a pas accepté l’adresse from_addr.

SMTPDataError

Le serveur a répondu avec un code d’erreur inattendu (autre qu’un refus d’arecipient).

SMTPNotSupportedError

SMTPUTF8 a été donné dans les mail_options mais n’est pas supporté par le serveur.

Sauf indication contraire, la connexion sera ouverte même après la levée d’une exception.

Changé dans la version 3.2 : msg peut être une chaîne d’octets.

Changé dans la version 3.5 : Ajout du support SMTPUTF8, et SMTPNotSupportedError peut beraised si SMTPUTF8 est spécifié mais que le serveur ne le supporte pas.

SMTP.send_message(msg, from_addr=None, to_addrs=None, mail_options=(), rcpt_options=())¶

C’est une méthode pratique pour appeler sendmail() avec le message représenté par un objet email.message.Message. Les arguments ont la même signification que pour sendmail(), sauf que msg est un Messageobjet.

Si from_addr est None ou to_addrs est Nonesend_message remplit ces arguments avec des adresses extraites des en-têtes de msg asspecifiés dans RFC 5322 : from_addr est défini sur le champ Senderfield s’il est présent, et sinon sur le champ From.to_addrs combine les valeurs (s’il y en a) des champs To,Cc, et Bcc du msg. Si exactement un jeu d’en-têtes Resent-* apparaît dans le message, les en-têtes ordinaires sont ignorés et les en-têtes Resent-* sont utilisés à la place.Si le message contient plus d’un jeu d’en-têtes Resent-*,un ValueError est soulevé, car il n’y a aucun moyen de détecter sans ambiguïté le jeu d’en-têtes Resent- le plus récent.

send_message sérialise msg en utilisantBytesGenerator avec \r\n comme linesep, etappelle sendmail() pour transmettre le message résultant. Quelles que soient les valeurs de from_addr et to_addrs, send_message ne transmet pas les en-têtesBcc ou Resent-Bcc qui peuvent apparaître dans le msg. Si l’une des adresses dans from_addr et to_addrs contient des caractères non ASCII et que le serveur n’annonce pas le support SMTPUTF8,une SMTPNotSupported erreur est levée. Sinon, la Message est sérialisée avec un clone de sa policy avec l’attribututf8 fixé à True, etSMTPUTF8 et BODY=8BITMIME sont ajoutés à mail_options.

Nouveauté dans la version 3.2.

Nouveauté dans la version 3.5 : support des adresses internationalisées (SMTPUTF8).

SMTP.quit.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *