Python基礎(chǔ)詳解之郵件處理
一、發(fā)送電子郵件
Python標(biāo)準(zhǔn)庫(kù)提供了smtplib,用于實(shí)現(xiàn)SMTP協(xié)議發(fā)送郵件。標(biāo)準(zhǔn)庫(kù)還提供email模塊幫助我們構(gòu)建郵件格式。SMTP(Simple Mail Transfer Protocol,即簡(jiǎn)單郵件傳輸協(xié)議),是一組有源地址到目的地址傳送郵件的規(guī)則,用來(lái)控制信件的中轉(zhuǎn)方式。
- 獲取QQ郵箱密碼(授權(quán)碼)
二、發(fā)送純文本格式的郵件
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 郵箱用戶(hù)名
sender = 'dad@qq.com'(輸入你的郵箱)
# 郵箱密碼(部分郵箱為授權(quán)碼)
password = '123456'(輸入你的密碼)
# 收件人郵箱地址,注意需要[]包裹,這意味著你可以寫(xiě)多個(gè)郵件地址群發(fā)
receiver = ['baby@qq.com', ](輸入你要發(fā)送人的郵箱)
# 郵件正文
text = 'Hello,baby'
message = MIMEText(text, 'plain', 'utf-8')
# 發(fā)件人顯式的名字
message['From'] = Header('拿頭來(lái)堅(jiān)持', 'utf-8')
# 收件人顯式的名字
message['To'] = Header('baby', 'utf-8')
# 郵件標(biāo)題
message['Subject'] = '爸爸來(lái)信,請(qǐng)接收!'
try:
# 使用QQ企業(yè)郵箱服務(wù)器發(fā)送
smtp = smtplib.SMTP('smtp.qq.com')
# 登錄
smtp.login(sender, password)
# 發(fā)送
smtp.sendmail(sender, receiver, message.as_string())
print('郵件發(fā)送成功!')
# 退出服務(wù)器
smtp.quit()
except smtplib.SMTPException as e:
print('Error!郵件發(fā)送失敗!', e)
發(fā)送純文本格式的郵件執(zhí)行結(jié)果:

