作业提醒程序

# 创建excel表并填入信息


import student_test
import openpyxl
import smtplib
from email.mime.text import MIMEText
import imapclient
import email


# 创建excel文件存放学生信息
def create():
    try:
        wb = openpyxl.Workbook('学生作业信息表.xlsx')
        wb.save(filename='学生作业信息表.xlsx')
    except Exception as e:
        print(e)
    try:
        wb = openpyxl.load_workbook('学生作业信息表.xlsx')

        sheet = wb.active
        for row, info in enumerate(student_test.student_info_list):
            for column, cell in enumerate(info):
                sheet.cell(row=row + 1, column=column + 1).value = cell

        wb.save(filename='学生作业信息表.xlsx')


    except Exception as e:
        print(e)

    else:
        print('程序运行正常...')


# 进入教师邮箱统计交过作业的学生
def cheak():
    finish_list = []
    # 建立imap连接
    conn = imapclient.IMAPClient(host='imap.163.com', ssl='True')
    # 登陆教师邮箱
    conn.login('wanglangcode@163.com', 'redhat111')
    # 读取收件箱
    conn.select_folder('INBOX', readonly='True')
    # 在收件箱中查找未读的邮件   参数为邮件的状态   返回值为所有未读邮件的编号
    result = conn.search('UNSEEN')
    # 通过fetch()函数 查看邮件的信息  返回值为一个多重嵌套字典   包含邮件id和邮件的所有信息
    msgdict = conn.fetch(result, ['BODY.PEEK[]'])
    try:
        for message_id, message in msgdict.items():
            # 将每个邮件的信息按utf-8编码方式 提取出来
            e = email.message_from_string(str(message[b'BODY[]'], encoding='utf8'))
            # 提取发件人信息
            mail_from = email.header.make_header(email.header.decode_header(e['From']))
            from_student = str(mail_from)
            finish_list.append(from_student)
    except Exception as e:
        print(e)
    finally:
        conn.logout()
    return finish_list


# 修改表中学生作业状态
def alter_sheet():
    wb = openpyxl.load_workbook('学生作业信息表.xlsx')
    sheet = wb.active
    finish_info = cheak()
    try:
        for student_info in finish_info:
            for row, info in enumerate(sheet.rows):
                if sheet.cell(row=row + 1, column=3).value in student_info:
                    sheet.cell(row=row + 1, column=2).value = 1
    except Exception as e:
        print(e)
    finally:
        wb.save(filename='学生作业信息表.xlsx')


def msg_info(eml):
    content = '''
    赶快交作业'''
    msg = MIMEText(content, 'plain', 'utf-8')
    msg['To'] = eml
    msg['From'] = 'wanglangcode@163.com'
    msg['Subject'] = 'homework'

    return msg


# 按表中所显示  给未交作业的学生发送邮件
def auto_send_mail():
    create()
    alter_sheet()
    wb = openpyxl.load_workbook('学生作业信息表.xlsx')
    sheet = wb.active
    try:
        conn = smtplib.SMTP('smtp.163.com')
        conn.login('wanglangcode@163.com', 'redhat111')
        for row, info in enumerate(sheet.rows):
            if sheet.cell(row=row + 1, column=2).value == 0:
                eml = sheet.cell(row=row + 1, column=3).value
                msg = msg_info(eml)
                conn.sendmail('wanglangcode@163.com', eml, msg.as_string())
    except smtplib.SMTPException as e:
        print(e)
    else:
        print('邮件发送成功...')



auto_send_mail()

eg:教师邮箱为wanglangcode@163.com  学生1学生2的邮箱为a645461397@foxmail.com 学生3学生4的邮箱为15929961493@163.com

目前教师邮箱有一封来自学生1 ,2邮箱的未读邮件,模拟学生12已经交过作业

运行脚本后  应该只给学生34发送交作业邮件


#运行脚本


#学生12的邮箱没有交作业的未读邮件


#学生34的邮箱应该有两封交作业的未读邮件


####设置脚本每周四中午十二点自动运行#####

crontab -e 进入自动运行文件设置

编辑:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值