目錄
1、相關庫介紹
1)yagmail
2)keyring
3)schedule
4)imbox
2、利用python發送郵件
1)郵件相關基礎知識
2)python發送郵件流程(以“QQ郵箱”爲例,進行說明)
① 註冊一個QQ郵箱,開通POP3/SMTP/IMAP
② 找到SMTP和IMAP服務器的地址
③ 發送郵件之前,先使用yagmail存儲你的郵件地址和密碼
④ 發送第一封測試郵件
⑤ 發送帶HTML樣式的郵件
⑥ 發送帶附件的郵件
⑦ 發送帶嵌入圖片的郵件
⑧ 羣發郵件
⑨ 定時發送郵件
3、利用python讀取郵件
1、相關庫介紹
1)yagmail
- Yet Another GMAIL/SMTP client;
- 非常方便的SMTP包,超簡單的Python發郵件模塊;
- 需要單獨安裝,不包含在Python標準模塊裏;
- yagmail官網鏈接
2)keyring
- 從Python訪問系統密鑰環服務(即密碼不用直接寫在代碼裏);
- 方便、安全地儲存你的密碼;
- 需要單獨安裝,不包含在Python標準模塊裏;
- keyring官網鏈接
3)schedule
- 超容易理解的定時任務執行器;
- 需要單獨安裝,不包含在Python標準模塊裏;
- schedule官網鏈接
4)imbox
- 簡易的Python IMAP包;
- 進行IMAP相關的操作;
- 需要單獨安裝,不包含在Python標準模塊裏;
- imbox官網鏈接
5)上述庫安裝
pip install yagmail keyring schedule imbox
2、利用python發送郵件
1)郵件相關基礎知識
- POP3:Post Office Protocol3的簡稱,即郵局協議的第3個版本,它規定怎樣將個人計算機連接到Internet的郵件服務器和下載電子郵件的電子協議。
- SMTP:Simple Mail Transfer Protocol,即簡單郵件傳輸協議。
- IMAP:Internet Mail Access Protocol,即交互式郵件存取協議,它是跟POP3類似郵件訪問標準協議之一。
- 注意:寫代碼發郵件時一定要注意不能頻繁發送!容易被當做垃圾郵件被屏蔽!!
2)python發送郵件流程(以“QQ郵箱”爲例,進行說明)
① 註冊一個QQ郵箱,開通POP3/SMTP/IMAP
點擊設置–》賬戶–》開啓如下服務
注意:開啓過程中,需要發送短信驗證,此時會出現一個第三方密碼,這個第三方密碼在使用第三方軟件登陸的時候,用該密碼代替你的扣扣登陸密碼。
② 找到SMTP和IMAP服務器的地址
③ 發送郵件之前,先使用yagmail存儲你的郵件地址和密碼
注意:這兩行代碼,是用於存儲你的郵件地址和密碼,當你執行這行代碼後。你後面發送郵件的時候,就只需要顯示給出你賬號即可,而不用再把密碼顯示出來。
④ 發送第一封測試郵件
import yagmail
# 這裏的user填寫的是你的扣扣郵箱賬號,可以看出這裏並沒有寫我們的“密碼”
yag = yagmail.SMTP(user="××××××××××@qq.com",host="smtp.qq.com")
contents = ["這是第一段正文內容","這是第二段正文內容"]
# 這裏填寫的是你要發送的人的扣扣郵箱
yag.send("××××××××××@qq.com","這是一封郵件",contents)
"""
特別備註一下:這裏可以看到,我們發送郵件的時候,此時就沒有顯示給出密碼了。
這樣做相對來說較爲安全,這就是yagmail庫的好處。
"""
結果如下:
⑤ 發送帶HTML樣式的郵件
import yagmail
yag = yagmail.SMTP(user="××××××××××@qq.com",host="smtp.qq.com")
contents = ['這是第一段正文內容',
'這是第二段正文內容',
'<a href="https://www.baidu.com">百度網站</a>']
yag.send("××××××××××@qq.com","這是一封郵件",contents)
結果如下:
⑥ 發送帶附件的郵件
import yagmail
yag = yagmail.SMTP(user="××××××××××@qq.com",host="smtp.qq.com")
contents = ['這是第一段正文內容',
'這是第二段正文內容',
'<a href="https://www.baidu.com">百度網站</a>',
'G:\\6Tipdm\\7python辦公自動化\\我創建的壓縮包.zip']
yag.send("××××××××××@qq.com","這是一封郵件",contents)
結果如下:
⑦ 發送帶嵌入圖片的郵件
import yagmail
yag = yagmail.SMTP(user="××××××××××@qq.com",host="smtp.qq.com")
contents = ['親愛的××老婆',
'我愛你',
yagmail.inline('G:\\6Tipdm\\7python辦公自動化\\老婆.png')]
yag.send("××××××××××@qq.com","這是一封郵件",contents)
⑧ 羣發郵件
import yagmail
yag = yagmail.SMTP(user="[email protected]",host="smtp.qq.com")
contents = ['這是第一段正文內容',
'這是第二段正文內容',
'<a href="https://www.baidu.com">百度網站</a>',
'G:\\6Tipdm\\7python辦公自動化\\我創建的壓縮包.zip']
# 定義一個收件人列表
shoujian_ren = ["×1×@qq.com","×2×@qq.com","×3×@qq.com"]
yag.send(shoujian_ren,"這是一封郵件",contents)
⑨ 定時發送郵件
利用這個功能,你可以定時給你女朋友發送郵件,表達你的關心,以免自給由於工作忙,而忽略了自己的女朋友。
import time
import schedule
import yagmail
import datetime
def morning():
content = ["親愛的,記得吃早飯哦!"]
yag = yagmail.SMTP(user="[email protected]",host="smtp.qq.com")
yag.send("[email protected]","這是一封郵件",content)
def afternoon():
content = ["親愛的,記得吃中飯哦!"]
yag = yagmail.SMTP(user="[email protected]",host="smtp.qq.com")
yag.send("[email protected]","這是一封郵件",content)
def evering():
content = ["親愛的,記得吃晚飯哦!"]
yag = yagmail.SMTP(user="[email protected]",host="smtp.qq.com")
yag.send("[email protected]","這是一封郵件",content)
schedule.every().day.at("07:30").do(morning)
schedule.every().day.at("11:30").do(afternoon)
schedule.every().day.at("17:30").do(evering)
while True:
# 當代碼完成了這一天的任務以後,自動結束任務
if datetime.datetime.now().strftime("%H:%M") == "17:31":
break
schedule.run_pending()
time.sleep(1)
"""
# 每十分鐘,執行一次任務
schedule.every(10).minutes.do(job)
# 每小時,執行一次任務
schedule.every().hour.do(job)
# 每天上午十點半,執行一次任務
schedule.every().day.at("10:30").do(job)
# 每5-10鍾,執行一次任務
schedule.every(5).to(10).minutes.do(job)
# 每週一,執行一次任務
schedule.every().monday.do(job)
# 每週三下午一點十五分,執行一次任務
schedule.every().wednesday.at("13:15").do(job)
# 每分鐘的第十七秒,執行一次任務
schedule.every().minute.at(":17").do(job)
"""
3、利用python讀取郵件
代碼如下:
from imbox import Imbox
import keyring
# "[email protected]"是你的郵箱賬號
pwd = keyring.get_password("yagmail", "[email protected]")
# "imap.qq.com"是你的IMAP郵箱服務器地址
with Imbox("imap.qq.com","[email protected]",pwd,ssl=True) as imbox:
all_inbox_messages = imbox.messages()
for uid, message in all_inbox_messages:
print(message.subject)
print(message.body["plain"])
如何讀取未讀郵件,只需要添加一個參數:
如果只想看紅旗標記的郵件,應該怎麼辦:
如果只想看來自某個人的郵件,應該怎麼做:
如何按照日期篩選郵件:
設置標記已讀和刪除郵件: