Python 自動寄 Email:日報、月結單一鍵自動送出

返工日日都要重複做同一件事:埋完數、跑完報表,然後將結果逐個 copy 出嚟、貼落 email、加埋附件寄俾老細或者客戶。呢啲步驟又慢又易出錯 —— 尤其係唔小心寄漏附件、或者 send 錯版本嗰陣。今日就用 Python 十零行 code,幫你將成個流程變成「一鍵自動寄」,連附檔、連格式都自動執埋。

點解用 Python 寄 Email?

Python 內置咗一個叫 smtplib 嘅模組,唔使另外裝任何嘢,直接就可以連去你嘅電郵伺服器寄信。配合 email 模組,仲可以自動砌標題、內文、附件。成個過程一次過搞掂,仲可以配合上幾篇教過嘅「定時執行」,做到日日自動出信。

準備功夫:攞到你嘅電郵密碼

為咗安全,而家 Gmail、Outlook、公司電郵多數唔俾直接用登入密碼,而要你開一個「應用程式專用密碼」(App Password):

  1. Gmail:開「Google 帳戶」→「安全性」→「兩步驗證」→「應用程式密碼」,揀「郵件」同「其他」,抄低嗰 16 個字。
  2. Outlook / 公司電郵:通常喺帳戶安全設定入面開「App Password」,或者用公司 IT 俾你嘅 SMTP 資料。

下面嘅 code 入面,我哋會用「環境變數」嚟儲存密碼,千祈唔好直接寫死喺 code 度(萬一 code 唔小心俾人睇到,密碼就漏晒)。

第一步:寄一封最簡單嘅電郵

開新檔案 send_email.py,貼入以下 code:

import smtplib import os from email.message import EmailMessage # 喺系統環境變數讀密碼(唔好寫死) EMAIL = "you@gmail.com" APP_PASSWORD = os.environ["EMAIL_PASSWORD"] msg = EmailMessage() msg["Subject"] = "測試:Python 自動寄 Email" msg["From"] = EMAIL msg["To"] = "boss@company.com" msg.set_content("呢封信係 Python 自動寄出嘅,收到代表成功!") # 連去 Gmail 嘅 SMTP 伺服器寄出 with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server: server.login(EMAIL, APP_PASSWORD) server.send_message(msg) print("寄出成功")

逐行解釋

  • import smtplib —— Python 內置嘅寄信工具,唔使安裝。
  • os.environ["EMAIL_PASSWORD"] —— 由環境變數讀密碼,唔會喺 code 度露底。
  • EmailMessage() —— 用嚟砌一封電郵:標題、寄件人、收件人、內文。
  • SMTP_SSL("smtp.gmail.com", 465) —— 用加密連線接去 Gmail 伺服器(465 係加密端口)。
  • server.send_message(msg) —— 真正寄出。

第二步:加埋附件同多個收件人

實戰上,日報通常要連埋 Excel / PDF 附件,仲要一次過寄俾幾個人。改一改上面嘅 code:

from pathlib import Path # 收件人名單 recipients = ["boss@company.com", "finance@company.com"] msg = EmailMessage() msg["Subject"] = "每日銷售日報" msg["From"] = EMAIL msg["To"] = ", ".join(recipients) msg.set_content("早晨,今日嘅銷售日報同附件一齊送上。") # 加附件(例如今日嘅 Excel 報表) report = Path("daily_report.xlsx") msg.add_attachment( report.read_bytes(), maintype="application", subtype="octet-stream", filename=report.name, ) with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server: server.login(EMAIL, APP_PASSWORD) server.send_message(msg)

咁樣一封連附件嘅日報就搞掂。你只係每次跑 code 之前,將 daily_report.xlsx 換做最新嗰份就得。

第三步:定時自動寄,唔使再人手

想佢日日朝早九點自動出信?Windows 可以用「工作排程器」,同上一篇教備份嗰陣一樣做法:觸發條件揀「每日」,程式填 python,引數填返你個 send_email.py 嘅完整路徑。

或者喺 Python 入面用 schedule 套件,一行 install、幾行 code 就做到常駐定時:

import schedule import time def send_report(): # 將上面寄信嘅 code 放喺呢個 function 入面 print("寄出每日日報") schedule.every().day.at("09:00").do(send_report) while True: schedule.run_pending() time.sleep(60)

安全提示:千祈唔好犯呢三個錯

  • 密碼唔好寫死喺 code —— 用環境變數,或者一個單獨嘅 config 檔案。
  • 唔好寄去錯嘅人 —— 收件人名單用一個 list 管理,改起上嚟一目了然。
  • 寄之前先測一次 —— 用自己另一個 email 做收件測試,確認格式同附件都啱,先正式上線。

總結

用 Python 自動寄 Email,將日日重複嘅「埋數 → 出信」流程壓縮到一鍵搞掂,仲可以做到日日定時自動出。呢個只係開始 —— 用同一套 smtplib,你可以自動寄月結單、催款通知、活動邀請,通通都係同一套路。