我們平時需要使用 Python 發(fā)送各類郵件,這個需求怎么來實現(xiàn)?答案其實很簡單,smtplib 和 email 庫可以幫忙實現(xiàn)這個需求。smtplib 和 email 的組合可以用來發(fā)送各類郵件:普通文本,HTML 形式,帶附件,群發(fā)郵件,帶圖片的郵件等等。我們這里將會分幾節(jié)把發(fā)送郵件功能解釋完成。
smtplib 是 Python 用來發(fā)送郵件的模塊,email 是用來處理郵件消息。
發(fā)送 HTML 形式的郵件
發(fā)送 HTML 形式的郵件,需要 email.mime.text 中的 MIMEText 的 _subtype 設(shè)置為 html,并且 _text 的內(nèi)容應(yīng)該為 HTML 形式。
import smtplibfrom email.mime.text import MIMETextsender = '***'receiver = '***'subject = 'python email test'smtpserver = 'smtp.163.com'username = '***'password = '***'msg = MIMEText(u'''<pre><h1>你好</h1></pre>''','html','utf-8')msg['Subject'] = subjectsmtp = smtplib.SMTP()smtp.connect(smtpserver)smtp.login(username, password)smtp.sendmail(sender, receiver, msg.as_string())smtp.quit()
注意:這里的代碼并沒有把異常處理加入,需要讀者自己處理異常。
發(fā)送帶圖片的郵件
發(fā)送帶圖片的郵件是利用 email.mime.multipart 的 MIMEMultipart 以及 email.mime.image 的 MIMEImage:
import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImagesender = '***'receiver = '***'subject = 'python email test'smtpserver = 'smtp.163.com'username = '***'password = '***'msgRoot = MIMEMultipart('related')msgRoot['Subject'] = 'test message'msgText = MIMEText( '''<b> Some <i> HTML </i> text </b > and an image.<img alt="" src="cid:image1"/>good!''', 'html', 'utf-8')msgRoot.attach(msgText)fp = open('/Users/1.jpg', 'rb')msgImage = MIMEImage(fp.read())fp.close()msgImage.add_header('Content-ID', '<image1>')msgRoot.attach(msgImage)smtp = smtplib.SMTP()smtp.connect(smtpserver)smtp.login(username, password)smtp.sendmail(sender, receiver, msgRoot.as_string())smtp.quit()發(fā)送帶附件的郵件
發(fā)送帶附件的郵件是利用 email.mime.multipart 的 MIMEMultipart 以及 email.mime.image 的 MIMEImage,重點是構(gòu)造郵件頭信息:
import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextsender = '***'receiver = '***'subject = 'python email test'smtpserver = 'smtp.163.com'username = '***'password = '***'msgRoot = MIMEMultipart('mixed')msgRoot['Subject'] = 'test message'# 構(gòu)造附件att = MIMEText(open('/Users/1.jpg', 'rb').read(), 'base64', 'utf-8')att["Content-Type"] = 'application/octet-stream'att["Content-Disposition"] = 'attachment; filename="1.jpg"'msgRoot.attach(att)smtp = smtplib.SMTP()smtp.connect(smtpserver)smtp.login(username, password)smtp.sendmail(sender, receiver, msgRoot.as_string())smtp.quit()新聞熱點
疑難解答
圖片精選