Python發(fā)送郵件

一、相關(guān)庫介紹

1)yagmail
  • Yet Another GMAIL/SMTP client;
  • 非常方便的SMTP包,超簡(jiǎn)單的Python發(fā)郵件模塊;
  • 需要單獨(dú)安裝,不包含在Python標(biāo)準(zhǔn)模塊里;
  • yagmail官網(wǎng)鏈接
2)keyring
  • 從Python訪問系統(tǒng)密鑰環(huán)服務(wù)(即密碼不用直接寫在代碼里);
  • 方便、安全地儲(chǔ)存你的密碼;
  • 需要單獨(dú)安裝,不包含在Python標(biāo)準(zhǔn)模塊里;
  • keyring官網(wǎng)鏈接
3)schedule
  • 超容易理解的定時(shí)任務(wù)執(zhí)行器;
  • 需要單獨(dú)安裝,不包含在Python標(biāo)準(zhǔn)模塊里;
  • schedule官網(wǎng)鏈接
4)imbox
  • 簡(jiǎn)易的Python IMAP包;
  • 進(jìn)行IMAP相關(guān)的操作;
  • 需要單獨(dú)安裝,不包含在Python標(biāo)準(zhǔn)模塊里;
  • imbox官網(wǎng)鏈接
5)上述庫安裝
pip install yagmail keyring schedule imbox

二、利用python發(fā)送郵件

1)郵件相關(guān)基礎(chǔ)知識(shí)
  • POP3:Post Office Protocol3的簡(jiǎn)稱,即郵局協(xié)議的第3個(gè)版本,它規(guī)定怎樣將個(gè)人計(jì)算機(jī)連接到Internet的郵件服務(wù)器和下載電子郵件的電子協(xié)議。
  • SMTP:Simple Mail Transfer Protocol,即簡(jiǎn)單郵件傳輸協(xié)議。
  • IMAP:Internet Mail Access Protocol,即交互式郵件存取協(xié)議,它是跟POP3類似郵件訪問標(biāo)準(zhǔn)協(xié)議之一。
  • 注意:寫代碼發(fā)郵件時(shí)一定要注意不能頻繁發(fā)送!容易被當(dāng)做垃圾郵件被屏蔽??!
2)python發(fā)送郵件流程(以“QQ郵箱”為例,進(jìn)行說明)
① 注冊(cè)一個(gè)QQ郵箱,開通POP3/SMTP/IMAP

點(diǎn)擊設(shè)置--》賬戶--》開啟如下服務(wù)

注意:開啟過程中,需要發(fā)送短信驗(yàn)證,此時(shí)會(huì)出現(xiàn)一個(gè)第三方密碼,這個(gè)第三方密碼在使用第三方軟件登陸的時(shí)候,用該密碼代替你的扣扣登陸密碼。

② 找到SMTP和IMAP服務(wù)器的地址
③ 發(fā)送郵件之前,先使用yagmail存儲(chǔ)你的郵件地址和密碼

注意:這兩行代碼,是用于存儲(chǔ)你的郵件地址和密碼,當(dāng)你執(zhí)行這行代碼后。你后面發(fā)送郵件的時(shí)候,就只需要顯示給出你賬號(hào)即可,而不用再把密碼顯示出來。

④ 發(fā)送第一封測(cè)試郵件
import yagmail
# 這里的user填寫的是你的扣扣郵箱賬號(hào),可以看出這里并沒有寫我們的“密碼”
yag = yagmail.SMTP(user="××××××××××@qq.com",host="smtp.qq.com")

contents = ["這是第一段正文內(nèi)容","這是第二段正文內(nèi)容"]
# 這里填寫的是你要發(fā)送的人的扣扣郵箱
yag.send("××××××××××@qq.com","這是一封郵件",contents)
"""
特別備注一下:
這里可以看到,我們發(fā)送郵件的時(shí)候,此時(shí)就沒有顯示給出密碼了。
這樣做相對(duì)來說較為安全,這就是yagmail庫的好處。
"""

結(jié)果如下:

⑤ 發(fā)送帶HTML樣式的郵件
import yagmail

yag = yagmail.SMTP(user="××××××××××@qq.com",host="smtp.qq.com")

contents = [
            '這是第一段正文內(nèi)容',
            '這是第二段正文內(nèi)容', 
           '百度網(wǎng)站'
                 ]

yag.send("××××××××××@qq.com","這是一封郵件",contents)

結(jié)果如下:

⑥ 發(fā)送帶附件的郵件
import yagmail

yag = yagmail.SMTP(user="××××××××××@qq.com",host="smtp.qq.com")

contents = [
            '這是第一段正文內(nèi)容',
            '這是第二段正文內(nèi)容', 
            '百度網(wǎng)站',
            'G:\\6Tipdm\\7python辦公自動(dòng)化\\我創(chuàng)建的壓縮包.zip'
                   ]
yag.send("××××××××××@qq.com","這是一封郵件",contents)

結(jié)果如下:

⑦ 發(fā)送帶嵌入圖片的郵件
import yagmail

yag = yagmail.SMTP(user="××××××××××@qq.com",host="smtp.qq.com")

contents = [
                  '親愛的××老婆', 
                  '我愛你', 
                  yagmail.inline('G:\\6Tipdm\\7python辦公自動(dòng)化\\老婆.png')
                  ]

yag.send("××××××××××@qq.com","這是一封郵件",contents)
⑧ 群發(fā)郵件
import yagmail

yag = yagmail.SMTP(user="1127421544@qq.com",host="smtp.qq.com")

contents = [
          '這是第一段正文內(nèi)容',  
          '這是第二段正文內(nèi)容',  
          '百度網(wǎng)站',            
         'G:\\6Tipdm\\7python辦公自動(dòng)化\\我創(chuàng)建的壓縮包.zip']
# 定義一個(gè)收件人列表
shoujian_ren = [
                          "×1×@qq.com",
                          "×2×@qq.com",
                          "×3×@qq.com"
                           ]

yag.send(shoujian_ren,"這是一封郵件",contents)
⑨ 定時(shí)發(fā)送郵件

利用這個(gè)功能,你可以定時(shí)給你女朋友發(fā)送郵件,表達(dá)你的關(guān)心,以免自給由于工作忙,而忽略了自己的女朋友。

import timeimport schedule
import yagmail
import datetime

def morning(): 
    content = ["親愛的,記得吃早飯哦!"]
    yag = yagmail.SMTP(user="1127421544@qq.com",host="smtp.qq.com") 
    yag.send("1127421544@qq.com","這是一封郵件",content)
def afternoon(): 
    content = ["親愛的,記得吃中飯哦!"] 
    yag = yagmail.SMTP(user="1127421544@qq.com",host="smtp.qq.com")  
    yag.send("1127421544@qq.com","這是一封郵件",content)
def evering(): 
    content = ["親愛的,記得吃晚飯哦!"] 
    yag = yagmail.SMTP(user="1127421544@qq.com",host="smtp.qq.com")
    yag.send("1127421544@qq.com","這是一封郵件",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:    
# 當(dāng)代碼完成了這一天的任務(wù)以后,自動(dòng)結(jié)束任務(wù)
    if datetime.datetime.now().strftime("%H:%M") == "17:31":
        break
    schedule.run_pending()
    time.sleep(1)
"""
# 每十分鐘,執(zhí)行一次任務(wù)
schedule.every(10).minutes.do(job)
# 每小時(shí),執(zhí)行一次任務(wù)
schedule.every().hour.do(job)
# 每天上午十點(diǎn)半,執(zhí)行一次任務(wù)
schedule.every().day.at("10:30").do(job)
# 每5-10鐘,執(zhí)行一次任務(wù)
schedule.every(5).to(10).minutes.do(job)
# 每周一,執(zhí)行一次任務(wù)
schedule.every().monday.do(job)
# 每周三下午一點(diǎn)十五分,執(zhí)行一次任務(wù)
schedule.every().wednesday.at("13:15").do(job)
# 每分鐘的第十七秒,執(zhí)行一次任務(wù)
schedule.every().minute.at(":17").do(job)
"""

三、利用python讀取郵件


代碼如下:

from imbox import Imbox
import keyring
# "1127421544@qq.com"是你的郵箱賬號(hào)
pwd = keyring.get_password("yagmail", "1127421544@qq.com")
# "imap.qq.com"是你的IMAP郵箱服務(wù)器地址
with Imbox("imap.qq.com","1127421544@qq.com",pwd,ssl=True) as imbox: 
    all_inbox_messages = imbox.messages()
    for uid, message in all_inbox_messages:
        print(message.subject)
        print(message.body["plain"])

如何讀取未讀郵件,只需要添加一個(gè)參數(shù):


如果只想看紅旗標(biāo)記的郵件,應(yīng)該怎么辦:


如果只想看來自某個(gè)人的郵件,應(yīng)該怎么做:


如何按照日期篩選郵件:


設(shè)置標(biāo)記已讀和刪除郵件:

[學(xué)習(xí)來源(https://mp.weixin.qq.com/s?__biz=MjM5NTY1MjY0MQ==&mid=2650751575&idx=2&sn=a02470cca96264476a1fbf7a5ee67c53&chksm=befed71989895e0fdbedde48fa395bea95484b99343de6d6c712c2500eddd873b02d2c550e05&mpshare=1&scene=1&srcid=&sharer_sharetime=1589850547234&sharer_shareid=72accb3dd31b512c8e3e2a95dffe89be&key=92c6112881e5be1a515ed5e2d413487c19714f12b2604314aa05944189a91f848e402961c03ec234d9fc6001db4805a78e17c49c2ad2f84cc2e44ea521533c40be1142cc3d118b6ea621e3849a22bff6&ascene=1&uin=MjUxNDAwODcwNA%3D%3D&devicetype=Windows+10+x64&version=62090070&lang=zh_CN&exportkey=AR%2FtiGmmTisaPAeSNR4DhFw%3D&pass_ticket=i8igfCh2Uh74idfuzP3CDH66r1XESJBBfxVHC0P7hy7WOlbJlNWW6ZHC%2Fo041uAQ)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容