Maison > interface Web > js tutoriel > Explication détaillée de l'utilisation du module smtplib en Python pour traiter les emails_Connaissances de base

Explication détaillée de l'utilisation du module smtplib en Python pour traiter les emails_Connaissances de base

WBOY
Libérer: 2016-05-16 15:52:54
original
2711 Les gens l'ont consulté

Dans les applications basées sur Internet, les programmes doivent souvent envoyer automatiquement des e-mails. Par exemple : le système d'enregistrement d'un site Web enverra un e-mail pour confirmer l'enregistrement lorsque l'utilisateur s'inscrit ; lorsque l'utilisateur oublie le mot de passe de connexion, l'utilisateur récupérera le mot de passe par e-mail. Le module smtplib est une implémentation client de SMTP (Simple Mail Transfer Protocol) en Python. Nous pouvons utiliser le module smtplib pour envoyer des emails facilement. L'exemple suivant envoie un email en moins de dix lignes de code :

#coding=gbk 
 
import smtplib 
 
smtp = smtplib.SMTP() 
smtp.connect("smtp.yeah.net", "25") 
smtp.login('用户名', '密码') 
smtp.sendmail('from@yeah.net', 'to@21cn.com', 'From: from@yeah.net/r/nTo: to@21cn.com/r/nSubject: this is a email from python demo/r/n/r/nJust for test~_~') 
smtp.quit()
Copier après la connexion

Cet exemple est assez simple ^_^ ! Les classes et méthodes du module stmplib sont présentées en détail ci-dessous.
smtplib.SMTP([hôte[, port[, local_hostname[, timeout]]]])

Le constructeur de classe SMTP représente la connexion avec le serveur SMTP. Grâce à cette connexion, nous pouvons envoyer des instructions au serveur SMTP et effectuer des opérations associées (telles que la connexion, l'envoi d'e-mails). Cette classe fournit un certain nombre de méthodes décrites ci-dessous. Tous ses paramètres sont facultatifs. Le paramètre host représente le nom d'hôte du serveur SMTP. L'hôte SMTP dans l'exemple ci-dessus est "smtp.yeah.net" ; vous créez un objet SMTP. Ces deux paramètres sont fournis lors de l'initialisation, et la méthode connect sera automatiquement appelée pour se connecter au serveur lors de l'initialisation.

Le module smtplib fournit également la classe SMTP_SSL et la classe LMTP, et leurs opérations sont fondamentalement les mêmes que SMTP.

Méthodes fournies par smtplib.SMTP :

SMTP.set_debuglevel(level)
Copier après la connexion

Définissez s'il s'agit du mode débogage. La valeur par défaut est False, qui est un mode sans débogage, ce qui signifie qu'aucune information de débogage ne sera générée.

SMTP.connect([host[, port]])
Copier après la connexion

Connectez-vous au serveur smtp spécifié. Les paramètres représentent respectivement l'hôte smpt et le port. Remarque : Vous pouvez également spécifier le numéro de port dans le paramètre host (ex : smpt.yeah.net:25), il n'est donc pas nécessaire de donner le paramètre port.

SMTP.docmd(cmd[, argstring])
Copier après la connexion

Envoyer les instructions au serveur smtp. Le paramètre facultatif argstring représente les paramètres de l'instruction. L'exemple suivant implémente complètement l'envoi d'e-mails en appelant la méthode docmd pour envoyer des instructions au serveur (testé sur le serveur de messagerie smtp.yeah.net. Il n'a pas été essayé sur d'autres serveurs de messagerie) :

import smtplib, base64, time 
userName = base64.encodestring('from').strip() 
password = base64.encodestring('password').strip() 
smtp = smtplib.SMTP() 
smtp.connect("smtp.yeah.net:25") 
print smtp.docmd('helo', 'from') 
print smtp.docmd('auth login') 
print smtp.docmd(userName) 
print smtp.docmd(password) 
print smtp.docmd('mail from:', '<from@yeah.net>') 
print smtp.docmd('rcpt to:', '<from@yeah.net>') 
#data 指令表示邮件内容 
print smtp.docmd('data') 
print smtp.docmd(
'''''from: from@yeah.net 
to: from@yeah.net 
subject: subject 
email body 
. 
'''
) 
smtp.quit()
Copier après la connexion

