Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Erläuterung der wichtigsten Methoden zum Senden verschiedener Arten von E-Mails in Python

Detaillierte Erläuterung der wichtigsten Methoden zum Senden verschiedener Arten von E-Mails in Python

高洛峰
高洛峰Original
2017-02-23 16:38:341699Durchsuche

Das E-Mail-Modul in Python erleichtert die Verarbeitung von E-Mails. In diesem Artikel werden hauptsächlich die wichtigsten Methoden zum Versenden verschiedener Arten von E-Mails in Python vorgestellt.

Das E-Mail-Modul in Python erleichtert die Verarbeitung von E-Mails. Heute werde ich mich darauf konzentrieren, die spezifischen Methoden zum Versenden von E-Mails zu erlernen und Experten um Rat zu fragen.

1. Einführung in verwandte Module

Smtplib- und E-Mail-Module werden hauptsächlich zum Versenden von E-Mails verwendet:

1. smtplib-Modul

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

SMTP-Klasse Der Konstruktor stellt die Verbindung mit dem SMTP-Server dar. Über diese Verbindung können Sie Anweisungen an den SMTP-Server senden und zugehörige Vorgänge ausführen (z. B. Anmelden, E-Mails senden). Alle Parameter sind optional.

Host: SMTP-Server-Hostname

Port: SMTP-Dienst-Port, der Standardwert ist 25; wenn diese beiden Parameter beim Erstellen des SMTP-Objekts angegeben werden, werden sie während der Initialisierung der Verbindungsmethode automatisch aufgerufen um eine Verbindung zum Server herzustellen.

Das smtplib-Modul stellt auch die Klassen SMTP_SSL und LMTP bereit, und ihre Operationen sind im Wesentlichen die gleichen wie bei SMTP.

Von smtplib.SMTP bereitgestellte Methoden:

SMTP.set_debuglevel(level): Legen Sie fest, ob es sich um den Debug-Modus handelt. Der Standardwert ist „False“, was dem Nicht-Debugging-Modus entspricht, was bedeutet, dass keine Debugging-Informationen ausgegeben werden.

SMTP.connect([host[, port]]): Stellen Sie eine Verbindung zum angegebenen SMTP-Server her. Die Parameter stellen den SMTP-Host bzw. -Port dar. Hinweis: Sie können die Portnummer auch im Host-Parameter angeben (z. B. smpt.yeah.net:25), sodass die Angabe des Port-Parameters nicht erforderlich ist.

SMTP.docmd(cmd[, argstring]): Anweisungen an den SMTP-Server senden. Der optionale Parameter argstring repräsentiert die Parameter der Anweisung.

SMTP.helo([Hostname]): Verwenden Sie den Befehl „helo“, um die Identität gegenüber dem Server zu bestätigen. Es ist gleichbedeutend damit, dem SMTP-Server mitzuteilen, „wer ich bin“.

SMTP.has_extn(name): Bestimmen Sie, ob der angegebene Name in der Server-Mailingliste vorhanden ist. Aus Sicherheitsgründen blockieren SMTP-Server diesen Befehl häufig.

SMTP.verify(address): Ermitteln Sie, ob die angegebene E-Mail-Adresse auf dem Server vorhanden ist. Aus Sicherheitsgründen blockieren SMTP-Server diesen Befehl häufig.

SMTP.login(Benutzer, Passwort): Melden Sie sich beim SMTP-Server an. Fast alle SMTP-Server müssen mittlerweile überprüfen, ob die Benutzerinformationen legitim sind, bevor sie den Versand von E-Mails zulassen.

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]): E-Mail senden. Beachten Sie, dass der dritte Parameter msg eine Zeichenfolge ist, die eine E-Mail darstellt. Wir wissen, dass E-Mails im Allgemeinen aus Titel, Absender, Empfänger, E-Mail-Inhalt, Anhängen usw. bestehen. Achten Sie beim Senden einer E-Mail auf das Nachrichtenformat. Dieses Format ist das im SMTP-Protokoll definierte Format.

SMTP.quit(): Verbindung zum SMTP-Server trennen, was dem Senden des „Quit“-Befehls entspricht. (smtp.close() wird in vielen Programmen verwendet. Ich habe den Unterschied zwischen quit und quit gegoogelt, konnte aber keine Antwort finden.)

2. E-Mail-Modul

Das EMIAL-Modul dient zur Verarbeitung von E-Mail-Nachrichten, einschließlich MIME und anderen RFC 2822-basierten Nachrichtendokumenten. Es ist sehr einfach, mit diesen Modulen den Inhalt von E-Mails zu definieren. Die darin enthaltenen Klassen sind (eine ausführlichere Einführung finden Sie unter: http://www.php.cn/):

class email.mime.base.MIMEBase(_maintype, _subtype, **_params): Dies ist eine Basisklasse für MIME. Bei der Verwendung ist es im Allgemeinen nicht erforderlich, eine Instanz zu erstellen. Dabei ist _maintype der Inhaltstyp, z. B. Text oder Bild. _subtype ist der untergeordnete Inhaltstyp, z. B. Plain oder GIF. **_params ist ein Wörterbuch, das direkt an Message.add_header() übergeben wird.

class email.mime.multipart.MIMEMultipart([_subtype[, border[, _subparts[, _params]]]]: Eine Unterklasse von MIMEBase, einer Sammlung mehrerer MIME-Objekte, der Standardwert von _subtype ist gemischt . Grenze ist die Grenze von MIMEMultipart. Die Standardgrenze ist zählbar .

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

class email.mime.image. MIMEImage (_imagedata[, _subtype[, _encoder[, **_params]]]): MIME-Binärdateiobjekt

Klasse email.mime.message.MIMEMessage(_msg[, _subtype]): Eine bestimmte Nachrichteninstanz . Die Verwendungsmethode lautet wie folgt:

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

class email.mime.text.MIMEText(_text[, _subtype[, _charset]]): MIME-Textobjekt. Darunter ist _text der E-Mail-Inhalt, _subtype der E-Mail-Typ, der text/plain (normale Text-E-Mail), html/plain (HTML-E-Mail) sein kann, _charset-Codierung, der gb2312 usw. sein kann. 2. Spezifisch Implementierungscodes für verschiedene Arten von E-Mails

1. Gewöhnliche Text-E-Mails

Der Schlüssel zur Implementierung des Sendens gewöhnlicher Text-E-Mails besteht darin, _subtype in MIMEText auf zu setzen Einfach. Importieren Sie zuerst smtplib und mimetext, stellen Sie eine Verbindung zum E-Mail-SMTP-Server her und senden Sie sie nach der Anmeldung. Der spezifische Code lautet wie folgt: (implementiert unter Python2.6)

2. HTML-E-Mail senden
# -*- 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 "发送失败"

与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 "发送失败"

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)

 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()

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

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

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


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn