<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          看我用Python一秒發(fā)送數(shù)百份郵件,讓財(cái)務(wù)部妹子追著喊666!

          共 3672字,需瀏覽 8分鐘

           ·

          2021-01-28 18:26

          ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

          后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包


          今天再分享一個(gè)如何用幾行Python代碼讓財(cái)務(wù)部妹子追著喊666的實(shí)用案例。

          需求描述

          最近公司要發(fā)獎(jiǎng)金,需要財(cái)務(wù)部妹子給每個(gè)員工發(fā)一封郵件,現(xiàn)在全公司 10 個(gè)部門每個(gè)人的獎(jiǎng)金情況已經(jīng)計(jì)算好了,并根據(jù)部門分別制作了 10 張表格:

          每個(gè)獎(jiǎng)金表格內(nèi)容大致如下:

          同時(shí)有一份 Excel 文件郵件地址.xlsx,里面有各部門負(fù)責(zé)人的郵箱:

          首先第一個(gè)需求很簡單:給各部門負(fù)責(zé)人發(fā)送相應(yīng)部門的獎(jiǎng)金附件

          這個(gè)需求不同于群發(fā),只要把所有人郵件地址加進(jìn)來一鍵發(fā)送就可以,而是需要點(diǎn)對(duì)點(diǎn)的單發(fā)郵件。如果部門或者收件人的數(shù)量繼續(xù)增加,無非會(huì)增加工作難度、降低工作效率,因此需要 Python 出手解決。

          當(dāng)然如果就這么點(diǎn)小事,妹子辛苦一點(diǎn)手動(dòng)發(fā)送也能解決,下面還有一個(gè)需求??

          原有部門獎(jiǎng)金表格新增加了一列個(gè)人郵箱(郵箱地址均為虛構(gòu)),如下

          不同于上面需求,給部分負(fù)責(zé)人發(fā)送總獎(jiǎng)金表格的同時(shí),也需要給各部分每一個(gè)人發(fā)送自己的獎(jiǎng)金金額,發(fā)送內(nèi)容為:

          尊敬的xxx部門 xxx 您好,您的工號(hào)是 xxx,您2020年的獎(jiǎng)金為 xxx

          這個(gè)需求如果再手動(dòng)的話,工作量瞬間就上去了,下面我們講解如何用Python優(yōu)雅、快速的解決!

          邏輯梳理

          初級(jí)需求是一個(gè)點(diǎn)對(duì)點(diǎn)單獨(dú)發(fā)送,簡單的思路可以是:

          • 逐行遍歷 郵件地址.xlsx 取各部門名稱和負(fù)責(zé)人郵箱地址

          • 根據(jù)部門名稱去 獎(jiǎng)金發(fā)放 文件夾下獲取 獎(jiǎng)金_部門名稱.xlsx 作為附件

          • 再遍歷 郵件地址.xlsx的循環(huán)體內(nèi)完成郵件的發(fā)送

          如果加上了個(gè)人郵箱其實(shí)也很簡單,在原先代碼的基礎(chǔ)上打開并遍歷 獎(jiǎng)金_部門名稱.xlsx 文件,獲取每個(gè)人的工號(hào)、姓名、郵箱地址、獎(jiǎng)金數(shù),而部門在打開 Excel 時(shí)就確定了,最后根據(jù)上面獲取的信息用 yagmail 組裝成新的郵件信息并發(fā)送

          代碼實(shí)現(xiàn)

          先著手實(shí)現(xiàn)基本需求。由于只涉及 Excel 文件的讀取以及郵件的發(fā)送,需要導(dǎo)入 openpyxlload_workbook 方法以及 yagmail 庫,如果不把密碼(授權(quán)碼)明文顯示而存儲(chǔ)在系統(tǒng)密鑰環(huán)中則需要額外導(dǎo)入 keyring

          from?openpyxl?import?load_workbook
          import?yagmail
          import?keyring

          password?=?keyring.get_password('yagmail',?'username')
          #?需要在命令號(hào)中用?keyring.set_password('yagmail',?username,?password)?預(yù)先存好

          讀取并遍歷 郵件地址.xlsx

          path?=?r'C:\xxx'?#?根據(jù)實(shí)際附件文件和郵件地址?Excel?文件存放的路徑確定
          workbook?=?load_workbook(path?+?r'\郵件地址.xlsx')
          sheet?=?workbook.active

          n?=?0?#?設(shè)置變量跳過表頭
          for?row?in?sheet.rows:
          ????if?n:
          ????????department?=?row[0].value
          ????????dep_address?=?row[1].value
          ????????print(department,?dep_address)
          ????n?+=?1

          解析完成后就可以組裝準(zhǔn)備發(fā)送的郵件了。以用 QQ 郵箱發(fā)送郵件為例,復(fù)習(xí)一下組裝郵件需要的內(nèi)容:

          #?用服務(wù)器、用戶名、密碼實(shí)例化郵件
          mail?=?yagmail.SMTP(user='[email protected]',?password?=?password,?host='smtp.qq.com')?
          #?待發(fā)送的內(nèi)容
          contents?=?['第一段內(nèi)容',?'第二段內(nèi)容']
          #?發(fā)送郵件
          mail.send('收件人郵箱',?'郵件標(biāo)題',?contents)?

          如果在 contents 中放絕對(duì)路徑,yagmail 會(huì)自動(dòng)將其作為附件,非常智能。這也是本需求能實(shí)現(xiàn)的重要依托。

          復(fù)習(xí)了這些知識(shí)點(diǎn)我們就可以完善上面的遍歷代碼

          n?=?0
          for?row?in?sheet.rows:
          ????if?n:
          ????????department?=?row[0].value
          ????????dep_address?=?row[1].value
          ????????#?print(department,?dep_address)
          ????????mail_dep?=?yagmail.SMTP(user='[email protected]',?password=password,?host='smtp.qq.com')
          ????????contents?=?[f'您好,請(qǐng)查收{department}的獎(jiǎng)金情況',?path?+?f'\獎(jiǎng)金發(fā)放\獎(jiǎng)金_{department}']
          ????????mail_dep.send(dep_address,?f'{department}獎(jiǎng)金情況',?contents)
          ????n?+=?1

          基本需求完成后,就考慮升級(jí)的需求

          兩個(gè)需求銜接的關(guān)鍵在于確定好給哪個(gè)部門的負(fù)責(zé)人發(fā)郵件時(shí),就打開這個(gè)部門的獎(jiǎng)金情況表,先給部門成員一一發(fā)文字郵件,最后給部門負(fù)責(zé)人發(fā)附件。

          如果梳理清楚這一環(huán),那么循環(huán)的嵌套關(guān)系就很明確了:

          n?=?0
          for?row?in?sheet.rows:
          ????if?n:
          ????????department?=?row[0].value
          ????????dep_address?=?row[1].value
          ????????#?print(department,?dep_address)
          ????????mail_dep?=?yagmail.SMTP(user='[email protected]',?password=password,?host='smtp.qq.com')

          ????????#?這一部分就是升級(jí)需求的代碼
          ????????#?根據(jù)前面的部門信息打開相應(yīng)的表格獲取每個(gè)人的情況
          ????????workbook_new?=?load_workbook(path?+?f'\獎(jiǎng)金發(fā)放\獎(jiǎng)金_{department}')
          ????????sheet_new?=?workbook_new.active
          ????????m?=?0
          ????????for?i?in?sheet_new.rows:
          ????????????if?m:
          ????????????????id?=?i[0].value?#?工號(hào)
          ????????????????name?=?i[1].value?#?姓名
          ????????????????address?=?i[2].value?#?個(gè)人郵箱地址
          ????????????????money?=?i[3].value?#?獎(jiǎng)金數(shù)
          ????????????????#?根據(jù)獲取到的個(gè)人信息組裝成新的郵件發(fā)送
          ????????????????mail?=?yagmail.SMTP(user='[email protected]',?password=password,?host='smtp.qq.com')
          ????????????????contents?=?[f'尊敬的?{department}?{name}?您好,您的工號(hào)是?{id},您2020年的獎(jiǎng)金為?{money}']
          ????????????????mail.send(address,?f'{department}-{name}獎(jiǎng)金情況',?contents)????????????????
          ????????????m?+=?1

          ????????contents_dep?=?[f'您好,請(qǐng)查收{department}的獎(jiǎng)金情況',?path?+?f'\獎(jiǎng)金發(fā)放\獎(jiǎng)金_{department}']
          ????????mail_dep.send(dep_address,?f'{department}獎(jiǎng)金情況',?contents_dep)
          ????n?+=?1

          因本文的郵箱都是虛構(gòu)的,就不展示具體發(fā)送成功的效果了。

          至此,短短30余行代碼就成功安撫了妹子交集的心態(tài),并約個(gè)飯希望好好聊一聊如何用Python偷懶,這些就不再分享了

          見面禮


          碼加我微信備注「三劍客」送你上圖三本Python入門電子書?


          推薦閱讀


          1. 太火爆了!這一款小游戲火到把服務(wù)器搞癱瘓,合成大西瓜

          2. 全球最大色情網(wǎng)站宣布:封殺特朗普

          3. 費(fèi)解!為什么那么多人用“ji32k7au4a83”作密碼?

          4. 火了!開源的Python搶票神器,過年回家就看這一波了!

          5. 為什么 Django 框架比Flask框架更流行?


          點(diǎn)分享
          點(diǎn)收藏
          點(diǎn)點(diǎn)贊
          點(diǎn)在看
          瀏覽 41
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕无码视频在线 | 日日夜夜精品免费看 | 日韩电影一区二区三区不卡 | 黄色视频福利导航 | 日韩黄色真人直播 |