Maison > développement back-end > Tutoriel Python > Explication détaillée des principales méthodes d'envoi de différents types d'e-mails en python

Explication détaillée des principales méthodes d'envoi de différents types d'e-mails en python

高洛峰
Libérer: 2017-02-23 16:38:34
original
1686 Les gens l'ont consulté

Le module email en python facilite le traitement des emails. Cet article présente principalement les principales méthodes d'envoi de différents types d'emails en python. Ceux qui sont intéressés peuvent en savoir plus.

Le module de messagerie en python facilite le traitement des e-mails. Aujourd'hui, je me concentre sur l'apprentissage des méthodes spécifiques d'envoi d'e-mails. Je vais écrire ici ma propre expérience et demander conseil à des experts.

1. Introduction aux modules associés

Les modules Smtplib et email sont principalement utilisés pour envoyer des emails Voici une brève introduction aux deux modules :

1. module smtplib

smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])

Classe SMTP Le constructeur représente la connexion avec le serveur SMTP. Grâce à cette connexion, vous pouvez envoyer des instructions au serveur SMTP et effectuer des opérations associées (telles que la connexion, l'envoi d'e-mails). Tous les paramètres sont facultatifs.

host : nom d'hôte du serveur SMTP

port : port du service SMTP, la valeur par défaut est 25 ; si ces deux paramètres sont fournis lors de la création de l'objet SMTP, ils seront automatiquement appelés lors de l'initialisation de la méthode de connexion ; pour vous connecter au serveur.

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éfinissez 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]) : Envoie des instructions au serveur smtp. Le paramètre facultatif argstring représente les paramètres de l'instruction.

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(user, password) : 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.

SMTP.quit() : Se déconnecter du serveur SMTP, ce qui équivaut à envoyer la commande "quit". (smtp.close() est utilisé dans de nombreux programmes. J'ai cherché sur Google la différence entre quitter et quitter, mais je n'ai pas trouvé la réponse.)

Module de courrier électronique .

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. Les classes qu'il inclut sont (une introduction plus détaillée peut être trouvée sur : //m.sbmmt.com/) :

class email.mime.base.MIMEBase(_maintype, _subtype, **_params) : Il s'agit d'une classe de base pour MIME. 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 mineur de contenu, tel que plain ou gif. **_params est un dictionnaire passé directement à Message.add_header().

class email.mime.multipart.MIMEMultipart([_subtype[, border[, _subparts[, _params]]]] : Une sous-classe de MIMEBase, une collection de plusieurs objets MIME, la valeur par défaut de _subtype est mixte . La limite est la limite de MIMEMultipart. La limite par défaut est dénombrable

class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]]) : Une sous-classe de MIMEMultipart. .

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

class email.mime.image. MIMEImage (_imagedata[, _subtype[, _encoder[, **_params]]]) : objet fichier binaire MIME

class email.mime.message.MIMEMessage(_msg[, _subtype]) : une instance de message spécifique. , la méthode d'utilisation est la suivante :

msg=mail.Message.Message()  #一个实例 
msg['to']='XXX@XXX.com'   #发送到哪里 
msg['from']='YYY@YYYY.com'    #自己的邮件地址 
msg['date']='2012-3-16'      #时间日期 
msg['subject']='hello world'  #邮件主题
Copier après la connexion

class email.mime.text.MIMEText(_text[, _subtype[, _charset]]) : Objet texte MIME, Parmi eux, _text est le contenu de l'e-mail, le type d'e-mail _subtype, qui peut être text/plain (e-mail texte ordinaire), html/plain (e-mail html), l'encodage _charset, qui peut être gb2312, etc. codes d'implémentation pour plusieurs types d'e-mails

1. E-mails texte ordinaires

La clé de la mise en œuvre de l'envoi d'e-mails texte ordinaires est de définir _subtype dans MIMEText sur plain. Importez d'abord smtplib et mimetext. Créez une instance smtplib.smtp, connectez-vous au serveur de messagerie smtp et envoyez-la après vous être connecté. Le code spécifique est le suivant : (implémenté sous python2.6)

# -*- coding: UTF-8 -*-
'''
发送txt文本邮件
'''
import smtplib 
from email.mime.text import MIMEText 
mailto_list=[YYY@YYY.com] 
mail_host="smtp.XXX.com" #设置服务器
mail_user="XXXX"  #用户名
mail_pass="XXXXXX"  #口令 
mail_postfix="XXX.com" #发件箱的后缀
 
def send_mail(to_list,sub,content): 
  me="hello"+"<"+mail_user+"@"+mail_postfix+">" 
  msg = MIMEText(content,_subtype=&#39;plain&#39;,_charset=&#39;gb2312&#39;) 
  msg[&#39;Subject&#39;] = sub 
  msg[&#39;From&#39;] = me 
  msg[&#39;To&#39;] = ";".join(to_list) 
  try: 
    server = smtplib.SMTP() 
    server.connect(mail_host) 
    server.login(mail_user,mail_pass) 
    server.sendmail(me, to_list, msg.as_string()) 
    server.close() 
    return True 
  except Exception, e: 
    print str(e) 
    return False 
if __name__ == &#39;__main__&#39;: 
  if send_mail(mailto_list,"hello","hello world!"): 
    print "发送成功" 
  else: 
    print "发送失败"
Copier après la connexion
2. Envoi d'e-mail html

与text邮件不同之处就是将将MIMEText中_subtype设置为html。具体代码如下:(python2.6下实现)

# -*- coding: utf-8 -*-
&#39;&#39;&#39;
发送html文本邮件
&#39;&#39;&#39;
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

3、发送带附件的邮件

发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

# -*- coding: cp936 -*-
&#39;&#39;&#39;
发送带附件邮件
&#39;&#39;&#39;

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib

#创建一个带附件的实例
msg = MIMEMultipart()

#构造附件1
att1 = 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)

#构造附件2
att2 = 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

4、利用MIMEimage发送图片

# -*- coding: cp936 -*-
import smtplib
import mimetypes
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

def AutoSendMail():
  msg = MIMEMultipart()
  msg[&#39;From&#39;] = "XXX@XXX.com"
  msg[&#39;To&#39;] = "YYY@YYY.com"
  msg[&#39;Subject&#39;] = "hello world"


  txt = MIMEText("这是中文的邮件内容哦",&#39;plain&#39;,&#39;gb2312&#39;)   
  msg.attach(txt)
  

  file1 = "C:\\hello.jpg"
  image = MIMEImage(open(file1,&#39;rb&#39;).read())
  image.add_header(&#39;Content-ID&#39;,&#39;<image1>&#39;)
  msg.attach(image)
  
  
  server = smtplib.SMTP()
  server.connect(&#39;smtp.XXX.com&#39;)
  server.login(&#39;XXX&#39;,&#39;XXXXXX&#39;)
  server.sendmail(msg[&#39;From&#39;],msg[&#39;To&#39;],msg.as_string())
  server.quit()
  
if __name__ == "__main__":
  AutoSendMail()
Copier après la connexion

利用MIMEimage发送图片,原本是想图片能够在正文中显示,可是代码运行后发现,依然是以附件形式发送的,希望有高手能够指点一下,如何可以发送在正文中显示的图片的邮件,就是图片是附件中存在,但同时能显示在正文中,具体形式如下图。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。

更多详解python发送各类邮件的主要方法相关文章请关注PHP中文网!


É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