1. 程式人生 > >【詳解】【記錄】Python寫Excel預約資訊表併發送郵件

【詳解】【記錄】Python寫Excel預約資訊表併發送郵件

類似於本例我們寫過兩個指令碼了,但還是遇到了一些問題。

本例是比較基礎且標準的一個版本。

實現的操作是:從資料庫中取出資料,寫入Excel表,併發送郵件。相當簡單的一個Excel表。


【傳送給單人版】

#!/usr/bin/python
# -*- coding: UTF-8 -*-
__author__ = "$Author: wangxin.xie$"
__version__ = "$Revision: 1.0 $"
__date__ = "$Date: 2015-12-11 10:36$"
###############################################################
#功能: 魚丸預約使用者資訊 ############################################################### import os import sys import datetime import xlrd import xlwt from xlutils.copy import copy from myyutil.DBUtil import DBUtil import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from
myyutil.ScriptExecuteUtil import ScriptExecuteUtil reload(sys) sys.setdefaultencoding('utf8') #######################全域性變數#################################### ngTradeDBUtil = DBUtil('netgame_trade') #execute = ScriptExecuteUtil(handleDate = handleDate) #fileDir = '/usr/local/bin/myy_script/report/data/' #fileName = fileDir + execute._reportName
fileDir = 'D://' fileName = fileDir+'yuwanyuyue.xls' tempFileName = fileDir+'yuwan_temp.xls' style1 = xlwt.XFStyle() font1 = xlwt.Font() font1.height = 220 font1.name = 'SimSun' style1.font = font1 ################################################################## def createTemplateExcel(): '''建立Excel檔案模板''' wb = xlwt.Workbook(encoding = "UTF-8", style_compression = True) sht0 = wb.add_sheet("sheet1", cell_overwrite_ok = True) sht0.col(0).width=5000 sht0.col(1).width=6000 sht0.col(2).width=6000 sht0.write(0, 0, '手機號碼', style1) sht0.write(0, 1, '預約時間', style1) sht0.write(0, 2, 'IP', style1) wb.save(tempFileName) def genYuwanAccountAppointment(): sql = "SELECT MOBILE,CREATED_DATE,IP FROM netgame_trade.YUWAN_ACCOUNT_APPOINTMENT WHERE CREATED_DATE < '2015-12-12'" rs = ngTradeDBUtil.queryList(sql, ()) if not rs: return None print rs return rs def writeInfo0(sht, rs, length): '''寫入具體資料''' for i in range(length): sht.write(i+1, 0, str(rs[i][0]), style1) sht.write(i+1, 1, str(rs[i][1]), style1) sht.write(i+1, 2, rs[i][2], style1) def writeExcel(): '''寫報表''' createTemplateExcel() readFile = tempFileName rb = xlrd.open_workbook(readFile, on_demand = True, formatting_info = True) wb = copy(rb) rs=genYuwanAccountAppointment() length=len(rs) sheet0 = wb.get_sheet(0) writeInfo0(sheet0, rs, length) wb.save(fileName) def sendEmail(): # 建立一個帶附件的例項 msg = MIMEMultipart() # 構造附件1 att1 = MIMEText(open(fileDir+'yuwanyuyue.xls', 'rb').read(), 'base64', 'gb2312') att1["Content-Type"] = 'application/octet-stream' # fileName以資料加日期命名 fileName="魚丸預約資訊".decode('utf-8').encode('gbk')+".csv" att1["Content-Disposition"] = 'attachment; filename=%s'%fileName msg.attach(att1) # 寫入郵件正文 text=" Hi,本郵件為自動信,若有任何問題請與我聯絡。謝謝!" # 郵件正文亂碼,所以在這裡指定編碼 part1 = MIMEText(text, 'plain', _charset='utf-8') msg.attach(part1) # 加郵件 msg['to'] = '[email protected]' msg['from'] = '[email protected]' msg['subject'] = '預約資訊'.decode('utf-8') # 傳送郵件 try: server = smtplib.SMTP() # 資料中心測試時 server.connect('mail.xxx.com') # 使用者名稱,密碼 server.login('[email protected]', 'pwd') server.sendmail(msg['from'], msg['to'], msg.as_string()) server.quit() print '傳送成功'.decode("utf-8") except Exception, e: print str(e) def main(): print "===%s start===%s"%(sys.argv[0], datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d %H:%M:%S")) writeExcel() sendEmail() print "===%s end===%s"%(sys.argv[0], datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d %H:%M:%S")) if __name__ == '__main__': try: main() #createTemplateExcel() #execute.start(main) #execute.addMailTask() #execute.pushStart(fileDir) #execute.end() finally: if ngTradeDBUtil: ngTradeDBUtil.close()

