這學期做助教,需要把每個學生的成績發送給個人。于是寫了個小程式。 成績單是一個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="********@163.com" #使用者名
mail_pass="*******" #密碼
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)