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 utilise moins de dix lignes de code pour envoyer un email :
#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()
Cet exemple est assez simple^_^ ! Les classes et méthodes du module stmplib sont présentées en détail ci-dessous.
smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])
Constructeur de classe SMTP, représentant la connexion avec le serveur SMTP, via Avec ceci 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, 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)
Définir s'il est en 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]])
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])
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()
SMTP.helo([hostname])
Utilisez la commande "helo" pour confirmer l'identité au serveur. Cela équivaut à dire au serveur SMTP « qui je suis ».
SMTP.has_extn(name)
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(address)
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 courrier. 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'''
cette chaîne signifie 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 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 tel que 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".
e-mail 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 :
class email.mime.multipart MIMEMultipart : une collection de plusieurs objets MIME.
classe email.mime.audio : objet audio MIME.
classe email.mime.image : 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 des 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 '邮件发送成功'
Plus d'exemples expliquant smtplib en Python articles sur l'utilisation de modules pour traiter les emails, faites attention au site PHP chinois !