【傳送郵件給多人版】

主要是傳送郵件的函式變化了

def sendEmail():

    # 建立一個帶附件的例項
msg = MIMEMultipart()

    # 構造附件1
att1 = MIMEText(open(fileDir+'yuwanyuyue.xls', 'rb').read(), 'base64', 'gb2312')
    att1["Content-Type"] = 'application/octet-stream'
# fileName以資料加日期命名
fileName="魚丸預約資訊".decode('utf-8').encode('gbk')+".csv"
att1["Content-Disposition"] = 'attachment; filename=%s'%fileName
    msg.attach(att1)

    # 寫入郵件正文
text=" Hi,本郵件為測試自動信,若有任何問題請與我聯絡。謝謝!"
# 郵件正文亂碼,所以在這裡指定編碼
part1 = MIMEText(text, 'plain', _charset='utf-8')
    msg.attach(part1)

    # 加郵件
strTo = ['[email protected]', '[email protected]']
    msg['to'] = ','.join(strTo)
    msg['from'] = '[email protected]'
msg['subject'] = '使用者預約資訊'.decode('utf-8')

    # 傳送郵件
try:
        server = smtplib.SMTP()

        # 資料中心測試時
server.connect('mail.xxx.com')
        # 使用者名稱,密碼
server.login('[email protected]', 'pwd')
        server.sendmail(msg['from'], strTo, msg.as_string())
        server.quit()
        print '傳送成功'.decode("utf-8")
    except Exception, e:
        print str(e)
不一樣的地方就三行程式碼
strTo = ['[email protected]', '[email protected]']
    msg['to'] = ','.join(strTo)
   server.sendmail(msg['from'], strTo, msg.as_string())

相關推薦

記錄PythonExcel預約資訊併發郵件

類似於本例我們寫過兩個指令碼了,但還是遇到了一些問題。 本例是比較基礎且標準的一個版本。 實現的操作是:從資料庫中取出資料,寫入Excel表,併發送郵件。相當簡單的一個Excel表。 【傳送給單人版】 #!/usr/bin/python # -*- coding: UT

更新整個maven工程及相關底層並再執行的記錄

前言:本例我們的需求其實只是改一個SQL,從昨天上午開始工作,直到昨晚下班前才搞定。只是一個SQL,而且只是加了個條件。 整了一天,這麼長的時間只解決了一個這,需要好好反思下。接下來對12月22日這不堪回首的一天進行簡單記錄。 1.【修改SQL】 本例的需求是修改SQL

Python處理大量資料與DICT遍歷的優化問題

前言:本例我們的需求是寫一個每天0點執行的指令碼。這個指令碼從一個實時更新的資料庫中提取資料。 每天跑一個Excel表出來,表裡是當天零點與昨天零點時的差異的資料展示。 其實是很簡單的需求,遇到的關鍵問題是資料量。該例的資料量太大,每次都能從資料庫中拿出20多萬條資料。

Python專題開發

使用Python從指令碼到專題開發,才知道為什麼會有人說Python大法好,別的都去死! 因為相較於JAVA,開發起來要爽太多,方方面面…… 【需求】 1. 本例,因為著急上線一個新的活動版塊,所以使用Python來開發管理後臺。 2. 功能很簡單,增刪改查都實現即可。

Python下載圖片

我們已經可以熟練的利用Python抓取網頁上的字串和數字資訊了 本例,我們來介紹使用Python下載圖片的簡單方法! 因為簡單,我們先貼出程式碼如下: #!/usr/bin/python # -*- coding: utf-8 -*- __author__ = "$Au

(轉載)--SG函數和SG定理

nbsp 發現 方式 spa 賦值 problem eve 查詢 mex 在介紹SG函數和SG定理之前我們先介紹介紹必勝點與必敗點吧. 必勝點和必敗點的概念: P點:必敗點,換而言之,就是誰處於此位置,則在雙方操作正確的情況下必敗。 N

AppDomain -C#中動態加載和卸載DLL

all created 新版本 odin generic reflect 可能 params 詳細 在C++中加載和卸載DLL是一件很容易的事,LoadLibrary和FreeLibrary讓你能夠輕易的在程序中加載DLL,然後在任何地方 卸載。在C#中我們也能使用Asse

KMP算法

