電子郵件

發電子郵件

發電子郵件:  smtp smtps
            服務器: postfix sendmail  qmail
            客戶端: web ,foxmail , outlook 
收電子郵件:  pop3 pip3s  imap imaps
            服務器: devocote  
            客戶端: web ,foxmail , outlook 

現生活 : 物體本身 --> 發信人發信人主題 --> 快遞公司 --> 放到收信的人家裏
郵件: 電子郵件 --> 發信人發信人主題 --> smpt服務器 --> 放到收信人郵箱裏
收信人 --> 進入自己的郵箱查看,使用pop協議

python :
寫信的工具: email
發信的工具: smtplib

因爲大公司都對郵件作了安全限制,所以一般使用第三方工具無法使用帳號和密碼登錄。
同時如果希望第三方可以使用smtp pop 服務還要開啓權限(smtp服務器,授權碼)

示例1: 發送純文本郵件
from email.mime.text import MIMEText
import smtplib

    server = 'smtp.163.com'
    user = '[email protected]'
    to_user = user
    passwd = '你的授權碼'
    subject = '沁園春·雪'
    body = r'''北國風光,千里冰封,萬里雪飄。
    望長城內外,惟餘莽莽;大河上下,頓失滔滔。
    山舞銀蛇,原馳蠟象,欲與天公試比高。
    須晴日,看紅裝素裹,分外妖嬈。
    江山如此多嬌,引無數英雄競折腰。
    惜秦皇漢武,略輸文采;唐宗宋祖,稍遜風騷。
    一代天驕,成吉思汗,只識彎弓射大雕。
    俱往矣,數風流人物,還看今朝。'''

    msg = MIMEText(body)
    msg['From'] = user
    msg['To'] = to_user
    msg['Subject'] = subject

    tool = smtplib.SMTP()
    tool.connect(server)
    #tool.starttls()
    tool.login(user,passwd)
    tool.sendmail(user,to_user,msg.as_string())
    tool.close()

示例2: 發送含圖片和附件的郵件
import smtplib
# MIMEMultipart可以將多個MIME對象進行封裝
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.text import MIMEText

    server = 'smtp.163.com'
    username = '[email protected]'
    password = '授權碼'
    subject = r'張宗昌相比,古人的打油詩真是弱爆了888'
    to_user = '[email protected]'

    image_id = 'testimg'
    image_path = 'baidu.png'
    attach_path = 'abc.xlsx'
    body = r'<font color=red> 這是一個測試:<br><img src="cid:{}"><br>詳情見附件.</font>'.format(image_id)


    #添加圖片函數
    def addimg(src,imgid):
        with open(src,'rb') as fp:
            msgImage = MIMEImage(fp.read())
        msgImage.add_header('Content-ID',imgid)
        return msgImage


    msg = MIMEMultipart('mixed')
    msgtext = MIMEText(body,"html","utf-8")
    msg.attach(msgtext)
    msg.attach(addimg(image_path,image_id))

    #創建附件
    attachment = MIMEText(open(attach_path,'rb').read(),'base64','utf-8')
    attachment["Content-Type"] = "application/octet-stream"
    #指定郵件中附件的名字
    attachment["Content-Disposition"] = 'attachment; filename="{}"'.format(attach_path)
    msg.attach(attachment)

    msg['Subject'] = subject
    msg['From'] = username
    msg['To']   = to_user

    tool = smtplib.SMTP()
    tool.connect(server)
    tool.login(username, password)
    tool.sendmail(username, to_user, msg.as_string())
    tool.close()

生成excel文件

用途: 銀行,支付寶等下載一年的消費情況
      生成報表
如何生成excel文件
    csv : 文件可以當成一種excel格式,不過是純文本的
    XlsxWriter: 這個支持功能強大
    其它python的excel模塊
安裝:
    pip3 install XlsxWriter

示例1:

import xlsxwriter
workbook = xlsxwriter.Workbook('test.xlsx')

worksheet = workbook.add_worksheet('abc')
worksheet.write('C2','name')
worksheet.write('D2','語文')
worksheet.write('E2','數學')
worksheet.write('F2','英文')

workbook.close()

示例2:

import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()
#第一行
worksheet.write('C2','name')
worksheet.write('D2','語文')
worksheet.write('E2','數學')
worksheet.write('F2','英文')
#第二行
row2 = ['libai',100,90,80]
worksheet.write_row('C3',row2)
#第三行
row3 = ['quyuan',90,90,90]
worksheet.write_row(4-1,3-1,row3)

示例三:

  import xlsxwriter
    data = [
        ["name","語文","數學","英文","平均分"],
        ["libai",100,90,80,],
        ["quyuan",90,90,70,]
    ]
    workbook = xlsxwriter.Workbook('test.xlsx')
    worksheet = workbook.add_worksheet()
    bold = workbook.add_format()
    bold.set_bold()
    bold_red = workbook.add_format()
    bold_red.set_bold()
    bold_red.set_font_color('red')
init = (12,8)
for i in range(1,len(data)):
    tmp = data[i][1:]
    avg = sum(tmp) / len(tmp)
    avg = '{0:.1f}'.format(avg)
    data[i].append(avg)

for j in range(len(data)):
    row = init[0] + j
    col = init[1]
    if j == 0:
        worksheet.write_row(row,col,data[j],bold_red)
    else:
        line = data[j]
        for col_tmp in range(col,col+len(line)):
            if col_tmp == col:
                worksheet.write(row,col_tmp,line[col_tmp-col],bold)
            else:
                worksheet.write(row,col_tmp,line[col_tmp-col])

workbook.close()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章