python 163邮箱发送邮件

这学期做助教,需要把每个学生的成绩发送给个人。于是写了个小程序。
成绩单是一个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)

猜你喜欢

转载自blog.csdn.net/nvlinvlia/article/details/80279370