目錄
文章
分類
標籤
AI ai android Bitbucket C# C++ Certbot ChatGPT Cloudflare Code Runner CPE CPU排程 cron Daphne Django DNS設定 Docker fused-location Git GPT HTML HTTPS kotlin Line Bot Linux location-app Mac macOS MySQL n8n Next.js Nginx OpenAI permissions Python Python Django Python Email Pytorch pytorch PyTorch rclone React Redis Replit SSL streamlit Swap Ubuntu Unity Vector VM設定 VSCode WebSocket WordPress Wordpress wordpress-備份 yolo YOLOv9 中位數 伺服器設定 修復 最佳住址 利率 前端 動態生成 即時通訊 卷積神經網路 場景切換 學習 安全性 實作 專案管理 帳號建立 影像分類 後台 性能 惡意軟體 成績查詢 成績管理 投資 排序 操作系統 效率 教學 本地測試 殖利率 深度學習 演算法 版本控制 物件偵測 神經網路 程式解題 程式設計 競程 系統管理 終端機 統計 網站恢復 網頁框架 股票 自動化 財務 資料共享 資料庫 資料結構 距離計算 路由 遊戲開發 選單 部署 郵件發送 開發 開發技巧 開發環境 開發者 雲端備份 靜態文件
目錄
目錄
957 字
5 分鐘
撰寫 Python 發送成績給學生確認
程式功能概述
此 Python 程式使用 smtplib 庫來自動發送學生成績通知郵件。從 Excel 檔案中讀取每位學生的成績,並依據其學號生成專屬郵件,郵件以純文字格式發送至指定學校郵箱地址。為了避免 Gmail 將郵件自動摺疊,程式為每封郵件添加了唯一的時間標記。
步驟詳解
1. 準備所需的程式庫
我們使用以下程式庫:
pandas:讀取 Excel 檔案,將學生的成績資料導入程式。smtplib:用於設定 SMTP 伺服器並發送郵件。datetime:生成唯一的時間標記,避免 Gmail 認定郵件內容相同。
1import pandas as pd2import smtplib3from email.mime.text import MIMEText4from email.mime.multipart import MIMEMultipart5from datetime import datetime2. 讀取 Excel 檔案
使用 pandas 讀取 Excel 檔案的「工作表 1」工作表。只提取所需的欄位:班級、學號、姓名、隨堂1 至 隨堂4。
1file_path = 'ta-score-mid.xlsx'2data = pd.read_excel(file_path, sheet_name='工作表1')3data = data[['班級', '學號', '姓名', '隨堂1', '隨堂2', '隨堂3', '隨堂4']]3. 設定 SMTP 伺服器
在此程式中,我們使用 Gmail 的 SMTP 伺服器來發送郵件。設定伺服器地址、登入帳號和應用程式密碼。
1smtp_server = "smtp.gmail.com"2smtp_port = 5873smtp_user = "your_email@gmail.com" # 替換為您的 Gmail 地址4smtp_password = "your_app_specific_password" # 替換為您的應用程式密碼4. 開啟伺服器連接
使用 smtplib.SMTP 建立伺服器連接,啟動 TLS 安全層後登入帳號。
1server = smtplib.SMTP(smtp_server, smtp_port)2server.starttls()3server.login(smtp_user, smtp_password)5. 構建並發送郵件
對每位學生資料迴圈處理:
- 生成個性化的郵件主體,包含學生成績資訊。
- 將「學號」欄位轉為小寫格式,以符合學校郵箱格式。
- 添加當前時間作為唯一標記,避免 Gmail 摺疊郵件。
1for index, row in data.iterrows():2 student_id = row['學號'].lower()3 student_name_full = row['姓名']4 student_name = student_name_full[-2:]5 email_to = f"{student_id}@stust.edu.tw, {student_id}@office.stust.edu.tw"6 subject = "基礎數學 期中作業成績確認"7
8 scores = (9 f"隨堂1: {row['隨堂1']}\\n"10 f"隨堂2: {row['隨堂2']}\\n"11 f"隨堂3: {row['隨堂3']}\\n"12 f"隨堂4: {row['隨堂4']}"13 )14
15 unique_marker = datetime.now().strftime("%Y-%m-%d %H:%M:%S")16
17 body = (18 f"{student_name} 同學哈囉!\\n\\n"19 "這是你的隨堂成績:\\n\\n"20 f"{scores}\\n\\n"21 "如果有任何問題或是作業需要補交都記得要跟我說一下哦。\\n\\n"22 "TA 莊鈞凱\\n"23 "祝你下週期中考試每一科都💯\\n\\n"24 "Web: <https://kingkaizhuang.github.io/\\n\\n>"25 f"唯一標記:{unique_marker}"26 )27
28 message = MIMEMultipart()29 message["From"] = f"基礎數學助教 <{smtp_user}>"30 message["To"] = email_to31 message["Subject"] = subject32 message.attach(MIMEText(body, "plain"))33
34 server.sendmail(smtp_user, email_to.split(", "), message.as_string())35 print(f"已發送成績給 {student_name_full} ({email_to})")6. 關閉伺服器連接
在所有郵件發送完畢後,關閉 SMTP 伺服器連接。
1server.quit()完整程式碼
1import pandas as pd2import smtplib3from email.mime.text import MIMEText4from email.mime.multipart import MIMEMultipart5from datetime import datetime6
7file_path = 'ta-score-mid.xlsx'8data = pd.read_excel(file_path, sheet_name='工作表1')9data = data[['班級', '學號', '姓名', '隨堂1', '隨堂2', '隨堂3', '隨堂4']]10
11smtp_server = "smtp.gmail.com"12smtp_port = 58713smtp_user = "your_email@gmail.com" # 替換為您的 Gmail 地址14smtp_password = "your_app_specific_password" # 替換為您的應用程式密碼15
16server = smtplib.SMTP(smtp_server, smtp_port)17server.starttls()18server.login(smtp_user, smtp_password)19
20for index, row in data.iterrows():21 student_id = row['學號'].lower()22 student_name_full = row['姓名']23 student_name = student_name_full[-2:]24 email_to = f"{student_id}@stust.edu.tw, {student_id}@office.stust.edu.tw"25 subject = "基礎數學 期中作業成績確認"26
27 scores = (28 f"隨堂1: {row['隨堂1']}\\n"29 f"隨堂2: {row['隨堂2']}\\n"30 f"隨堂3: {row['隨堂3']}\\n"31 f"隨堂4: {row['隨堂4']}"32 )33
34 unique_marker = datetime.now().strftime("%Y-%m-%d %H:%M:%S")35
36 body = (37 f"{student_name} 同學哈囉!\\n\\n"38 "這是你的隨堂成績:\\n\\n"39 f"{scores}\\n\\n"40 "如果有任何問題或是作業需要補交都記得要跟我說一下哦。\\n\\n"41 "TA 莊鈞凱\\n"42 "祝你下週期中考試每一科都💯\\n\\n"43 "Web: <https://kingkaizhuang.github.io/\\n\\n>"44 f"唯一標記:{unique_marker}"45 )46
47 message = MIMEMultipart()48 message["From"] = f"基礎數學助教 <{smtp_user}>"49 message["To"] = email_to50 message["Subject"] = subject51 message.attach(MIMEText(body, "plain"))52
53 server.sendmail(smtp_user, email_to.split(", "), message.as_string())54 print(f"已發送成績給 {student_name_full} ({email_to})")55
56server.quit(部分資訊可能已經過時
目錄
文章
分類
標籤
AI ai android Bitbucket C# C++ Certbot ChatGPT Cloudflare Code Runner CPE CPU排程 cron Daphne Django DNS設定 Docker fused-location Git GPT HTML HTTPS kotlin Line Bot Linux location-app Mac macOS MySQL n8n Next.js Nginx OpenAI permissions Python Python Django Python Email Pytorch pytorch PyTorch rclone React Redis Replit SSL streamlit Swap Ubuntu Unity Vector VM設定 VSCode WebSocket WordPress Wordpress wordpress-備份 yolo YOLOv9 中位數 伺服器設定 修復 最佳住址 利率 前端 動態生成 即時通訊 卷積神經網路 場景切換 學習 安全性 實作 專案管理 帳號建立 影像分類 後台 性能 惡意軟體 成績查詢 成績管理 投資 排序 操作系統 效率 教學 本地測試 殖利率 深度學習 演算法 版本控制 物件偵測 神經網路 程式解題 程式設計 競程 系統管理 終端機 統計 網站恢復 網頁框架 股票 自動化 財務 資料共享 資料庫 資料結構 距離計算 路由 遊戲開發 選單 部署 郵件發送 開發 開發技巧 開發環境 開發者 雲端備份 靜態文件
目錄