Python學習筆記(十五)——自動傳送對應郵件(表格與郵件)練習
- 從Excel 電子表格中讀取資料。
- 找出上個月沒有交費的所有會員。
- 找到他們的電子郵件地址,向他們傳送針對個人的提醒。
這意味著程式碼需要做到以下幾點:
- 用openpyxl 模組開啟並讀取Excel 文件的單元格(處理Excel 檔案參煤
- 建立一個字典,包含會費超期的會員。
- 呼叫smtplib.SMTP()、ehlo()、starttls()和login(),登入SMTP 伺服器,
- 針對會費超期的所有會員,呼叫sendmail()方法,傳送針對個人的電子郵件
- 開啟一個新的檔案編輯器視窗,並儲存為sendDuesReminders.py
#! python3
#-*- encoding: utf-8 -*-
# sendDuesReminders.py - Sends emails based on payment status in spreadsheet
# Usage:
#
# Author : qmeng
# MailTo : [email protected]
# QQ : 1163306125
# Blog : http://blog.csdn.net/Mq_Go/
# Create : 2018-02-15 15:56:52
# Version: 1.0
#
import openpyxl
import smtplib
import sys
from smtplib import SMTP_SSL
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
#開啟Excel檔案
wb = openpyxl.load_workbook('duesRecords.xlsx' )
sheet = wb.get_sheet_by_name('Sheet1')
lastCol = sheet.max_column
latestMonth = sheet.cell(row=1,column=lastCol).value
#找到未付款成員
unpaidMembers = {}
for r in range(2,sheet.max_row+1):
payment = sheet.cell(row=r,column=lastCol).value
if payment != 'paid':
name = sheet.cell(row=r,column=1).value
email = sheet.cell(row=r,column=2).value
unpaidMembers[name] = email
#傳送定製的電子郵件提醒
mailInfo = {}
mailInfo['Username'] = input('Username:')
mailInfo['Password'] = input('Password:')
mailInfo['Hostname'] = input('Hostname:')
msg = MIMEText('hello,這是來自Python的信\n 新年快樂!!!','plain','utf-8')
msg['From'] = _format_addr('奇奇 <%s>' % mailInfo['Username'] )
msg['Subject'] = Header('來自新年的問候...','utf-8').encode()
for name,to in unpaidMembers.items():
msg['To'] = _format_addr('使用者%s <%s>' % (name,to))
smtp = SMTP_SSL(mailInfo["Hostname"])
smtp.set_debuglevel(1)
smtp.ehlo(mailInfo["Hostname"])
smtp.login(mailInfo["Username"],mailInfo["Password"])
smtp.sendmail(mailInfo['Username'],to,msg.as_string())
smtp.quit()
print('向用戶 '+ name + ' ' + to +' 傳送定製的電子郵件...成功')
相關推薦
Python學習筆記(十五)——自動傳送對應郵件(表格與郵件)練習
從Excel 電子表格中讀取資料。 找出上個月沒有交費的所有會員。 找到他們的電子郵件地址,向他們傳送針對個人的提醒。 這意味著程式碼需要做到以下幾點: 用openpyxl 模組開啟並讀取Excel 文件的單元格(處理Excel 檔案參煤 建立一個
python學習筆記第十一節(叠代和其他)
技術分享 img 余數 商品列表 步長 取數 sorted函數 學習 四舍五入 yiled 面相過程編程 造好內容,統一發給下面 上面這個是傻瓜版 內置函數 print(divmod(10,3)) 將10除以3,顯示商和余數 enumerate函數,顯示元素及它
JAVA學習第四十五課 — 其它對象API(一)System、Runtime、Math類
大整數 協調 1.5 tint ava 字符串 垃圾 void lol 一、System類 1. static long currentTimeMillis() 返回以毫秒為單位的當前時間。 實際上:當前時間與協調世界時 1970 年 1 月 1 日午夜之間的時間差(
Python學習筆記八 面向對象高級編程(一)
tin 學習筆記 不可 __str__ 有一個 類的屬性 -- pes 實例名 參考教程:廖雪峰官網https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 一、使
Python學習筆記7 頭文件的添加規則(轉載)
www. nbsp .html 一個 情況 str tno sys AS 轉載自:https://www.cnblogs.com/taurusfy/p/7605787.html **********************************************
Python學習筆記-SQLSERVER的大批量匯入以及日常操作(比executemany快3倍)
環境 : python3.6 / win10 / vs2017 / sqlserver2017 一、需要安裝的包pymssql pip install pymssql 二、pymssql模組的介紹 pymssql 包 有modules: pymssql – 如果您關注DB-API遵從性,或者如果您習慣於
python學習筆記第十二節
random 對象 學習 alt 重命名 浮點 內容 目錄 模塊 模塊:模塊本質上就是一個py文件。分為三部分:內置模塊、第三方模塊(模塊調用以及包的概念)先找解釋器裏的Py文件 再找安裝路徑lib下的文件,再找自定義的模塊。時間戳:1970年設置的一個時間為0,時間每增加
python學習之第十五課時--存址方式及拷貝
pre env 就是 宋體 spa 基本數據類型 -1 數字 ron 不同數據類型在內存中的存址方式 字符串str,一次性創建,不能被修改,只要有修改字符串,就是在重新創建新的字符串 Python底層是c語言寫的,c語言沒有字符串的說法,字符串是字符數組,所以在內存
學習筆記 第十五章 JavaScript基礎
continue 分隔符 全部 scrip 允許 非循環 元素 當前 避免 第15章 JavaScript基礎 【學習重點】 了解JavaScript基礎知識 熟悉常量和變量 能夠使用表達式和運算符 正確使用語句 能夠掌握數據類型和轉換的基本方法 正確使用函數、對象、
學習筆記第二十五節課
作業正則介紹_grep 正則就是一串有規律的字符串,包含特殊符號。 對以後的寫shell腳本很大的幫助。可以實現很多復雜的需求。 第一個工具 grep grep 用來過濾關鍵詞。 -c 行數,過濾出來的這些行有多少行。 做實驗,先把etc/passwd 作為一個樣本文件 cp 到 創建的gre
Python學習筆記二十二_繼承
類的方法 elf 重寫 它的 smi 基礎上 調用 新功能 廣度優先 上一篇“面向對象”中簡單介紹了繼承,即一個類可以派生出子類,在這個父類裏定義的屬性、方法自動被子類繼承。子類可以重寫父類方法。繼承是為了代碼重用。這篇重點寫一下重寫父類的方法及經典類與新式類在多繼承時
Python學習筆記二十二_多線程與多進程
方法 很多 問題 quest 磁盤 結果 gil 解鎖 ems 一、什麽是線程&進程 1、進程 (Process) 是資源的集合。其實就是程序(qq進程)。對於操作系統來說一個任務就是一個進程,例如打開瀏覽器就啟動了一個瀏覽器進程,打開word就啟動了一個wo
python學習第七十五天:多表查詢
object rim pytho 連表查詢 mit str () tle detail 創建模型 class Book(models.Model): nid = models.AutoField(primary_key=True) name = models
python學習第八十五天:網絡爬蟲之數據解析方式
數據解析 模式 end 解析 多次 pre 綜合練習 直接 list Python網絡爬蟲之數據解析方式 正則解析 單字符: . : 除換行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一個字符 \d :數字
python學習第九十五天:linux基礎學習
寫入 tool 時區 and 打開 新版 查看 nal mkdir 裝系統 net.ifnames=0 biosdevname=0 修改系統網絡配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 修改ip地址的文件
學習筆記第二十五節:Meet in the Middle
正題 Meet in the Middle,折半搜尋。 用來解決一些普通搜尋過不了的,但是支援合併的題目。 以這一題為例:[CEOI2015 Day2]世界冰
opencv學習筆記六十五:人臉識別演算法之EigenFace
簡要: 特徵臉演算法是將影象每一個畫素當作一維特徵,然後用SVM或其它機器學習演算法進行訓練。但這樣維數太多,根本無法計算。我這裡用的是ORL人臉資料庫,英國劍橋實驗室拍攝的,有40位志願者的人臉,在不同表情不同光照下每位志願者拍攝10張,共有400張圖片,大小為112*9
機器學習學習筆記 第十五章 貝葉斯演算法
貝葉斯演算法 貝葉斯要解決的問題 正向概率 逆向概率 舉例:一個班級中,男生 60%,女生 40%,男生總是穿長褲,女生則一半穿長褲一半穿裙子 正向概率:隨機選取一個學生,他(她)穿長褲的概率和穿
流程python學習筆記:第五章(1)
第五章:一等函式 在python中一切都可以視作為物件,包括函式。我們來看個例子: def function_try(): '''it is funciton try doc''' print 'function_try' if __name__=="_
深度學習花書學習筆記 第十五章 表示學習
本章的表示學習主要就是通過無監督訓練學習特徵的意思。 這種沒有具體的演算法,就是介紹表示學習的應用和大概的分支,至於如何進行表示學習,沒有詳細介紹。感覺可以直接跳過。。 貪心逐層無監督預訓練 貪心演算法在無監督訓練中的應用,每層只關心當前,進行訓練。 無監督指低層訓練