Maison >développement back-end >Tutoriel Python >python envoyer un e-mail

python envoyer un e-mail

大家讲道理
大家讲道理original
2017-05-28 10:03:551690parcourir

pythonEnvoyer un email

Préparation

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

  • 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]]]]) hostest SMTP Le serveur de l'hébergeur, l'163 adresse e-mail est smtp.163.com, d'autres peuvent être trouvées en ligne, port est le numéro de port, la valeur par défaut ici est 25, local_hostname est celle de votre hébergeur SMTP, si SMTPSur votre ordinateur local, il vous suffit de spécifier l'adresse du serveur comme localhost. 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 sur 1, cela signifie afficher les informations de débogage

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

  • 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. Le user ici est le nom d'utilisateur de votre email, mais le password 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, et to_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

  • SMTP.quit()Déconnecter

  • . Le module

e-mail

emial est utilisé pour traiter les messages électroniques, y compris MIME et autres documents de message basés sur RFC 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) :

  • <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(_mainMIMEtype, _subtype, **_params) : Il s'agit d'une classe de base de minor 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 contenu plain, tel que g<a href="http://www.php.cn/wiki/109.html" target="_blank">if</a> ou g<a href="http://www.php.cn/wiki/109.html" target="_blank">if<code>**_params. est un dictionnaire passé directement à Message.add_head

    er().
  • class email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]]MIMEBase : une sous-classe de MIME, une collection de plusieurs objets _subtype , la valeur par défaut de mixed est boundary. MIMEMultipart est la limite de

    , et la limite par défaut est dénombrable. Lorsque vous devez envoyer des pièces jointes, vous utilisez cette classe
  • class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]])MIMEMultipart : une sous-classe de

    .
  • class email.mime.audio. MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]]) : MIMEAudioObjet

  • class email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]]) : MIMEObjet fichier binaire. Principalement utilisé pour envoyer des images

e-mails texte ordinaires

  • class email.mime.text.MIMEText(_text[, _subtype[, _charset]]) : MIMEObjet texte, où _text est le contenu de l'e-mail, _subtype type d'e-mail, qui peut être text/plain (e-mail texte normal), html/plain (e-mail html), _charset encodage, qui peut être gb2312 et ainsi de suite.

  • Texte ordinaire Envoi d'e-mail , la clé est de définir MIMEText dans _subtype sur plain. Importez d’abord smtplib et mimetext. Créez une instance smtplib.smtp, un serveur connectmailsmtp et envoyez après login Le code spécifique est le suivant*


