admin管理员组

文章数量:1559387

效果展示:

脚本优点:

  1. 可以自己手动通过弹窗选择对应工资条表格(函数在里面不影响)

  1. 自动通过标题行“姓名”“邮箱”找到对应信息,表格经常变动不影响

  1. 脚本使用腾讯企业邮箱指定的SMTP服务(通过SSL连接)

  1. 表格美观大方,竖排版,可以自己加上base64企业LOGO

  1. 发送成功与失败会有TXT记录,方便发生错误追踪

脚本代码:

# -- coding: utf-8 --
from openpyxl import load_workbook
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import sys
import time
import random

class Test:
    def ck_log(self):
        pass

    def send_email(self, content, name, mail,sender,smtpObj,subject):
        receivers = [mail]
        print(sender)
        print(receivers)
        msg = MIMEText(content, 'html', 'utf-8')
        msg['From'] = Header("XXX公司")
        msg['To'] = Header(name)
        msg['Subject'] = Header(subject, 'utf-8')
        try:
            smtpObj.sendmail(sender, receivers, msg.as_string()) 
            print(f"===发送至 {name} 成功!")
            with open("成功名单.txt","a+") as f:
                f.write(f"{name}\n")
        except smtplib.SMTPException as e:
            print(f"===发送至 {name} 失败:"+str(e))
            with open("失败名单.txt","a+") as f:
                f.write(f"{name}\n")
def get_decimal_places(num):
    import decimal
    if '.' in str(num):
        num = str(float(num))   
    d = decimal.Decimal(str(num))
    #print("位数:",abs(d.as_tuple().exponent))
    return abs(d.as_tuple().exponent)

if __name__ == '__main__':
    user = "" #请输入邮箱账号
    password = "" #请输入邮箱密码
    try:
        smtpObj = smtplib.SMTP_SSL(host="smtp.exmail.qq", port=465) 
        print("连接邮箱服务器成功!")
        smtpObj.login(user=user, password=password)
        print("登录账号成功!")
        subject = input("请输入邮件名(例如 2023年02月工资条):")
        print("您输入的是:", subject)
        import tkinter as tk
        from tkinter import filedialog

        print("请在弹出窗口中选择工资表")
        root = tk.Tk()
        root.withdraw()
        Filepath = filedialog.askopenfilename()
        print('Filepath:', Filepath)
        wb = load_workbook(Filepath, read_only=True, data_only=True)
        print("表格下的所有sheet:")
        print(wb.sheetnames)
        o = Test()
        cnt = 0
        sheetname = input("请输入工资条所在的sheet名字(去除引号):")
        if "'" in sheetname:
            sheetname = str(eval(sheetname))
            print("修正输入:", sheetname)
        else:
            print("您输入的是:", sheetname)
        sheet = wb[sheetname]
        thead = '<thead>'
        sender = user
        for row in sheet:
            tbody = ''
            cnt += 1
            if cnt == 1:
                topic_list = []
                for cell in row:
                    topic_list.append(cell.value)
                print(topic_list)
                print(len(topic_list))
                for w in range(len(topic_list)):
                    if topic_list[w] == "姓名":
                        name_row = w
                        print(name_row)
                    elif topic_list[w] == "邮箱":
                        mail_row = w
                        print(mail_row)
            else:
                for num in range(len(row)):
                    if row[num].value == None or row[num].value == 0 or row[num].value == "0":
                        inside = "-"
                        tbody += f'<tr><td>{topic_list[num]}</td><td>{inside}</td></tr>'
                    elif type(row[num].value) == type(20.00) and get_decimal_places(row[num].value) >= 5:
                        tbody += f'<tr><td>{topic_list[num]}</td><td>{round(row[num].value, 2)}</td></tr>'
                    else:
                        tbody += f'<tr><td>{topic_list[num]}</td><td>{row[num].value}</td></tr>'
            name = row[name_row].value
            mail = row[mail_row].value
            content = f'''
                <div style="text-align: center; width: 100%;">
                <img alt="" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAE0AU0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA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qWDxOMlzT0XdmEqtOkrIWEktxWvbZ4qvb2ZGOK1ra0PHFfU0aMaMFCGyPPlJyd2WrXPFbNtniqdtan0rXtrY8cVqSXbbPvV2ooogi+9S0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR2oooAhkt0ftVCfTs9q1aKAOXn03P8NZ02l9flrt2RW6ioXtIm7UAefTaT/s1Rl0jP8ADXpD6YjdMVXfRwegFAHmz6QwPANMOnSj1/GvRW0X0Wozon+xWNTDUqnxxTLjOUdmeefYJR7/AIUv9nyHtj8K786H/sUo0P8A2K5v7Mwu/IX7ep3OCXTpT6/hUiaSxOSK7xdE/wBipV0UDqorop4WjT+CKREqkpbs4mLSP9mr0Olf7NdgmkqPSrCadGtbkHMQaX/s1pQaaR/DW4tvGvRakAA6DFAFGGwC9auJGqdBT6KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//Z" style="display: inline-block;width: 100px; height: 100px;" />
                <h3>{name},您好</h3>''' + '''
                <p>请查收您的工资条,有问题请及时与XX取得联系,谢谢合作!</p>
                <style type="text/css">
                    table
                    {
                        border-collapse: collapse;
                        margin: 0 auto;
                        text-align:justify;
                        vertical-align:middle;
                    }
                    table td, table th
                    {
                        border: 1px solid #cad9ea;
                        text-align:center;
                        vertical-align:middle;
                    }
                </style>
                <table border='0.5px solid black'>
                ''' + f'''
                {thead}
                {tbody}
                </table>
            '''
            #print(content)
            if cnt >= 2:
                print(name, mail)
                o.send_email(content, name, mail,sender,smtpObj,subject)
            else:
                print("标题行不处理!")
            some_time = random.randint(4, 8)
            print(f"等待{some_time}秒")
            time.sleep(some_time)
        smtpObj.quit()
        print("群发完毕,已退出邮箱登录...")
        input("Please Enter to close this exe:")

    except Exception as e:
        print(f"运行出错,失败原因:{e}....")
        time.sleep(600)
        sys.exit(0)

本文标签: 腾讯企业邮箱员工工资条pythonforhrm