使用Python實現(xiàn)批量發(fā)送個性化郵件
前言
在現(xiàn)代工作環(huán)境中,我們經(jīng)常需要向多個收件人發(fā)送個性化的郵件。通過使用Python編程語言,我們可以自動化這個過程,從Excel文件中讀取收件人和相關(guān)數(shù)據(jù),并發(fā)送定制的郵件。
首先,導(dǎo)入所需的庫
import pandas as pd import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.application import MIMEApplication import os from email.header import Header
然后,設(shè)置發(fā)件人郵箱和密碼
sender_email = 'your_email@example.com' sender_password = 'your_password'
接下來,設(shè)置SMTP服務(wù)器和端口號(根據(jù)你使用的郵件服務(wù)提供商)
smtp_server = 'smtp.example.com' smtp_port = 587
創(chuàng)建SMTP連接并登錄到郵箱
server = smtplib.SMTP(smtp_server, smtp_port) server.starttls() # 開啟TLS加密 server.login(sender_email, sender_password)
讀取原始Excel文件
df = pd.read_excel('path_to_excel_file.xlsx')
獲取唯一的員工姓名列表
employee_names = df['員工姓名'].unique()
獲取員工姓名和對應(yīng)的郵箱地址,假設(shè)這些信息存儲在一個字典中
employee_emails = { '張三': 'zhangsan@example.com', '李四': 'lisi@example.com', '王五': 'wangwu@example.com', # 添加更多員工和郵箱信息 }
遍歷員工數(shù)據(jù)并發(fā)送郵件
for employee_name in employee_names: employee_data = df[df['員工姓名'] == employee_name] # 創(chuàng)建員工的數(shù)據(jù) # 生成員工的 Excel 文件 employee_data_filename = f'{employee_name}.xlsx' employee_data.to_excel(employee_data_filename, index=False) # 創(chuàng)建郵件 msg = MIMEMultipart() msg['From'] = sender_email msg['To'] = employee_emails.get(employee_name, '') # 根據(jù)員工姓名獲取郵箱 msg['Subject'] = '拆分?jǐn)?shù)據(jù)通知' body = f"尊敬的{employee_name},您的拆分?jǐn)?shù)據(jù)已經(jīng)準(zhǔn)備好,請查收附件。" msg.attach(MIMEText(body, 'plain')) # 添加附件 with open(employee_data_filename, 'rb') as file: part = MIMEApplication(file.read(), Name=os.path.basename(employee_data_filename)) part.add_header('Content-Disposition', 'attachment', filename=Header(os.path.basename(employee_data_filename), 'utf-8').encode()) msg.attach(part) # 發(fā)送郵件 server.sendmail(sender_email, employee_emails.get(employee_name, ''), msg.as_string()) # 刪除生成的員工數(shù)據(jù)文件 os.remove(employee_data_filename) # 退出SMTP連接 server.quit()
最后,關(guān)閉與SMTP服務(wù)器的連接。
總結(jié)
通過上述Python腳本,我們可以批量發(fā)送個性化的郵件。我們首先設(shè)置發(fā)件人郵箱和密碼,然后指定SMTP服務(wù)器和端口號。接下來,我們讀取包含員工信息的Excel文件,并獲取唯一的員工姓名列表和對應(yīng)的郵箱地址。然后,我們遍歷員工數(shù)據(jù),并為每個員工創(chuàng)建郵件,附帶相應(yīng)的附件。最后,我們通過SMTP服務(wù)器發(fā)送郵件,并在發(fā)送完成后刪除生成的員工數(shù)據(jù)文件。
完整代碼
import pandas as pd import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.application import MIMEApplication import os from email.header import Header # 設(shè)置發(fā)件人郵箱和密碼 sender_email = 'liuchunlin202205@163.com' sender_password = '授權(quán)碼' # 設(shè)置SMTP服務(wù)器和端口(QQ郵箱的SMTP服務(wù)器和端口) smtp_server = 'smtp.163.com' smtp_port = 25 # 創(chuàng)建SMTP連接 server = smtplib.SMTP(smtp_server, smtp_port) server.starttls() # 開啟TLS加密 # 登錄郵箱 server.login(sender_email, sender_password) # 讀取原始 Excel 文件 df = pd.read_excel('C:\\Users\\liuchunlin2\\Desktop\\測試數(shù)據(jù)\\員工.xlsx') # 獲取唯一的員工姓名列表 employee_names = df['員工姓名'].unique() # 獲取員工姓名和對應(yīng)的郵箱地址,假設(shè)這些信息存儲在一個字典中 employee_emails = { '劉備': '2823028760@qq.com', '孫權(quán)': '2823028760@qq.com', '曹操': '2823028760@qq.com', # 添加更多員工和郵箱信息 } # 遍歷員工數(shù)據(jù)并發(fā)送郵件 for employee_name in employee_names: # 創(chuàng)建員工的數(shù)據(jù) employee_data = df[df['員工姓名'] == employee_name] # 生成員工的 Excel 文件 employee_data_filename = f'{employee_name}.xlsx' employee_data.to_excel(employee_data_filename, index=False) employee_data_filename = f'{employee_name}.xlsx' # 創(chuàng)建郵件 msg = MIMEMultipart() msg['From'] = sender_email msg['To'] = employee_emails.get(employee_name, '') # 根據(jù)員工姓名獲取郵箱 msg['Subject'] = '拆分?jǐn)?shù)據(jù)通知' body = f"尊敬的{employee_name},您的拆分?jǐn)?shù)據(jù)已經(jīng)準(zhǔn)備好,請查收附件。" msg.attach(MIMEText(body, 'plain')) # 添加附件 with open(employee_data_filename, 'rb') as file: part = MIMEApplication(file.read(), Name=os.path.basename(employee_data_filename)) part.add_header('Content-Disposition', 'attachment', filename=Header(os.path.basename(employee_data_filename), 'utf-8').encode()) msg.attach(part) # 發(fā)送郵件 server.sendmail(sender_email, employee_emails.get(employee_name, ''), msg.as_string()) # 刪除生成的員工數(shù)據(jù)文件 os.remove(employee_data_filename) # 退出SMTP連接 server.quit()
到此這篇關(guān)于使用Python實現(xiàn)批量發(fā)送個性化郵件的文章就介紹到這了,更多相關(guān)Python發(fā)送郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+moviepy實現(xiàn)音頻/視頻提取器
這篇文章主要為大家詳細(xì)介紹了如何使用Python和wxPython構(gòu)建的音頻/視頻提取器應(yīng)用程序,允許用戶從視頻文件中提取音頻,或者從音頻文件中截取特定時間段,需要的可以參考下2024-10-10使用pyinstaller打包PyQt4程序遇到的問題及解決方法
今天小編就為大家分享一篇使用pyinstaller打包PyQt4程序遇到的問題及解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06Python并發(fā)concurrent.futures和asyncio實例
這篇文章主要介紹了Python并發(fā)concurrent.futures和asyncio實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python實現(xiàn)在matplotlib中兩個坐標(biāo)軸之間畫一條直線光標(biāo)的方法
這篇文章主要介紹了Python實現(xiàn)在matplotlib中兩個坐標(biāo)軸之間畫一條直線光標(biāo)的方法,涉及Python操作matplotlib模塊繪圖的相關(guān)技巧,需要的朋友可以參考下2015-05-05Anaconda配置pytorch-gpu虛擬環(huán)境的圖文教程
這篇文章主要介紹了Anaconda配置pytorch-gpu虛擬環(huán)境步驟整理,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04三步實現(xiàn)Django Paginator分頁的方法
這篇文章主要介紹了三步實現(xiàn)Django Paginator分頁的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06詳解四種Python中基本形態(tài)學(xué)濾波的實現(xiàn)
最基礎(chǔ)的形態(tài)學(xué)操作有四個,分別是腐蝕、膨脹、開計算和閉計算。這篇文章主要介紹了這四種形態(tài)學(xué)濾波的實現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-04-04