看我用 Python 一秒发送数百份邮件,让财务部妹子追着喊 666!
阅读本文大概需要 8 分钟。
需求描述
邮件地址.xlsx
,里面有各部门负责人的邮箱:“尊敬的xxx部门 xxx 您好,您的工号是 xxx,您 2020 年的奖金为 xxx
”
逻辑梳理
“”
逐行遍历
邮件地址.xlsx
取各部门名称和负责人邮箱地址根据部门名称去 奖金发放 文件夹下获取
奖金_部门名称.xlsx
作为附件再遍历
邮件地址.xlsx
的循环体内完成邮件的发送
奖金_部门名称.xlsx
文件,获取每个人的工号、姓名、邮箱地址、奖金数,而部门在打开 Excel 时就确定了,最后根据上面获取的信息用 yagmail
组装成新的邮件信息并发送。代码实现
openpyxl
的 load_workbook
方法以及 yagmail
库,如果不把密码(授权码)明文显示而存储在系统密钥环中则需要额外导入 keyring
库。from openpyxl import load_workbook
import yagmail
import keyring
password = keyring.get_password('yagmail', 'username')
# 需要在命令号中用 keyring.set_password('yagmail', username, password) 预先存好
邮件地址.xlsx
:path = r'C:\xxx' # 根据实际附件文件和邮件地址 Excel 文件存放的路径确定
workbook = load_workbook(path + r'\邮件地址.xlsx')
sheet = workbook.active
n = 0 # 设置变量跳过表头
for row in sheet.rows:
if n:
department = row[0].value
dep_address = row[1].value
print(department, dep_address)
n += 1
# 用服务器、用户名、密码实例化邮件
mail = yagmail.SMTP(user='xxx@qq.com', password = password, host='smtp.qq.com')
# 待发送的内容
contents = ['第一段内容', '第二段内容']
# 发送邮件
mail.send('收件人邮箱', '邮件标题', contents)
contents
中放绝对路径,yagmail
会自动将其作为附件,非常智能。这也是本需求能实现的重要依托。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='xxx@qq.com', password=password, host='smtp.qq.com')
contents = [f'您好,请查收{department}的奖金情况', path + f'\奖金发放\奖金_{department}']
mail_dep.send(dep_address, f'{department}奖金情况', contents)
n += 1
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='xxx@qq.com', password=password, host='smtp.qq.com')
# 这一部分就是升级需求的代码
# 根据前面的部门信息打开相应的表格获取每个人的情况
workbook_new = load_workbook(path + f'\奖金发放\奖金_{department}')
sheet_new = workbook_new.active
m = 0
for i in sheet_new.rows:
if m:
id = i[0].value # 工号
name = i[1].value # 姓名
address = i[2].value # 个人邮箱地址
money = i[3].value # 奖金数
# 根据获取到的个人信息组装成新的邮件发送
mail = yagmail.SMTP(user='xxx@qq.com', password=password, host='smtp.qq.com')
contents = [f'尊敬的 {department} {name} 您好,您的工号是 {id},您2020年的奖金为 {money}']
mail.send(address, f'{department}-{name}奖金情况', contents)
m += 1
contents_dep = [f'您好,请查收{department}的奖金情况', path + f'\奖金发放\奖金_{department}']
mail_dep.send(dep_address, f'{department}奖金情况', contents_dep)
n += 1
点个在看你最好看
评论