每次要发工资条公司负现工资条的同事都很烦恼,二百多号人,只能一个个人去发.于是她问我有什么办法可以批量发工资条的,我说你要收集员工的邮箱地址.然后我花半天写一个工具给你,她说早知道之前就找你啦.
下面费话不多说,直接上代码.
以下需要安装pandas库以及依赖库.
如有不懂配置或其它问题可以发邮件给我大家交流一下,我的qq邮箱:447282087importos,datetime,time
importpandasaspd
importtkinterastk
fromtkinterimportfiledialog
importsmtplib
fromemail.mime.textimportMIMEText
fromemail.utilsimportformataddr
defmail(uname,m,txt,tomail,upass):
my_sender=''#发件人邮箱账号
my_pass=upass#发件人邮箱密码(当时申请smtp给的口令)
my_user=tomail#收件人邮箱账号,我这边发送给自己
ret=True
try:
msg=MIMEText(txt,'html','utf-8')
msg['From']=formataddr(["发件人昵称",my_sender])#括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To']=formataddr(["收件人昵称",my_user])#括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject']="%s%s月份工资条"%(uname,m)#邮件的主题,也可以说是标题
server=smtplib.SMTP_SSL("",465)#发件人邮箱中的SMTP服务器,端口是465
server.login(my_sender,my_pass)#括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender,[my_user,],msg.as_string())#括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit()#关闭连接
exceptException:#如果try中的语句没有执行,则会执行下面的ret=False
ret=False
returnret
defReadFile(filePath):
print('打开文件:%s'%filePath)
filePath=filePath.replace('\\','/')
if(os.path.exists(filePath)==False):
print('excel文件:%s不存在%s'%(filePath,datetime.datetime.now()))
#dfxsd=pd.read_excel(filePath)
df=pd.read_excel(filePath,dtype=str)
err_i=0
count_i=0
err_name=''
m=input('请输入工资条的月份:')
upass=input('请输入你的邮箱密码:')
title=['编号','姓名','应出勤天数','实际出勤(天)','基本底薪','实际底薪','绩效提成','外访补贴',
'其他补贴','加班补贴(天数)','加班补贴(金额)','应发工资合计','事假(天)','事假(金额)',
'扣费明细','扣下其他','本月工资合计','社保缴纳金额(公司)','社保缴纳金额(个人)','公积金缴纳金额(公司)',
'公积金缴纳金额(个人)','本月实缴税额','实发工资','个人邮箱']
foriindf.index.values:#获取行号的索引,并对其进行遍历:
#枫软备注1=客户编号(长度为15),备注2=批次,备注3=合同编号(长度最大为5位数),相关备注=包含(产品代码信息,产品代码一般为13位)
row_data=df.loc[i].reindex(title)
CustomerNumber=''
ContractNumber=''
ProductCode=''
html='
html+='
'
fortitlestrintitle:
html+='
%s'%titlestr
html+='
'
html+='
'
fortitlestrintitle:
html+='
%s'%row_data['%s'%titlestr]
html+='
'
html+='
'
if(row_data['个人邮箱']!='nan'orrow_data['个人邮箱']!=''):
mail(row_data['姓名'],m,html,row_data['个人邮箱'],upass)
time.sleep(1)
else:
err_name+=','+row_data['姓名']
print(html,'')
print('发送失败的人员:'+err_name)
defrep(strs):#替换字符
strs=str(strs)
strs=strs.replace('','')
strs=strs.replace('','')
strs=strs.replace('\r','')
strs=strs.replace('\n','')
strs=strs.replace("'",'')
strs=strs.replace('"','')
strs=strs.replace('\\','\\\\')
strs=strs.replace('/','')
strs=strs.replace('/','')
strs=strs.replace('%','')
strs=strs.replace(':','')
strs=strs.replace(':','')
strs=strs.replace('\032','\\Z')
strs=strs.replace('?','')
strs=strs.replace('☎','')
returnstrs
defgetLocalFile():#获取文件
root=tk.Tk()
root.withdraw()
filePath=filedialog.askopenfilename()
print('文件路径:',filePath)
returnfilePath
input_file=getLocalFile()
ReadFile(input_file)
第一步:运行程序选择做好的工资条excel表,然后点击打开
第二步:输入工资的月份与箱邮密码,这里我输入9月份.
下面是工资条的excel模板