Maison > développement back-end > Tutoriel Python > Introduction détaillée à Python utilisant SMTP pour envoyer des e-mails

Introduction détaillée à Python utilisant SMTP pour envoyer des e-mails

零下一度
Libérer: 2017-05-24 14:06:32
original
1806 Les gens l'ont consulté

Python utilise SMTP pour envoyer des e-mails.

SMTP (Simple Mail Transfer Protocol) est un protocole de transfert de courrier simple. de l'adresse source à l'adresse de destination, qui contrôle la manière dont le courrier est transféré.

smtplib de Python fournit un moyen très pratique d'envoyer des e-mails. Il encapsule simplement le protocole SMTP.

La syntaxe permettant à Python de créer un objet SMTP est la suivante :

import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Copier après la connexion

Description du paramètre :

  • hôte : hôte du serveur SMTP. Vous pouvez spécifier l'adresse IP ou le nom de domaine de l'hôte tel que : w3cschool.cc Il s'agit d'un paramètre facultatif.

  • port : Si vous fournissez le paramètre host, vous devez spécifier le numéro de port utilisé par le service SMTP. Généralement, le numéro de port SMTP est 25.

  • local_hostname : Si SMTP est sur votre machine locale, il vous suffit de spécifier l'adresse du serveur en tant que localhost.

L'objet Python SMTP utilise la méthode sendmail pour envoyer des emails. La syntaxe est la suivante :

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]
Copier après la connexion

from_addr : adresse email de l'expéditeur.

to_addrs : liste de chaînes, adresse d'envoi de l'e-mail.

msg : Envoyer un message

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.

Exemple

Ce qui suit est un exemple simple d'utilisation de Python pour envoyer des e-mails :

#!/usr/bin/pythonimport smtplib

sender = &#39;from@fromdomain.com&#39;receivers = [&#39;to@todomain.com&#39;]message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: SMTP e-mail test

This is a test e-mail message.
"""try:
   smtpObj = smtplib.SMTP(&#39;localhost&#39;)
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"except SMTPException:
   print "Error: unable to send email"
Copier après la connexion

Utilisation de Python pour envoyer des e-mails au format HTML

Python La différence entre l'envoi d'e-mails au format HTML et l'envoi de messages en texte brut est que _subtype dans MIMEText est défini sur html. Le code spécifique est le suivant :

import smtplib  
from email.mime.text import MIMEText  mailto_list=["YYY@YYY.com"] mail_host="smtp.XXX.com"  #设置服务器mail_user="XXX"    #用户名mail_pass="XXXX"   #口令 mail_postfix="XXX.com"  #发件箱的后缀
  def send_mail(to_list,sub,content):  #to_list:收件人;sub:主题;content:邮件内容
    me="hello"+"<"+mail_user+"@"+mail_postfix+">"   #这里的hello可以任意设置,收到信后,将按照设置显示
    msg = MIMEText(content,_subtype=&#39;html&#39;,_charset=&#39;gb2312&#39;)    #创建一个实例,这里设置为html格式邮件
    msg[&#39;Subject&#39;] = sub    #设置主题
    msg[&#39;From&#39;] = me  
    msg[&#39;To&#39;] = ";".join(to_list)  
    try:  
        s = smtplib.SMTP()  
        s.connect(mail_host)  #连接smtp服务器
        s.login(mail_user,mail_pass)  #登陆服务器
        s.sendmail(me, to_list, msg.as_string())  #发送邮件
        s.close()  
        return True  
    except Exception, e:  
        print str(e)  
        return False  if __name__ == &#39;__main__&#39;:  
    if send_mail(mailto_list,"hello","<a href=&#39;http://www.cnblogs.com/xiaowuyi&#39;>小五义</a>"):  
        print "发送成功"  
    else:  
        print "发送失败"
Copier après la connexion

Vous pouvez également spécifier le type de contenu sous la forme text/html dans le corps du message, comme indiqué dans l'exemple suivant :

#!/usr/bin/pythonimport smtplib

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format

<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""try:
   smtpObj = smtplib.SMTP(&#39;localhost&#39;)
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"except SMTPException:
   print "Error: unable to send email"
Copier après la connexion

Python envoie un message avec des pièces jointes Email

Pour envoyer un e-mail avec une pièce jointe, vous devez d'abord créer une instance MIMEMultipart(), puis construire la pièce jointe. S'il y a plusieurs pièces jointes, elles peuvent être construites en séquence, et enfin envoyez en utilisant smtplib.smtp.

from email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartimport smtplib#创建一个带附件的实例msg = MIMEMultipart()#构造附件1att1 = MIMEText(open(&#39;d:\\123.rar&#39;, &#39;rb&#39;).read(), &#39;base64&#39;, &#39;gb2312&#39;)att1["Content-Type"] = &#39;application/octet-stream&#39;att1["Content-Disposition"] = &#39;attachment; filename="123.doc"&#39;#这里的filename可以任意写,写什么名字,邮件中显示什么名字msg.attach(att1)#构造附件2att2 = MIMEText(open(&#39;d:\\123.txt&#39;, &#39;rb&#39;).read(), &#39;base64&#39;, &#39;gb2312&#39;)att2["Content-Type"] = &#39;application/octet-stream&#39;att2["Content-Disposition"] = &#39;attachment; filename="123.txt"&#39;msg.attach(att2)#加邮件头msg[&#39;to&#39;] = &#39;YYY@YYY.com&#39;msg[&#39;from&#39;] = &#39;XXX@XXX.com&#39;msg[&#39;subject&#39;] = &#39;hello world&#39;#发送邮件try:
    server = smtplib.SMTP()
    server.connect(&#39;smtp.XXX.com&#39;)
    server.login(&#39;XXX&#39;,&#39;XXXXX&#39;)#XXX为用户名,XXXXX为密码
    server.sendmail(msg[&#39;from&#39;], msg[&#39;to&#39;],msg.as_string())
    server.quit()
    print &#39;发送成功&#39;except Exception, e:  
    print str(e)
Copier après la connexion

以下实例指定了Content-type header 为 multipart/mixed,并发送/tmp/test.txt 文本文件:

#!/usr/bin/pythonimport smtplibimport base64

filename = "/tmp/test.txt"# 读取文件内容并使用 base64 编码fo = open(filename, "rb")filecontent = fo.read()encodedcontent = base64.b64encode(filecontent)  # base64sender = &#39;webmaster@tutorialpoint.com&#39;reciever = &#39;amrood.admin@gmail.com&#39;marker = "AUNIQUEMARKER"body ="""
This is a test email to send an attachement.
"""# 定义头部信息part1 = """From: From Person <me@fromdomain.net>
To: To Person <amrood.admin@gmail.com>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)# 定义消息动作part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit

%s
--%s
""" % (body,marker)# 定义附近部分part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" %(filename, filename, encodedcontent, marker)message = part1 + part2 + part3try:
   smtpObj = smtplib.SMTP(&#39;localhost&#39;)
   smtpObj.sendmail(sender, reciever, message)
   print "Successfully sent email"except Exception:
   print "Error: unable to send email"
Copier après la connexion

【相关推荐】

1. 分享Python实现SMTP发送邮件图文实例

2. Python 使用SMTP发送邮件的代码小结

3. c#调用qq邮箱smtp发送邮件修改版代码

4. Python使用SMTP发送邮件

5. php smtp发送邮件

6. Python SMTP邮件模块详解

7. python smtplib模块发送SSL/TLS安全邮件实例

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!

É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