是不是 代碼 ++ 大牛 bilibili 開始 最長 [] 分別是 前言 KMP算法是學習數據結構 中的一大難點,不是說它有多難,而是它這個東西真的很難理解(反正我是這麽感覺的,這兩天我一直在研究KMP算法,總算感覺比較理解了這套算法, 在這裏我將自己的思路分享給大家

銀行信用評分卡中的WOE在幹什麼?WOE的意義?為什麼可以使用WOE值代替原來的特徵值來做LR的訓練輸入資料

其實我是帶著這個問題發現這篇帖子的 為什麼可以使用WOE值代替原來的特徵值來做LR的訓練輸入資料 以下為原文 https://zhuanlan.zhihu.com/p/30026040 WOE & IV woe全稱叫Weight of Evidence,常用在風險評估、授

快速冪 二進位制 取模

本來想昨天寫的   看到了cod:ww2  我:我就玩一把,真的,就一把 然後就到了12點 真香~ 程式碼如下 不想理解可以直接拿來用 時間複雜度 logn typedef long long ll; ll quickmod(ll n) {

C++ MFC程序間通訊之剪貼簿

Windows剪貼簿是一種比較簡單的程序間通訊機制,同時它的開銷相對較小。它的實現原理很簡單,其實就是由由作業系統維護的一塊記憶體區域, 這塊記憶體區域不屬於任何單獨的程序,但是每一個程序又都可以訪問這塊記憶體區域,當一個程序將資料放到該記憶體區域中,而另一個

HTTP協議——經典面試題(轉載)

http請求由三部分組成,分別是:請求行、訊息報頭、請求正文 HTTP(超文字傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的連線方式,HTTP1.1版本中給出一種持續連線的機制,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。

自殺遊戲牛客小白月賽7 BDP動態規劃、對於WA細節上的分析

題目連結   思路: 細節的處理尤為重要,後面會提點一下。 這道題,我的想法是從0這個必死局開始往後找最優解下Alice或者Bob的生死,初始化dp[]是全Bob活,也就是Alice死,dp【i】是指以最優解往下走,到達i時刻死的人到底會是誰,然後從1號節點開始遍歷,由

約瑟夫環問題的兩種解法(

題目:  Josephus有過的故事:39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧願死也不要被敵人抓。於是決定了自殺方式,41個人排成一個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺。然後下一個重新報數,直到所有人都自殺身亡為止。

js網站國際化,多國語言切換

JS網站國際化,多國語言切換【詳解】 作者:Anmbition 在web開發過程中通常會碰到需要多國語言支援的需求,我也看過一些文件,但寫的都不盡人意,最終我整理了一套通過js程式碼完成解決方案,並對程式碼進行了很大程度的優化,在使用過程中只需極少的程式碼即可完成。 第一步:核心JS

JavaScript系列JavaScript之流程語句

一 開篇概述 本講主要講解JavaScript流程語句,其大致內容包括如下: 其中,常用的if,while,do..while,for在本片文章就不論述,重點論述for..in..,label,break和continue,whth,switch等語句 二 內容區  (一)常用語句 由於如下

JavaScript系列JavaScript之變數

一  概述     本篇文章將講解JavaScript中的變數,大致內容歸結為: 1.變數定義 包括變數宣告和變數初始化 2.變數種類 包括區域性變數和全域性變數 3.變數鏈式作用域及訪問 二  內容 (一)變數定義         在JavaScript程式語言中,變數的定義是通過

快速冪&龜速乘&快速乘

我相信進來看的人都會快速冪,對吧(和善的眼神) 如果不會。。。。那我們現在開始講吧(要不然為什麼叫詳解2333 ) 如果已經知道,就跳到下面去看吧~ 1. 快速冪 1.0 快速冪的誕生——最初的思路 我們通常需要求解形如 ab mod c 的式子,當b比較小的時

CS231n assignment1KNN中不使用迴圈計算距離:從原理到程式

本文主要講述不使用迴圈結構來計算兩個矩陣的歐氏距離, 設訓練集矩陣為train,size為num_train * num_features,設驗證集矩陣為validate,size為num_test,num_features。 因此我們計算每一個驗證集樣本到訓練集樣本的距離,就是將訓練集

JNI(Java Native Interface)

前言: 一提到JNI,多數程式設計者會下意識地感受到一種無法言喻的恐懼。它給人的第一感覺就是"難",因為它不是單純地在JVM環境內操作Java程式碼,而是跳出虛擬機器與其他程式語言進行互動。   你可能至今還沒聽說過這個技術,但是如果你是一個原始碼愛好者,或者有翻閱過JDK的一些原始碼,那你一定有接觸過nat