python通过邮箱批量发工资条

每次要发工资条公司负现工资条的同事都很烦恼,二百多号人,只能一个个人去发.于是她问我有什么办法可以批量发工资条的,我说你要收集员工的邮箱地址.然后我花半天写一个工具给你,她说早知道之前就找你啦.

下面费话不多说,直接上代码.

以下需要安装pandas库以及依赖库.

import os,datetime,time

import pandas as pd

import tkinter as tk

from tkinter import filedialog

import smtplib

from email.mime.text import MIMEText

from email.utils import formataddr

def mail(uname,m,txt,tomail,upass):

    my_sender='test126.com'    # 发件人邮箱账号

    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("smtp.126.com", 465)  # 发件人邮箱中的SMTP服务器,端口是465

        server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码

        server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件

        server.quit()# 关闭连接

    except Exception:# 如果 try 中的语句没有执行,则会执行下面的 ret=False

        ret=False

    return ret

def ReadFile(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 = ['编号', '姓名', '应出勤天数', '实际出勤(天)', '基本底薪', '实际底薪', '绩效提成', '外访补贴',

                                      '其他补贴', '加班补贴(天数)', '加班补贴(金额)', '应发工资合计', '事假(天)', '事假(金额)',

                                      '扣费明细', '扣下其他','本月工资合计', '社保缴纳金额(公司)', '社保缴纳金额(个人)', '公积金缴纳金额(公司)',

                                      '公积金缴纳金额(个人)', '本月实缴税额', '实发工资', '个人邮箱']

    for i in df.index.values:  # 获取行号的索引,并对其进行遍历:

        # 枫软  备注1 = 客户编号(长度为15) , 备注2 = 批次,  备注3 = 合同编号(长度最大为5位数), 相关备注 = 包含(产品代码信息,产品代码一般为13位)

        row_data = df.loc[i].reindex(title)

        CustomerNumber = ''

        ContractNumber = ''

        ProductCode = ''

        html = '<table border="1">'

        html += '<tr>'

        for titlestr in title:

            html += '<td>%s</td>' %titlestr

        html += '</tr>'

        html += '<tr>'

        for titlestr in title:

            html += '<td>%s</td>' % row_data['%s' %titlestr]

        html += '</tr>'

        html += '</table>'

        if(row_data['个人邮箱']!='nan' or row_data['个人邮箱']!=''):

            mail(row_data['姓名'],m,html,row_data['个人邮箱'],upass)

            time.sleep(1)

        else:

            err_name += ',' + row_data['姓名']

        print(html,'')

    print('发送失败的人员:'+err_name)

def rep(strs):  # 替换字符

    strs = str(strs)

    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('/', '')

    strs = strs.replace('%', '')

    strs = strs.replace(':', '')

    strs = strs.replace(':', '')

    strs = strs.replace('32', '\Z')

    strs = strs.replace('?', '')

    strs = strs.replace('☎', '')

    return strs

def getLocalFile():  # 获取文件

    root = tk.Tk()

    root.withdraw()

    filePath = filedialog.askopenfilename()

    print('文件路径:', filePath)

    return filePath

input_file = getLocalFile()

ReadFile(input_file)


转载于:http://kan1234.com/post/35.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容