欢迎光临散文网 会员登陆 & 注册

备忘2

2021-10-23 18:02 作者:Power_Tea  | 我要投稿

#! /usr/bin/python3

# coding=utf-8

import os

import xlrd

import smtplib

import pandas as pd


file_path = input("请输入需要发送的文件名称【注意全称包含文件名】格式为:(./文件名.xlsx):")

card_list = []



def show_menu():

    """显示菜单"""

    print("*" * 50)

    print("")

    print("欢迎使用 【 自动发送系统 】 V 1.0")

    print("")

    print("选择  【1】  显示全部名单")

    print("选择  【2】  发送到邮箱")

    print("")

    print("选择  【0】  退出系统")

    print("")

    print("*" * 50)



def show_all():

    """

显示所有人员信息

    :return: 把值返回给函数

    """

    print("=" * 50)

    print("显示所有人员信息")

    if len(card_list) == 0:

        print("当前没有任何人员信息记录,请检查是否添加发送表格!")

        return

    print("")

    # 打印分割线

    print("#" * 50)

    # 遍历列表依次输出字典信息

    # for card_dict in card_list:

    #     print(card_dict["value"])

    df = pd.read_excel(file_path)

    df = df.set_index('姓名')  #表示索引为'姓名'的值,即去掉默认索引(1,2,3...)

    print(df)

    # print("-----------------------前3行-------------------------")

    # print(df.head(3))   #  显示文件前几行信息括号中可以加显示行号参数

    # print("="*50)

    # print("-----------------------后3行-------------------------")

    # print(df.tail(3))  # 显示末尾几行数据可以加参数



def r_excel_cards():

    # 先打开一个文件

    wb = xlrd.open_workbook(file_path)

    # 获取第一个表

    sheet1 = wb.sheet_by_index(0)


    # 总行数

    nrows = sheet1.nrows

    # 总列数

    ncols = sheet1.ncols

    # 后面就通过循环即可遍历数据了

    # 取数据

    for i in range(ncols):

        for j in range(nrows):

            # cell_value方法取出第i行j列的数据

            value = sheet1.cell_value(j, i)

            card_dict = {"value": value, }

            card_list.append(card_dict)



def email_qq():

    from email.mime.text import MIMEText  # 邮件正文

    from email.header import Header  # 邮件头


    # 加载Excel文件

    wb = xlrd.open_workbook(file_path)

    sheet = wb.sheet_by_index(0)


    user_name = input("请输入您自己的邮箱号:")

    user_pass = input("请输入邮箱密码:")


    # 登录邮箱

    smtp_obj = smtplib.SMTP()

    smtp_obj.connect("smtp.qq.com")

    smtp_obj.login(user_name + "@qq.com", user_pass)


    # 循环遍历Excel


    count = 0

    table_col_html = '<thead>'  # 表头

    for row in sheet:  # sheet.iter_rows(min_row=0)

        count += 1

        if count == 1:  # 第一行

            for col in row:

                table_col_html += f"<th>{col.value}</th>"

            table_col_html += "</thead>"

            # print(table_col_html)

            continue

        else:

            row_text = "<tr>"  # 开始一行

            for cell in row:

                row_text += f"<td>{cell.value}</td>"

            row_text += "</tr>"  # 结束一行

            name = row[1]

            staff_email = row[0].value

            # print(name.value, staff_email)


        mail_body_context = f'''

            <h3>{name.value}\t你好:</h3>

            <p>请查收您本月工资,如有疑问电话联系</p>

            <table border="1px solid black">

             {table_col_html}

            {row_text}

           </table>


        '''


        msg_body = MIMEText(mail_body_context, "html", "utf-8")

        msg_body["From"] = Header("xxx公司人事部", "utf-8")  # 发送者

        msg_body["To"] = Header("xxx公司员工", "utf-8")  # 接受者

        msg_body["Subject"] = Header("xxx公司", "utf-8")  # 主题


        # 发邮件

        smtp_obj.sendmail(user_name + "@qq.com", [staff_email, ], msg_body.as_string())

        print(f"成功发送 {name.value} 到 {staff_email} 中.....")



while True:

    #  显示菜单

    show_menu()

    action_str = input("请选择希望执行的操作:")

    print("您选择的操作是 【%s】" % action_str)

    if action_str in ["1", "2", "3"]:

        if action_str == "1":

            r_excel_cards()

            show_all()



        elif action_str == "2":

            email_qq()



    elif action_str == "0":


        print("欢迎再次使用 【 自动发送系统 】")

        # w_excel_cards()

        break


    else:

        print("您输入的序号不正确请重新输入!")


备忘2的评论 (共 条)

分享到微博请遵守国家法律