<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
想象一下,現在你有一份Word邀請函模板,然後你有一份客戶列表,上面有客戶的姓名、聯絡方式、郵箱等基本資訊,然後你的老闆現在需要替換邀請函模板中的姓名,然後將Word邀請函模板生成Pdf格式,之後編輯統一的邀請話術(郵件正文),再依次傳送邀請函附件到客戶郵箱,你會怎麼做?
正常情況下,我們肯定是複製貼上Excel表格中的客戶姓名,之後挨個Word檔案進行替換,之後將Word轉Pdf格式,然後複製Excel表格中的郵箱進行傳送編輯好的郵件正常,之後附上邀請函附件,點選傳送,大概算一下,激情高昂的狀態下,這個流程快的話,大概需要1分鐘甚至更多。如果客戶只有幾十個就還好,一個小時就可以搞定,如果客戶有幾百個,上千個,甚至上萬個呢?那估計要哭暈在辦公室了。
不過別慌,Python自動化辦公,一套組合拳,使用Python自動化辦公——Word檔案替換、Excel表格讀取、Pdf檔案生成和Email自動郵件傳送一條龍服務安排,下面一起來看看吧!
1)替換Word模板生成對應邀請函
這裡以上面的Word模板做案例,編寫一個函數以客戶姓名進行替換模板中的,一步到位。
def get_invitation(name): doc = docx.Document("template.docx") for para in doc.paragraphs: if '<name>' in para.text: for run in para.runs: if '<name>' in run.text: runrun.text = run.text.replace('<name>', name) doc.save(f'./邀請函/{name}.docx')
上面這個程式碼需要理解Word檔案的結構,一個檔案有多個段落,用doc.paragraphs獲取;段落中的文字用para.text獲取;一個段落中可能有多個不同樣式的文字,這些不同的樣式被稱為run,一個段落中包含多個run,用para.runs獲取,一個run中的具體文字用run.text獲取。瞭解了這些,再看上述程式碼,是不是清晰很多呢?
2)將Word邀請函轉化為Pdf格式
這個就簡單很多了,Python自動化辦公中,一行程式碼就可以實現,而且速度還十分快。
from docx2pdf import convert convert(f"./邀請函/{name}.docx")
使用convert()函數可以把docx格式的檔案轉換成同名的Pdf檔案。
3)讀取Excel表格中的姓名和郵箱
這裡需要用到openpyxl庫了,當然關於Excel的庫還是很多的,這裡以這個庫作為範例,程式碼如下:
def get_username_email(): workbook = openpyxl.load_workbook("names.xlsx") worksheet = workbook.active for index, row in enumerate(worksheet.rows): if index > 0: name = row[0].value # 獲取表格第一列的姓名 email = row[3].value # 獲取表格第四列的郵箱 # print(name, email) # print(f"{name}邀請函正在生成...") # get_invitation(name) send_email(name, email)
上面的程式碼,理解起來應該並不難,讀取Excel中的姓名和郵箱,之後傳到get_invitation()生成邀請函,之後傳給send_email()函數中自動傳送郵件。實際上,這兩部是分開進行的,這裡是先執行get_invitation()函數,先生成邀請函,之後再將該函數註釋掉,再執行傳送郵件函數,
4)自動傳送郵件
關於自動傳送郵件,歷史文章中也曾經發布過好幾篇了,這裡繼續用上了,一開始我也覺得挺難的,後來發現也沒有想的那麼複雜,程式碼如下:
smtp = smtplib.SMTP(host="smtp.qq.com", port=587) # smtp.login(郵箱, 授權碼) smtp.login('235977@qq.com', "ruybefkipoo") def send_email(name, email): msg = MIMEMultipart() msg["subject"] = f"您好,{name},您的邀請函!" msg["from"] = "2352180977@qq.com" msg["to"] = email html_content = f""" <html> <body> <p>您好:{name}<br> <b>歡迎加入Python進階者學習交流群,請在附件中查收您的門票~</b><br> 點選這裡瞭解更多:<a href="https://www.pdcfighting.com" rel="external nofollow" rel="external nofollow" >演唱會主頁</a> </p> </body> </html> """ html_part = MIMEText(html_content, "html") msg.attach(html_part) with open(f"./邀請函/{name}.pdf", "rb") as f: doc_part = MIMEApplication(f.read()) doc_part.add_header("Content-Disposition", "attachment", filename=name) # 把附件新增到郵件中 msg.attach(doc_part) # 傳送前面準備好的郵件 smtp.send_message(msg) # 如果放到外邊登入,這裡就不用退出伺服器連線,所以註釋掉了 # smtp.quit()
這裡需要注意三點,其一是郵箱登入放在了函數外邊,防止函數多次呼叫,短時間多次請求登入郵箱被封禁;其二郵箱登入裡邊用的是授權碼,而不是你的郵箱登入密碼,這裡使用的是qq郵箱做範例,其他郵箱需要更改smtp服務;其三這個程式碼裡邊除了正文中參照了html寫法,還攜帶了Pdf格式的邀請函附件,稍顯複雜。
5)完整程式碼
以上四個步驟進行拆分了,依次完成了Word檔案替換、Excel表格讀取、Pdf檔案生成和Email自動郵件傳送任務,這裡附上完整的程式碼。
import docx from docx2pdf import convert import openpyxl import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication # 生成對應的邀請函,並轉存pdf格式 def get_invitation(name): doc = docx.Document("template.docx") for para in doc.paragraphs: if '<name>' in para.text: for run in para.runs: if '<name>' in run.text: runrun.text = run.text.replace('<name>', name) doc.save(f'./邀請函/{name}.docx') convert(f"./邀請函/{name}.docx") smtp = smtplib.SMTP(host="smtp.qq.com", port=587) smtp.login('235977@qq.com', "ruybefkipoo") def send_email(name, email): msg = MIMEMultipart() msg["subject"] = f"您好,{name},您的邀請函!" msg["from"] = "2352180977@qq.com" msg["to"] = email html_content = f""" <html> <body> <p>您好:{name} <b>歡迎加入Python進階者學習交流群,請在附件中查收您的門票~</b> 點選這裡瞭解更多:<a href="https://www.pdcfighting.com" rel="external nofollow" rel="external nofollow" >演唱會主頁</a> </p> </body> </html> """ html_part = MIMEText(html_content, "html") msg.attach(html_part) with open(f"./邀請函/{name}.pdf", "rb") as f: doc_part = MIMEApplication(f.read()) doc_part.add_header("Content-Disposition", "attachment", filename=name) # 把附件新增到郵件中 msg.attach(doc_part) # 傳送前面準備好的郵件 smtp.send_message(msg) # 如果放到外邊登入,這裡就不用退出伺服器連線,所以註釋掉了 # smtp.quit() def get_username_email(): workbook = openpyxl.load_workbook("names.xlsx") worksheet = workbook.active for index, row in enumerate(worksheet.rows): if index > 0: name = row[0].value email = row[3].value # print(name, email) # print(f"{name}邀請函正在生成...") # get_invitation(name) send_email(name, email) if __name__ == '__main__': get_username_email() # get_invitation('Python進階者')
這篇文章基於Python自動化辦公,主要介紹了使用Python相關庫,依次完成Word檔案替換、Excel表格讀取、Pdf檔案生成和Email自動郵件傳送任務。程式執行之後,邀請函會自動生成,然後郵件會自動傳送,速度也非常快,給幾百個、上千個客戶傳送邀請函就不害怕了,如果有上萬個客戶,可能需要藉助第三方平臺輔助了,畢竟一般的普通郵箱,每日傳送郵箱數是有限制的。
到此這篇關於Python自動化辦公之群發郵件案例詳解的文章就介紹到這了,更多相關Python群發郵件內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45