使用MIME發送純文字信件
import os
from pathlib import Path
from dotenv import load_dotenv
import smtplib
from email.mime.text import MIMEText
from email.header import Header
### 環境變數
current_file = Path(__file__).resolve() # 取得目前這個 main.py 檔案的絕對路徑
project_root = current_file.parent.parent # 透過 .parent 往上跳兩層,回到專案根目錄 (my_project/)
env_path = project_root / ".env" # 指定根目錄底下的 .env 檔案路徑
load_dotenv(dotenv_path=env_path) # 載入指定路徑的 .env 檔案
### 讀取環境變數
AppPassword = os.getenv("AppPassword")
LoginEmail = os.getenv("LoginEmail")
FromAddress = os.getenv("FromAddress")
ToAddress = os.getenv("ToAddress")
### 設定郵件標題、寄件者、收件者
subject = '【課程即將上課通知】'
cc_user = ""
bcc_user = ""
msg = """
雨是神明的煙花
我為誰在等啊
等到滿身濕透吧
也捨不得回家
我滾燙的願望
遇到你就蒸發
沒等到的回答
躲在雲裡暗啞
我的愛不值一提嗎
"""
### 建立郵件內容
msg = MIMEText(msg, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = Header(f"<{FromAddress}>", 'utf-8') # 寄件人名稱也可以用中文
msg['To'] = ToAddress
msg['Cc'] = cc_user
### 準備收件人清單 (Bcc 在這裡加入)
# sendmail 需要一個「真正要寄送的 Email 地址列表」
# Bcc 的人要加在這裡,但不要加在 msg['Bcc'] (因為 Bcc 就是要隱藏)
all_recipients = [ToAddress, cc_user, bcc_user]
### 登入並寄送郵件
with smtplib.SMTP('smtp.gmail.com', 587) as server:
server.ehlo() # 啟動與 SMTP 伺服器的對話
server.starttls() # 建立加密傳輸
server.login(FromAddress, AppPassword) # 登入
server.sendmail(FromAddress, all_recipients, msg.as_string()) # 寄送郵件
print("郵件已寄出!")