这学期做助教,需要把每个学生的成绩发送给个人。于是写了个小程序。
成绩单是一个excel表格,每一行是一个同学的信息,每行第一列是学号,第二列是姓名,之后是每题的成绩,和总成绩。
学号加学校邮箱后缀即是每个人的邮箱地址。
代码如下:(ps: 163邮箱部分代码来自网络)
import xlrd
import smtplib
from email.mime.text import MIMEText
workbook = xlrd.open_workbook('D:\\TA\\midterm.xls')
#print (workbook.sheet_names())
booksheet = workbook.sheet_by_index(0)
nrows=booksheet.nrows
ncols=booksheet.ncols
print (nrows)
print (ncols)
title=booksheet.row_values(0)
title.append("中位数")
title.append("平均成绩")
title=str(title)
num=0
for x in range(nrows-2):
#for x in range(10):
chengji=int(booksheet.cell_value(x+1,ncols-2))
if chengji==0:
continue
num=num+1
#xuehao=booksheet.cell_value(x+1,0) #收件箱的地址
xuehao=booksheet.cell_value(1,0) #收件箱的地址
xuehao=int(xuehao)
xuehao=str(xuehao)
data=booksheet.row_values(x+1)
data[0]=int(data[0])
print(data[1])
for y in range (ncols-2):
data[y+2]=int(data[y+2])
data.append('84')
data.append('80.25')
data=str(data)
#print (data)
data=title+data
#print(data)
#print(type(xuehao))
###########send email########
mailto_list=[xuehao+'@pku.edu.cn'] #收件人(列表)
mail_host="smtp.163.com" #使用的邮箱的smtp服务器地址,这里是163的smtp地址
mail_user="
[email protected]" #用户名
mail_pass="xuanxie0906" #密码
mail_postfix="163.com" #邮箱的后缀,网易就是163.com
def send_mail(to_list,sub,content):
me="ljq"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content,_subtype='plain')
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ";".join(to_list) #将收件人列表以‘;’分隔
try:
server = smtplib.SMTP()
server.connect(mail_host) #连接服务器
server.login(mail_user,mail_pass) #登录操作
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except :
print ('false')
return False
for i in range(1): #发送1封,上面的列表是几个人,这个就填几
if send_mail(mailto_list,"期中成绩",data): #邮件主题和邮件内容
#这是最好写点中文,如果随便写,可能会被网易当做垃圾邮件退信
print ("done!")
else:
print ("failed!")
print(num)