三、發(fā)送HTML格式的郵件
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 郵箱用戶(hù)名
sender = 'dad@qq.com'(輸入你的郵箱)
# 郵箱密碼(部分郵箱為授權(quán)碼)
password = '123456'(輸入你的密碼)
# 收件人郵箱地址,注意需要[]包裹,這意味著你可以寫(xiě)多個(gè)郵件地址群發(fā)
receiver = ['baby@qq.com', ](輸入你要發(fā)送人的郵箱)
# 郵件正文
msg = '''
<p><a >拿頭來(lái)堅(jiān)持</p>
Life goes on, learning goes on
</p> <!----></div></div> <div class="user-profile-head-info-b" data-v-d1dbb6f8><ul data-v-d1dbb6f8><li data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>22,574</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>被訪問(wèn)量</div></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>24</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>原創(chuàng)文章</div></a></li> <li data-v-d1dbb6f8><a rel="external nofollow" rel="external nofollow" target="_blank" data-report-click="{"spm":"3001.5476"}" data-report-query="spm=3001.5476" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>128,997</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>作者排名</div></a></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>762</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>粉絲數(shù)量</div></a></li></ul></div></div></div> <div class="user-profile-body" data-v-3f0fdf46 data-v-80922f46><div class="user-profile-body-inner" data-v-3f0fdf46><div class="user-profile-body-left" data-v-3f0fdf46><div class="user-profile-aside" data-v-d487ed78 data-v-3f0fdf46><div class="user-general-info single-general-info" data-v-d487ed78><ul data-v-d487ed78><!----> <!----> <li class="user-general-info-join-csdn" data-v-d487ed78><i data-v-d487ed78></i> <span data-v-d487ed78>于</span> <span class="user-general-info-key-word" data-v-d487ed78>2020-02-22</span> <span data-v-d487ed78>加入CSDN</span></li></ul></div> <!----> <div class="user-achievement user-profile-aside-common-box" data-v-d487ed78><div class="aside-common-box-head" data-v-d487ed78>獲得成就</div> <div class="aside-common-box-bottom" data-v-d487ed78><div class="aside-common-box-content" data-v-d487ed78><ul data-v-d487ed78><li data-v-d487ed78>
<i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022819.png)"></i>
<div>獲得<span>212</span>次點(diǎn)贊</div>
</li><li data-v-d487ed78>
<i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022831.png)"></i>
<div>內(nèi)容獲得<span>111</span>次評(píng)論</div>
</li><li data-v-d487ed78>
<i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022828.png)"></i>
<div>獲得<span>562</span>次收藏</div>
'''
# 指定消息體使用HTML格式
message = MIMEText(msg, 'html', 'utf-8')
# 發(fā)件人顯式的名字
message['From'] = Header('拿頭來(lái)堅(jiān)持', 'utf-8')
# 收件人顯式的名字
message['To'] = Header('baby', 'utf-8')
# 郵件標(biāo)題
message['Subject'] = '爸爸來(lái)信,請(qǐng)接收!'
try:
# 使用QQ企業(yè)郵箱服務(wù)器發(fā)送
smtp = smtplib.SMTP('smtp.qq.com')
# 登錄
smtp.login(sender, password)
# 發(fā)送
smtp.sendmail(sender, receiver, message.as_string())
print('郵件發(fā)送成功!')
# 退出服務(wù)器
smtp.quit()
except smtplib.SMTPException as e:
print('Error!郵件發(fā)送失?。?, e)
發(fā)送HTML格式的郵件的執(zhí)行結(jié)果:

四、發(fā)送帶附件的郵件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
# 郵箱用戶(hù)名
sender = 'dad@qq.com'(輸入你的郵箱)
# 郵箱密碼(部分郵箱為授權(quán)碼)
password = '123456'(輸入你的密碼)
# 收件人郵箱地址,注意需要[]包裹,這意味著你可以寫(xiě)多個(gè)郵件地址群發(fā)
receiver = ['baby@qq.com', ](輸入你要發(fā)送人的郵箱)
# 指定消息體使用復(fù)合類(lèi)型
message = MIMEMultipart()
# 發(fā)件人顯式的名字
message['From'] = Header('拿頭來(lái)堅(jiān)持', 'utf-8')
# 收件人顯式的名字
message['To'] = Header('baby', 'utf-8')
# 郵件標(biāo)題
message['Subject'] = '爸爸來(lái)信,請(qǐng)接收!'
# 郵件正文
msg = '''
<p><a >拿頭來(lái)堅(jiān)持</p>
Life goes on, learning goes on
</p> <!----></div></div> <div class="user-profile-head-info-b" data-v-d1dbb6f8><ul data-v-d1dbb6f8><li data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>22,574</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>被訪問(wèn)量</div></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>24</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>原創(chuàng)文章</div></a></li> <li data-v-d1dbb6f8><a rel="external nofollow" rel="external nofollow" target="_blank" data-report-click="{"spm":"3001.5476"}" data-report-query="spm=3001.5476" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>128,997</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>作者排名</div></a></li> <li data-v-d1dbb6f8><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" data-v-d1dbb6f8><div class="user-profile-statistics-num" data-v-d1dbb6f8>762</div> <div class="user-profile-statistics-name" data-v-d1dbb6f8>粉絲數(shù)量</div></a></li></ul></div></div></div> <div class="user-profile-body" data-v-3f0fdf46 data-v-80922f46><div class="user-profile-body-inner" data-v-3f0fdf46><div class="user-profile-body-left" data-v-3f0fdf46><div class="user-profile-aside" data-v-d487ed78 data-v-3f0fdf46><div class="user-general-info single-general-info" data-v-d487ed78><ul data-v-d487ed78><!----> <!----> <li class="user-general-info-join-csdn" data-v-d487ed78><i data-v-d487ed78></i> <span data-v-d487ed78>于</span> <span class="user-general-info-key-word" data-v-d487ed78>2020-02-22</span> <span data-v-d487ed78>加入CSDN</span></li></ul></div> <!----> <div class="user-achievement user-profile-aside-common-box" data-v-d487ed78><div class="aside-common-box-head" data-v-d487ed78>獲得成就</div> <div class="aside-common-box-bottom" data-v-d487ed78><div class="aside-common-box-content" data-v-d487ed78><ul data-v-d487ed78><li data-v-d487ed78>
<i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022819.png)"></i>
<div>獲得<span>212</span>次點(diǎn)贊</div>
</li><li data-v-d487ed78>
<i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022831.png)"></i>
<div>內(nèi)容獲得<span>111</span>次評(píng)論</div>
</li><li data-v-d487ed78>
<i style="background-image: url(https://img-home.csdnimg.cn/images/20210114022828.png)"></i>
<div>獲得<span>562</span>次收藏</div>
'''
# 郵件附加html文件
message.attach(MIMEText(msg, 'html', 'utf-8'))
# 添加附件
attached_file = MIMEText(open(__file__, encoding='utf-8').read(), 'base64', 'utf-8')
# 指定附件的文件名和原先的文件不一樣
attached_file['Content-Disposition'] = 'attachment;filename="mail.py"'
# 郵件附加附件
message.attach(attached_file)
try:
# 使用QQ企業(yè)郵箱服務(wù)器發(fā)送
smtp = smtplib.SMTP('smtp.qq.com')
# 登錄
smtp.login(sender, password)
# 發(fā)送
smtp.sendmail(sender, receiver, message.as_string())
print('郵件發(fā)送成功!')
# 退出服務(wù)器
smtp.quit()
except smtplib.SMTPException as e:
print('Error!郵件發(fā)送失敗!', e)
發(fā)送帶附件的郵件執(zhí)行結(jié)果:

五、發(fā)送圖片的郵件
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header
# 郵箱用戶(hù)名
sender = 'dad@qq.com'(輸入你的郵箱)
# 郵箱密碼(部分郵箱為授權(quán)碼)
password = '123456'(輸入你的密碼)
# 收件人郵箱地址,注意需要[]包裹,這意味著你可以寫(xiě)多個(gè)郵件地址群發(fā)
receiver = ['baby@qq.com', ](輸入你要發(fā)送人的郵箱)
# 利用related定義內(nèi)嵌資源的郵件體
message = MIMEMultipart('related')
# 發(fā)件人顯式的名字
message['From'] = Header('拿頭來(lái)堅(jiān)持', 'utf-8')
# 收件人顯式的名字
message['To'] = Header('baby', 'utf-8')
# 郵件標(biāo)題
message['Subject'] = '爸爸來(lái)信,請(qǐng)接收!'
# 郵件正文
content = MIMEMultipart('alternative')
# html內(nèi)容
msg = '''
<p><a >拿頭來(lái)堅(jiān)持</p>
Life goes on, learning goes on
<p>
拿頭來(lái)堅(jiān)持的個(gè)人主頁(yè)
<img src='cid:img01'>
</p>
'''
# 郵件附加html文件
message.attach(MIMEText(msg, 'html', 'utf-8'))
# 添加圖片
with open('csdn.png', 'rb') as f:
img01 = MIMEImage(f.read())
# 定義資源的名字為img01
img01.add_header('Content-ID', 'img01')
# 郵件附加圖片
message.attach(img01)
try:
# 使用QQ企業(yè)郵箱服務(wù)器發(fā)送
smtp = smtplib.SMTP('smtp.qq.com')
# 登錄
smtp.login(sender, password)
# 發(fā)送
smtp.sendmail(sender, receiver, message.as_string())
print('郵件發(fā)送成功!')
# 退出服務(wù)器
smtp.quit()
except smtplib.SMTPException as e:
print('Error!郵件發(fā)送失?。?, e)
發(fā)送圖片的郵件執(zhí)行結(jié)果:

六、接收電子郵件
接受郵件有兩種常用的協(xié)議:POP3和IMAP協(xié)議
POP3協(xié)議(Post Office Protocol-Version3,即郵局協(xié)議版本3):允許電子郵件客戶(hù)端下載服務(wù)器上的郵件,但是在客戶(hù)端的操作(如移動(dòng)郵件、標(biāo)記已讀等)不會(huì)反饋到服務(wù)器上,比如通過(guò)客戶(hù)端收取了郵箱的3封郵件并移動(dòng)到其他文件夾,郵件服務(wù)器上的這些郵件不會(huì)被同步移動(dòng)。
IMAP協(xié)議(Internet Mail Access Protocol,即Internet郵件訪問(wèn)協(xié)議):提供Webmail與電子郵件客戶(hù)端之間的雙向通信,任何在客戶(hù)端做的改變都會(huì)同步到服務(wù)器上。在客戶(hù)端對(duì)郵件進(jìn)行了操作,服務(wù)器上的郵件也會(huì)進(jìn)行相應(yīng)的操作。
七、使用POP3協(xié)議下載郵件
import poplib
from email.parser import Parser
# 登錄郵箱的用戶(hù)名
username = 'baby@qq.com'(輸入你的郵箱)
# 登錄郵箱的密碼(部分郵箱為授權(quán)碼)
password = '123456'(輸入你的密碼)
# 連接郵箱服務(wù)器
pop_server = poplib.POP3('pop.qq.com')
# 打印出郵箱服務(wù)器的歡迎文字
print(pop_server.getwelcome())
# 登錄郵箱服務(wù)器
pop_server.user(username)
pop_server.pass_(password)
# 打印出當(dāng)前賬號(hào)的狀態(tài),第一個(gè)返回值為郵件數(shù),第二個(gè)返回值為占用空間
print('Server stat', pop_server.stat())
# 獲取所以郵件列表
resp, mails, octets = pop_server.list()
print(mails)
# 獲取最新的一封郵件(序列號(hào)最大的),郵件索引從1開(kāi)始計(jì)數(shù)
index = len(mails)
resp, lines, octets = pop_server.retr(index)
content = b'\r\n'.join(lines).decode('utf-8')
# 解析出郵件
msg = Parser().parsestr(content)
# 可以根據(jù)郵件索引號(hào)直接從服務(wù)器刪除郵件
# pop_server.dele(index)
# 關(guān)閉連接
pop_server.quit()
執(zhí)行結(jié)果:
b'+OK XMail POP3 Server v1.0 Service Ready(XMail v1.0)'
Server stat (15, 50814)
[b'1 1255', b'2 1286', b'3 1310', b'4 1398', b'5 1458', b'6 1450', b'7 1602', b'8 1633', b'9 5001', b'10 2347', b'11 2371', b'12 2267', b'13 5033', b'14 5077', b'15 17326']
如果正確連接上服務(wù)器并且列出郵件數(shù)量,說(shuō)明我們已經(jīng)正確使用了POP3協(xié)議。
到此這篇關(guān)于Python基礎(chǔ)詳解之郵件處理的文章就介紹到這了,更多相關(guān)python郵件處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python實(shí)現(xiàn)自動(dòng)化辦公郵件合并功能
- Python利用機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)垃圾郵件的識(shí)別
- Python 發(fā)送SMTP郵件的簡(jiǎn)單教程
- Python一行代碼實(shí)現(xiàn)自動(dòng)發(fā)郵件功能
- Python 調(diào)用API發(fā)送郵件
- Python基于SMTP發(fā)送郵件的方法
- python基于SMTP發(fā)送QQ郵件
- python 自動(dòng)監(jiān)控最新郵件并讀取的操作
- python實(shí)現(xiàn)發(fā)送郵件
- python 實(shí)現(xiàn)網(wǎng)易郵箱郵件閱讀和刪除的輔助小腳本
- python如何發(fā)送帶有附件、正文為HTML的郵件
- python使用Windows的wmic命令監(jiān)控文件運(yùn)行狀況,如有異常發(fā)送郵件報(bào)警
- 用python監(jiān)控服務(wù)器的cpu,磁盤(pán)空間,內(nèi)存,超過(guò)郵件報(bào)警
- python郵件中附加文字、html、圖片、附件實(shí)現(xiàn)方法
- Python用20行代碼實(shí)現(xiàn)完整郵件功能
相關(guān)文章
Python 新建文件夾與復(fù)制文件夾內(nèi)所有內(nèi)容的方法
今天小編就為大家分享一篇Python 新建文件夾與復(fù)制文件夾內(nèi)所有內(nèi)容的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
Python實(shí)現(xiàn)提取或替換PPT中文本與圖片的示例代碼
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)提取保存ppt中的圖片和替換ppt模板的文本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-01-01
python 實(shí)現(xiàn)全球IP歸屬地查詢(xún)工具
這篇文章主要介紹了python 實(shí)現(xiàn)全球IP歸屬地查詢(xún)工具的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12
python中第三方庫(kù)lxml庫(kù)的最新詳細(xì)安裝步驟
這篇文章主要給大家介紹了關(guān)于python中第三方庫(kù)lxml庫(kù)的最新詳細(xì)安裝步驟,lxml是一種使用Python編寫(xiě)的庫(kù),可以迅速、靈活地處理 XML,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
python自動(dòng)計(jì)算圖像數(shù)據(jù)集的RGB均值
這篇文章主要為大家詳細(xì)介紹了python自動(dòng)計(jì)算圖像數(shù)據(jù)集的RGB均值,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06