SMTP.helo([nom d'hôte])

Utilisez la commande "helo" pour confirmer l'identité au serveur. Cela équivaut à dire au serveur SMTP « qui je suis ».
SMTP.has_extn(nom)

Déterminez si le nom spécifié existe dans la liste de diffusion du serveur. Pour des raisons de sécurité, les serveurs SMTP bloquent souvent cette commande.
SMTP.verify(adresse)

Déterminez si l'adresse e-mail spécifiée existe sur le serveur. Pour des raisons de sécurité, les serveurs SMTP bloquent souvent cette commande.
SMTP.login(utilisateur, mot de passe)

Connectez-vous au serveur SMTP. Presque tous les serveurs SMTP doivent désormais vérifier que les informations utilisateur sont légitimes avant d'autoriser l'envoi d'e-mails.
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

Envoyer un e-mail. Faites attention au troisième paramètre ici. msg est une chaîne représentant un e-mail. Nous savons que les e-mails se composent généralement d'un titre, de l'expéditeur, du destinataire, du contenu de l'e-mail, des pièces jointes, etc. Lors de l'envoi d'un e-mail, faites attention au format du msg. Ce format est le format défini dans le protocole smtp. Dans l'exemple ci-dessus, la valeur de msg est :


'''''From: from@yeah.net 
To: to@21cn.com 
Subject: test 
 
just for test'''
Copier après la connexion

La signification de cette chaîne est que l'expéditeur de l'e-mail est "from@yeah.net", le destinataire est "to@21cn.com", le titre de l'e-mail est "test" et le contenu de l'e-mail est "juste pour le test". ". Si vous êtes prudent, vous vous demanderez peut-être : si le contenu de l'e-mail à envoyer est très complexe, comprenant des images, des vidéos, des pièces jointes, etc., il sera très difficile de raccorder les chaînes selon le format MIME. Ne vous inquiétez pas, Python a déjà pris cela en considération. Il nous fournit un module de messagerie, qui peut être utilisé pour envoyer facilement des e-mails avec un contenu complexe comme des images, des vidéos, des pièces jointes, etc. Après avoir présenté le module smtplib, je présenterai brièvement l'utilisation de base du module email.
SMTP.quit()

Se déconnecter du serveur smtp équivaut à envoyer la commande "quit".
email et ses sous-modules associés

Le module emial est utilisé pour traiter les messages électroniques, y compris MIME et autres documents de message basés sur la RFC 2822. Il est très simple d'utiliser ces modules pour définir le contenu des emails. Voici quelques classes couramment utilisées :

  • classe email.mime.multipart. MIMEMultipart : Une collection de plusieurs objets MIME.
  • classe email.mime.audio MIMEAudio : objet audio MIME.
  • classe email.mime.image. MIMEImage : objet fichier binaire MIME.
  • classe email.mime.text. MIMEText : objet texte MIME.

L'explication ci-dessus peut sembler déroutante. En fait, ma compréhension de SMTP et MIME est également très superficielle. Mais la plupart du temps, il suffit de savoir s’en servir. Voici un exemple simple pour montrer comment utiliser ces classes pour envoyer des e-mails avec pièces jointes :

#coding=gbk 
import smtplib, mimetypes 
from email.mime.text import MIMEText 
from email.mime.multipart import MIMEMultipart 
from email.mime.image import MIMEImage 
 
msg = MIMEMultipart() 
msg['From'] = "from@yeah.net" 
msg['To'] = 'to@21cn.com' 
msg['Subject'] = 'email for tesing' 
 
#添加邮件内容 
txt = MIMEText("这是邮件内容~~") 
msg.attach(txt) 
 
#添加二进制附件 
fileName = r'e:/PyQt4.rar' 
ctype, encoding = mimetypes.guess_type(fileName) 
if ctype is None or encoding is not None: 
 ctype = 'application/octet-stream' 
maintype, subtype = ctype.split('/', 1) 
att1 = MIMEImage((lambda f: (f.read(), f.close()))(open(fileName, 'rb'))[0], _subtype = subtype) 
att1.add_header('Content-Disposition', 'attachment', filename = fileName) 
msg.attach(att1) 
 
#发送邮件 
smtp = smtplib.SMTP() 
smtp.connect('smtp.yeah.net:25') 
smtp.login('from', '密码') 
smtp.sendmail('from@yeah.net', 'to@21cn.com', msg.as_string()) 
smtp.quit() 
print '邮件发送成功'
Copier après la connexion

N'est-ce pas très simple ? La simplicité est belle, résoudre des problèmes avec le moins de code, c'est Python. Pour plus d'informations sur smtplib, veuillez vous référer au manuel Python module smtplib .

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal