天天看點

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="********@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)