為了更好的理解郵件發(fā)送功能的實(shí)現(xiàn),要先了解郵件發(fā)送系統(tǒng)的大致流程。首先 電子郵件之間的相互發(fā)送接受就像 郵局郵件發(fā)送一樣,從一個(gè)站點(diǎn)(郵件發(fā)送服務(wù)器)到目的地站點(diǎn)(郵件接收服務(wù)器),然后目的地站點(diǎn)處理收到的郵件,并發(fā)送給接受人。每個(gè)郵件服務(wù)器即擔(dān)任發(fā)送也擔(dān)任接受郵件,并且每個(gè)服務(wù)器地址,端口號(hào),配置等也不同。
其實(shí)發(fā)送郵件的流程就 兩部:
第一:寫郵件
寫好發(fā)送方,接受方
寫好主題
寫好正文(包括附件,圖片等)
把信件整理在一起
第二:發(fā)送郵件
連接發(fā)送郵件服務(wù)器
登錄郵箱
發(fā)送郵件
退出郵箱
代碼部分:
# -*- coding:utf-8 -*-import smtplibfrom email.header import Headerfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMEText#創(chuàng)建郵件對(duì)象,相當(dāng)于信紙msg = MIMEMultipart()#郵件發(fā)送方msg['From'] = 'XXXXXXXX.qq.com'#郵件接收方msg['To'] = '1212112@qq.com'#郵件主題msg['Subject'] = Header('這是郵箱主題部分', charset='UTF-8')#中文主題#文本內(nèi)容txt = '親愛的用戶'part1 = MIMEText(txt, 'plain', 'utf-8')#添加到郵件中msg.attach(part1)#超文本內(nèi)容,放有圖片,注意src路徑,此為放在同一目錄中html = '<div><img src="cid:image1">親愛的</div>'#一定要設(shè)置郵件格式,否則可能會(huì)亂碼,當(dāng)時(shí)接手別人手中沒加郵件格式的項(xiàng)目,坑了我半天part2 = MIMEText(html, 'html', 'utf-8')#添加到郵件中msg.attach(part2)#圖片放到郵件中# 指定圖片為當(dāng)前目錄fp = open('test.png', 'rb')msgImage = MIMEImage(fp.read())fp.close()# 定義圖片 ID,在 HTML 文本中引用msgImage.add_header('Content-ID', '<image1>')msg.attach(msgImage)#加入附件att2 = MIMEText('這是附件里的文字', 'base64', 'utf-8')att2["Content-Type"] = 'application/octet-stream'#設(shè)置附件名為runoob.txtatt2["Content-Disposition"] = 'attachment; filename="runoob.txt"'#附件放在郵件中msg.attach(att2)#非ssl方式的smtp(簡單郵件發(fā)送協(xié)議),下面注釋為ssl方式的smtpsmtp = smtplib.SMTP()# smtp = smtplib.SMTP_SSL()try: #連接主機(jī)地址 smtp.connect('mail.yto.net.cn:25') #登錄郵箱,需要郵箱賬號(hào),密碼 smtp.login('XXXXXXXX.qq.com','234123') #發(fā)送郵件,需要登錄的郵箱號(hào),發(fā)送方的郵箱號(hào),發(fā)送內(nèi)容 smtp.sendmail('XXXXXXXX.qq.com', '1212112@qq.com', msg.as_string()) #退出郵箱 smtp.quit() print 'The mail is sended successly.'except smtplib.SMTPException,e: print "Error: 無法發(fā)送郵件",e發(fā)送結(jié)果:

注意點(diǎn):當(dāng)自己郵箱作為郵件發(fā)送方時(shí),注意郵件服務(wù)器的設(shè)置里把smtp服務(wù)打開
新聞熱點(diǎn)
疑難解答
圖片精選