Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Erläuterung der wichtigsten Methoden zum Senden verschiedener Arten von E-Mails in Python
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='plain',_charset='gb2312') msg['Subject'] = sub msg['From'] = me msg['To'] = ";".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__ == '__main__': if send_mail(mailto_list,"hello","hello world!"): print "发送成功" else: print "发送失败"
与text邮件不同之处就是将将MIMEText中_subtype设置为html。具体代码如下:(python2.6下实现)
# -*- coding: utf-8 -*- ''' 发送html文本邮件 ''' 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='html',_charset='gb2312') #创建一个实例,这里设置为html格式邮件 msg['Subject'] = sub #设置主题 msg['From'] = me msg['To'] = ";".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__ == '__main__': if send_mail(mailto_list,"hello","<a href='http://www.cnblogs.com/xiaowuyi'>小五义</a>"): print "发送成功" else: print "发送失败"
3、发送带附件的邮件
发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
# -*- coding: cp936 -*- ''' 发送带附件邮件 ''' from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import smtplib #创建一个带附件的实例 msg = MIMEMultipart() #构造附件1 att1 = MIMEText(open('d:\\123.rar', 'rb').read(), 'base64', 'gb2312') att1["Content-Type"] = 'application/octet-stream' att1["Content-Disposition"] = 'attachment; filename="123.doc"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字 msg.attach(att1) #构造附件2 att2 = MIMEText(open('d:\\123.txt', 'rb').read(), 'base64', 'gb2312') att2["Content-Type"] = 'application/octet-stream' att2["Content-Disposition"] = 'attachment; filename="123.txt"' msg.attach(att2) #加邮件头 msg['to'] = 'YYY@YYY.com' msg['from'] = 'XXX@XXX.com' msg['subject'] = 'hello world' #发送邮件 try: server = smtplib.SMTP() server.connect('smtp.XXX.com') server.login('XXX','XXXXX')#XXX为用户名,XXXXX为密码 server.sendmail(msg['from'], msg['to'],msg.as_string()) server.quit() print '发送成功' 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['From'] = "XXX@XXX.com" msg['To'] = "YYY@YYY.com" msg['Subject'] = "hello world" txt = MIMEText("这是中文的邮件内容哦",'plain','gb2312') msg.attach(txt) file1 = "C:\\hello.jpg" image = MIMEImage(open(file1,'rb').read()) image.add_header('Content-ID','<image1>') msg.attach(image) server = smtplib.SMTP() server.connect('smtp.XXX.com') server.login('XXX','XXXXXX') server.sendmail(msg['From'],msg['To'],msg.as_string()) server.quit() if __name__ == "__main__": AutoSendMail()
利用MIMEimage发送图片,原本是想图片能够在正文中显示,可是代码运行后发现,依然是以附件形式发送的,希望有高手能够指点一下,如何可以发送在正文中显示的图片的邮件,就是图片是附件中存在,但同时能显示在正文中,具体形式如下图。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。
更多详解python发送各类邮件的主要方法相关文章请关注PHP中文网!