Maison >développement back-end >Tutoriel Python >python envoyer un e-mail
Les principales méthodes d'envoi d'e-mails en python sont les modules smtplib et email , ce qui suit explique principalement ces deux modules
Avant d'expliquer, vous devez préparer au moins deux boîtes aux lettres de test, parmi lesquelles smtplib doit être activé dans les paramètres de la boîte aux lettres . Le protocole peut être utilisé pour envoyer et recevoir
smtplib.SMTP( [hôte [, port . [, local_hostname [,<a href="http://www.php.cn/wiki/1268.html" target="_blank">time<code>smtplib.SMTP( [host [, port [, local_hostname[,<a href="http://www.php.cn/wiki/1268.html" target="_blank">time</a>out]]]])
out]]]])host
estSMTP
Le serveur de l'hébergeur, l'163
adresse e-mail estsmtp.163.com
, d'autres peuvent être trouvées en ligne,port
est le numéro de port, la valeur par défaut ici est25
,local_hostname
est celle de votre hébergeurSMTP
, siSMTP
Sur votre ordinateur local, il vous suffit de spécifier l'adresse du serveur commelocalhost
.timeout
est le temps limite de connexion défini. Si la connexion n'est pas connectée après ce délai, une erreur se produira
SMTP.<a href="http://www.php.cn/code/8209.html" target="_blank">set<code>SMTP.<a href="http://www.php.cn/code/8209.html" target="_blank">set</a>_debuglevel(level)_debuglevel(level) : définissez s'il s'agit de modèle de débogage . La valeur par défaut est False
, qui est le mode sans débogage, ce qui signifie qu'aucune information de débogage ne sera affichée. S'il est défini sur1
, cela signifie afficher les informations de débogage
SMTP.connect([host[, port]])
: Connectez-vous au serveursmtp
spécifié. Les paramètres représentent respectivementsmpt
l'hôte et le port. Remarque : Vous pouvez également spécifier le numéro de port dans le paramètrehost
(tel que :smpt.yeah.net:25
), il n'est donc pas nécessaire de donner le paramètreport
.
SMTP.login(utilisateur, passw<a href="http://www.php.cn/wiki%20/1360.html" target="_blank">ord<code>SMTP.login(user, passw<a href="http://www.php.cn/wiki/1360.html" target="_blank">ord</a>)
) Connectez-vous au serveur. Leuser
ici est le nom d'utilisateur de votre email, mais lepassword
ici n'est pas le mot de passe de votre email. Lorsque vous ouvrez,SMTP
vous demandera de définir un mot de passe. Le mot de passe ici est le mot de passe correspondant
. SMTP.send<code>SMTP.s<a href="http://www.php.cn/wiki/1048.html" target="_blank">end</a>mail(from_addr, [to_addrs,], msg[, mail_options, rcpt_options])
mail(from_addr, [to_addrs,], msg[, mail_options, rcpt_options] ) Pour envoyer un e-mail,from_addr
est l'expéditeur, qui est votre adresse e-mail, etto_addr
est l'adresse du destinataire. Bien sûr, vous pouvez renseigner ici plusieurs comptes de messagerie et envoyer à plusieurs comptes. . Si vous avez plusieurs comptes, vous devez utiliser une liste de paramètres
- . Le module
SMTP.quit()
Déconnecter
emial
est utilisé pour traiter les messages électroniques, y compris MIME et autres documents de message basés surRFC 2822
. Il est très simple d'utiliser ces modules pour définir le contenu des emails. Les classes qu'il comprend sont (une introduction plus détaillée peut être trouvée sur : http://docs.python.org/library/email.mime.html) :
er().
<a href="http://www.php.cn/wiki/164.html" target="_blank">class<code><a href="http://www.php.cn/wiki/164.html" target="_blank">class</a> email.mime.base.MIMEBase(_<a href="http://www.php.cn/wiki/646.html" target="_blank">main</a>type, _subtype, **_params)
email.mime.base.MIMEBase(_mainMIME
type, _subtype, **_params) : Il s'agit d'une classe de base deminor type
. Il n'est généralement pas nécessaire de créer une instance lors de son utilisation. Où _maintype est le type de contenu, tel que du texte ou une image. _subtype est le type de contenuplain
, tel queg<a href="http://www.php.cn/wiki/109.html" target="_blank">if</a>
oug<a href="http://www.php.cn/wiki/109.html" target="_blank">if<code>**_params
. est un dictionnaire passé directement à Message.add_head
, et la limite par défaut est dénombrable. Lorsque vous devez envoyer des pièces jointes, vous utilisez cette classe
class email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]]
MIMEBase
: une sous-classe deMIME
, une collection de plusieurs objets_subtype
, la valeur par défaut demixed
estboundary
.MIMEMultipart
est la limite de
.
class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]])
MIMEMultipart
: une sous-classe de
class email.mime.audio. MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]])
:MIME
AudioObjet
class email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]])
:MIME
Objet fichier binaire. Principalement utilisé pour envoyer des images
class email.mime.text.MIMEText(_text[, _subtype[, _charset]])
:MIME
Objet texte, où_text
est le contenu de l'e-mail,_subtype
type d'e-mail, qui peut êtretext/plain
(e-mail texte normal),html/plain
(e-mail html),_charset
encodage, qui peut êtregb2312
et ainsi de suite.
Texte ordinaire Envoi d'e-mail , la clé est de définir
MIMEText
dans_subtype
surplain
. Importez d’abordsmtplib
etmimetext
. Créez une instancesmtplib.smtp
, un serveurconnect
mailsmtp
et envoyez aprèslogin
Le code spécifique est le suivant*
# 一个格式化邮件的函数,可以用来使用def _format_addr(s): name, addr = parseaddr(s) return formataddr(( Header(name, 'utf-8').encode(), addr.encode('utf-8') if isinstance(addr, unicode) else addr)) from_addr='××××××××' #你的邮箱地址from_password='×××××××' #你的密码# to_email='chenjiabing666@yeah.net'to_email='××××××' #要发送的邮箱地址msg=MIMEText('乔装打扮,不择手段','plain','utf-8') #这里text=乔装打扮,不择手段msg['From'] = _format_addr(u'Python爱好者 <%s>' % from_addr) #格式化发件人msg['To'] = _format_addr(u'管理员 <%s>' % to_email) #格式化收件人msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode() #格式化主题stmp='smtp.163.com'server=smtplib.SMTP(stmp,port=25,timeout=30) #连接,设置超时时间30sserver.login(from_addr,from_password) #登录server.set_debuglevel(1) #输出所有的信息server.sendmail(from_addr,to_email,msg.as_string()) #这里的as_string()是将msg转换成字符串类型的,如果你想要发给多个人,需要讲to_email换成一个列表
utilisez toujours
MIMEText
, mais définissez_subType
sur html Le code détaillé est le suivant. suit :
def _format_addr(s): name, addr = parseaddr(s) return formataddr(( Header(name, 'utf-8').encode(), addr.encode('utf-8') if isinstance(addr, unicode) else addr)) from_addr='××××××××' #你的邮箱地址from_password='×××××××' #你的密码# to_email='chenjiabing666@yeah.net'to_email='××××××' #要发送的邮箱地址html="""<p><h1 style="color:red">大家好</h1></p>"""msg=MIMEText(html,'html','utf-8') #这里text=html,设置成html格式的msg['From'] = _format_addr(u'Python爱好者 <%s>' % from_addr) #格式化发件人msg['To'] = _format_addr(u'管理员 <%s>' % to_email) #格式化收件人msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode() #格式化主题stmp='smtp.163.com'server=smtplib.SMTP(stmp,port=25,timeout=30) #连接,设置超时时间30sserver.login(from_addr,from_password) #登录server.set_debuglevel(1) #输出所有的信息server.sendmail(from_addr,to_email,msg.as_string()) #这里的as_string()是将msg转换成字符串类型的,如果你想要发给多个人,需要讲to_email换成一个列表
Envoi avec Pour les e-mails avec pièces jointes, vous devez d'abord créer une instance
MIMEMultipart()
, puis construire les pièces jointes, s'il y a plusieurs pièces jointes, elles peuvent être construites séquentiellement, et enfin utilisersmtplib.smtp
pour les envoyer. suit :
from email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextimport smtplibfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.header import Headerdef _format_addr(s): name, addr = parseaddr(s) return formataddr(( Header(name, 'utf-8').encode(), addr.encode('utf-8') if isinstance(addr, unicode) else addr)) from_addr='××××××××' #你的邮箱地址from_password='×××××××' #你的密码# to_email='chenjiabing666@yeah.net'to_email='××××××' #要发送的邮箱地址msg=MIMEMultipart() #创建实例text=MIMEText('<h2 style="color:red">陈加兵</h2><br/><p>大家好</p>','html','utf-8') msg.attach(text) #添加一个正文信息,这里实在正文中显示的信息#创建一个文本附件,这里是从指定文本中读取信息,然后创建一个文本信息att1=MIMEText(open('/home/chenjiabing/文档/MeiZi_img/full/file.txt','rb').read(),'plain','utf-8') att1["Content-Type"] = 'application/octet-stream' #指定类型att1["Content-Disposition"] = 'attachment; filename="123.txt"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字msg.attach(att1) #向其中添加附件img_path='/home/chenjiabing/文档/MeiZi_img/full/file.jpg' #图片路径image=MIMEImage(open(img_path,'rb').read()) #创建一个图片附件image.add_header('Content-ID','<0>') #指定图片的编号,这个会在后面用到image.add_header('Content-Disposition', 'attachment', filename='test.jpg') image.add_header('X-Attachment-Id', '0') msg.attach(image) #添加附件stmp='smtp.163.com'server=smtplib.SMTP(stmp,port=25,timeout=30) #连接,设置超时时间30sserver.login(from_addr,from_password) #登录server.set_debuglevel(1) #输出所有的信息server.sendmail(from_addr,to_email,msg.as_string()) #这里的as_string()是将msg转换成字符串类型的,如果你想要发给多个人,需要讲to_email换成一个列表
from email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextimport smtplibfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.header import Headerdef _format_addr(s): name, addr = parseaddr(s) return formataddr(( Header(name, 'utf-8').encode(), addr.encode('utf-8') if isinstance(addr, unicode) else addr)) from_addr='××××××××' #你的邮箱地址from_password='×××××××' #你的密码# to_email='chenjiabing666@yeah.net'to_email='××××××' #要发送的邮箱地址msg=MIMEMultipart() #创建实例html="""<html><head></head><body><p>下面演示嵌入图片</p><section><img src='cid:0' style='float:left'/><img src='cid:1' style='float:left'/></setcion></body></html>"""text=MIMEText('<h2 style="color:red">陈加兵</h2><br/><p>大家好</p>','html','utf-8') msg.attach(text) #添加一个正文信息,这里实在正文中显示的信息#创建一个文本附件,这里是从指定文本中读取信息,然后创建一个文本信息att1=MIMEText(open('/home/chenjiabing/文档/MeiZi_img/full/file.txt','rb').read(),'plain','utf-8') att1["Content-Type"] = 'application/octet-stream' #指定类型att1["Content-Disposition"] = 'attachment; filename="123.txt"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字msg.attach(att1) #向其中添加附件## 创建一个图片附件img_path='/home/chenjiabing/文档/MeiZi_img/full/file.jpg' #图片路径image=MIMEImage(open(img_path,'rb').read()) #创建一个图片附件image.add_header('Content-ID','<0>') #指定图片的编号,image.add_header('Content-Disposition', 'attachment', filename='test.jpg') image.add_header('X-Attachment-Id', '0') msg.attach(image) #添加附件#创建第二个图片附件img_path_1='/home/chenjiabing/文档/MeiZi_img/full/test.jpg' #图片路径image1=MIMEImage(open(img_path,'rb').read()) #创建一个图片附件image1.add_header('Content-ID','<1>') #指定图片的编号,这个就是在上面对应的cid:1的那张图片,因此这里的编号一定要对应image1.add_header('Content-Disposition', 'attachment', filename='img.jpg') image1.add_header('X-Attachment-Id', '0') msg1.attach(image) #添加附件stmp='smtp.163.com'server=smtplib.SMTP(stmp,port=25,timeout=30) #连接,设置超时时间30sserver.login(from_addr,from_password) #登录server.set_debuglevel(1) #输出所有的信息server.sendmail(from_addr,to_email,msg.as_string()) #这里的as_string()是将msg转换成字符串类型的,如果你想要发给多个人,需要讲to_email换成一个列表
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!