.
# 一个格式化邮件的函数,可以用来使用def _format_addr(s):
    name, addr = parseaddr(s)    return formataddr((
        Header(name, &#39;utf-8&#39;).encode(),
        addr.encode(&#39;utf-8&#39;) if isinstance(addr, unicode) else addr))

from_addr=&#39;××××××××&#39;   #你的邮箱地址from_password=&#39;×××××××&#39;   #你的密码# to_email=&#39;chenjiabing666@yeah.net&#39;to_email=&#39;××××××&#39;    #要发送的邮箱地址msg=MIMEText(&#39;乔装打扮,不择手段&#39;,&#39;plain&#39;,&#39;utf-8&#39;)  #这里text=乔装打扮,不择手段msg[&#39;From&#39;] = _format_addr(u&#39;Python爱好者 <%s>&#39; % from_addr)  #格式化发件人msg[&#39;To&#39;] = _format_addr(u&#39;管理员 <%s>&#39; % to_email)    #格式化收件人msg[&#39;Subject&#39;] = Header(u&#39;来自SMTP的问候……&#39;, &#39;utf-8&#39;).encode()    #格式化主题stmp=&#39;smtp.163.com&#39;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换成一个列表


Pour envoyer un e-mail HTML

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, &#39;utf-8&#39;).encode(),
        addr.encode(&#39;utf-8&#39;) if isinstance(addr, unicode) else addr))

from_addr=&#39;××××××××&#39;   #你的邮箱地址from_password=&#39;×××××××&#39;   #你的密码# to_email=&#39;chenjiabing666@yeah.net&#39;to_email=&#39;××××××&#39;    #要发送的邮箱地址html="""<p><h1 style="color:red">大家好</h1></p>"""msg=MIMEText(html,&#39;html&#39;,&#39;utf-8&#39;)  #这里text=html,设置成html格式的msg[&#39;From&#39;] = _format_addr(u&#39;Python爱好者 <%s>&#39; % from_addr)  #格式化发件人msg[&#39;To&#39;] = _format_addr(u&#39;管理员 <%s>&#39; % to_email)    #格式化收件人msg[&#39;Subject&#39;] = Header(u&#39;来自SMTP的问候……&#39;, &#39;utf-8&#39;).encode()    #格式化主题stmp=&#39;smtp.163.com&#39;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 des pièces jointes

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 utiliser smtplib.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, &#39;utf-8&#39;).encode(),
        addr.encode(&#39;utf-8&#39;) if isinstance(addr, unicode) else addr))

from_addr=&#39;××××××××&#39;   #你的邮箱地址from_password=&#39;×××××××&#39;   #你的密码# to_email=&#39;chenjiabing666@yeah.net&#39;to_email=&#39;××××××&#39;    #要发送的邮箱地址msg=MIMEMultipart()   #创建实例text=MIMEText(&#39;<h2 style="color:red">陈加兵</h2><br/><p>大家好</p>&#39;,&#39;html&#39;,&#39;utf-8&#39;)
msg.attach(text)   #添加一个正文信息,这里实在正文中显示的信息#创建一个文本附件,这里是从指定文本中读取信息,然后创建一个文本信息att1=MIMEText(open(&#39;/home/chenjiabing/文档/MeiZi_img/full/file.txt&#39;,&#39;rb&#39;).read(),&#39;plain&#39;,&#39;utf-8&#39;)
att1["Content-Type"] = &#39;application/octet-stream&#39;  #指定类型att1["Content-Disposition"] = &#39;attachment; filename="123.txt"&#39;#这里的filename可以任意写,写什么名字,邮件中显示什么名字msg.attach(att1)     #向其中添加附件img_path=&#39;/home/chenjiabing/文档/MeiZi_img/full/file.jpg&#39;  #图片路径image=MIMEImage(open(img_path,&#39;rb&#39;).read())     #创建一个图片附件image.add_header(&#39;Content-ID&#39;,&#39;<0>&#39;)   #指定图片的编号,这个会在后面用到image.add_header(&#39;Content-Disposition&#39;, &#39;attachment&#39;, filename=&#39;test.jpg&#39;)        
image.add_header(&#39;X-Attachment-Id&#39;, &#39;0&#39;)
msg.attach(image)    #添加附件stmp=&#39;smtp.163.com&#39;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换成一个列表


Intégrer l'image dans le message texte


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, &#39;utf-8&#39;).encode(),
        addr.encode(&#39;utf-8&#39;) if isinstance(addr, unicode) else addr))

from_addr=&#39;××××××××&#39;   #你的邮箱地址from_password=&#39;×××××××&#39;   #你的密码# to_email=&#39;chenjiabing666@yeah.net&#39;to_email=&#39;××××××&#39;    #要发送的邮箱地址msg=MIMEMultipart()   #创建实例html="""<html><head></head><body><p>下面演示嵌入图片</p><section><img src=&#39;cid:0&#39; style=&#39;float:left&#39;/><img src=&#39;cid:1&#39; style=&#39;float:left&#39;/></setcion></body></html>"""text=MIMEText(&#39;<h2 style="color:red">陈加兵</h2><br/><p>大家好</p>&#39;,&#39;html&#39;,&#39;utf-8&#39;)
msg.attach(text)   #添加一个正文信息,这里实在正文中显示的信息#创建一个文本附件,这里是从指定文本中读取信息,然后创建一个文本信息att1=MIMEText(open(&#39;/home/chenjiabing/文档/MeiZi_img/full/file.txt&#39;,&#39;rb&#39;).read(),&#39;plain&#39;,&#39;utf-8&#39;)
att1["Content-Type"] = &#39;application/octet-stream&#39;  #指定类型att1["Content-Disposition"] = &#39;attachment; filename="123.txt"&#39;#这里的filename可以任意写,写什么名字,邮件中显示什么名字msg.attach(att1)     #向其中添加附件## 创建一个图片附件img_path=&#39;/home/chenjiabing/文档/MeiZi_img/full/file.jpg&#39;  #图片路径image=MIMEImage(open(img_path,&#39;rb&#39;).read())     #创建一个图片附件image.add_header(&#39;Content-ID&#39;,&#39;<0>&#39;)   #指定图片的编号,image.add_header(&#39;Content-Disposition&#39;, &#39;attachment&#39;, filename=&#39;test.jpg&#39;)        
image.add_header(&#39;X-Attachment-Id&#39;, &#39;0&#39;)
msg.attach(image)    #添加附件#创建第二个图片附件img_path_1=&#39;/home/chenjiabing/文档/MeiZi_img/full/test.jpg&#39;  #图片路径image1=MIMEImage(open(img_path,&#39;rb&#39;).read())     #创建一个图片附件image1.add_header(&#39;Content-ID&#39;,&#39;<1>&#39;)   #指定图片的编号,这个就是在上面对应的cid:1的那张图片,因此这里的编号一定要对应image1.add_header(&#39;Content-Disposition&#39;, &#39;attachment&#39;, filename=&#39;img.jpg&#39;)        
image1.add_header(&#39;X-Attachment-Id&#39;, &#39;0&#39;)
msg1.attach(image)    #添加附件stmp=&#39;smtp.163.com&#39;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!

Déclaration:
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
Article précédent:Développement PythontorndbArticle suivant:Développement Pythontorndb