腾讯课堂
Python网络爬虫与文本分析~~
今天再分享一个如何用几行Python代码让财务部妹子追着喊的实用案例。
需求描述最近公司要发奖金,需要财务部妹子给每个员工发一封邮件,现在全公司10个部门每个人的奖金情况已经计算好了,并根据部门分别制作了10张表格:
每个奖金表格内容大致如下:
同时有一份Excel文件邮件地址.xlsx,里面有各部门负责人的邮箱:
首先第一个需求很简单:给各部门负责人发送相应部门的奖金附件
这个需求不同于群发,只要把所有人邮件地址加进来一键发送就可以,而是需要点对点的单发邮件。如果部门或者收件人的数量继续增加,无非会增加工作难度、降低工作效率,因此需要Python出手解决。
当然如果就这么点小事,妹子辛苦一点手动发送也能解决,下面还有一个需求??
原有部门奖金表格新增加了一列个人邮箱(邮箱地址均为虚构),如下
不同于上面需求,给部分负责人发送总奖金表格的同时,也需要给各部分每一个人发送自己的奖金金额,发送内容为:
“尊敬的xxx部门xxx您好,您的工号是xxx,您年的奖金为xxx
”这个需求如果再手动的话,工作量瞬间就上去了,下面我们讲解如何用Python优雅、快速的解决!
逻辑梳理初级需求是一个点对点单独发送,简单的思路可以是:
“逐行遍历邮件地址.xlsx取各部门名称和负责人邮箱地址
根据部门名称去奖金发放文件夹下获取奖金_部门名称.xlsx作为附件
再遍历邮件地址.xlsx的循环体内完成邮件的发送
”如果加上了个人邮箱其实也很简单,在原先代码的基础上打开并遍历奖金_部门名称.xlsx文件,获取每个人的工号、姓名、邮箱地址、奖金数,而部门在打开Excel时就确定了,最后根据上面获取的信息用yagmail组装成新的邮件信息并发送
代码实现先着手实现基本需求。由于只涉及Excel文件的读取以及邮件的发送,需要导入openpyxl的load_workbook方法以及yagmail库,如果不把密码(授权码)明文显示而存储在系统密钥环中则需要额外导入keyring库
fromopenpyxlimportload_workbookimportyagmailimportkeyringpassword=keyring.get_password(yagmail,username)#需要在命令号中用keyring.set_password(yagmail,username,password)预先存好
读取并遍历邮件地址.xlsx:
path=rC:\xxx#根据实际附件文件和邮件地址Excel文件存放的路径确定workbook=load_workbook(path+r\邮件地址.xlsx)sheet=workbook.activen=0#设置变量跳过表头forrowinsheet.rows:ifn:department=row[0].valuedep_address=row[1].valueprint(department,dep_address)n+=1
解析完成后就可以组装准备发送的邮件了。以用QQ邮箱发送邮件为例,复习一下组装邮件需要的内容:
#用服务器、用户名、密码实例化邮件mail=yagmail.SMTP(user=xxx
qq.