Python 自動化進階:自動寄信與 PDF 處理 (第 43 章)

站主自己的課程,請大家支持
揭秘站長的架站心法:如何利用 Hugo × AI 打造高質感個人品牌網站? 揭秘站長的架站心法:如何利用 Hugo × AI 打造高質感個人品牌網站?
  • Post by
  • Jan 26, 2024
post-thumb

辦公室自動化的終極應用,往往離不開兩件事:EmailPDF。 想像一下:自動讀取 Excel 名單,生成對應的 PDF 報表,然後自動寄給每個人。這就是自動化的威力!

1. 發送 Email (smtplib)

Python 內建的 smtplib 可以讓我們透過 SMTP 協定寄信。我們通常搭配 email.message 來建構信件內容。

注意:使用 Gmail 須申請「應用程式密碼 (App Password)」,不能直接用登入密碼。

import smtplib
from email.message import EmailMessage

EMAIL_ADDRESS = "your_email@gmail.com"
EMAIL_PASSWORD = "your_app_password"

msg = EmailMessage()
msg['Subject'] = "Python 自動發信測試"
msg['From'] = EMAIL_ADDRESS
msg['To'] = "receiver@example.com"
msg.set_content("這是純文字內容。")

# 加入 HTML 內容 (選用)
msg.add_alternative("""\
<!DOCTYPE html>
<html>
    <body>
        <h1 style="color:Blue;">這是一封 HTML 信件</h1>
        <p>由 Python 自動發送!</p>
    </body>
</html>
""", subtype='html')

# 加入附件 (選用)
with open('report.pdf', 'rb') as f:
    file_data = f.read()
    file_name = f.name
    msg.add_attachment(file_data, maintype='application', subtype='pdf', filename=file_name)

# 寄送
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
    smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
    smtp.send_message(msg)
    print("信件已發送!")

如果是初學者,推薦使用第三方庫 yagmail,設定更簡單!

2. PDF 處理 (pypdf)

pypdf (舊名 PyPDF2) 是處理 PDF 的標準庫。常用功能:合併、拆分、加密、讀取文字。

安裝:pip install pypdf

讀取文字

from pypdf import PdfReader

reader = PdfReader("document.pdf")
page = reader.pages[0]
print(page.extract_text())

合併 PDF (Merge)

這是最實用的功能!把多份報告合而為一。

from pypdf import PdfWriter

merger = PdfWriter()

pdfs = ['cover.pdf', 'content.pdf', 'appendix.pdf']

for pdf in pdfs:
    merger.append(pdf)

merger.write("final_report.pdf")
merger.close()

拆分 PDF (Split)

from pypdf import PdfReader, PdfWriter

reader = PdfReader("big_file.pdf")

# 將每一頁存成獨立檔案
for i, page in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(page)
    
    with open(f"page_{i+1}.pdf", "wb") as output_pdf:
        writer.write(output_pdf)

3. 實戰整合:Excel -> PDF -> Email

結合前幾章的知識,你現在可以:

  1. pandas/openpyxl 讀 Excel 名單。
  2. reportlab (需另學) 或 Word 套版生成 PDF。
  3. smtplib 將 PDF 寄給對應的人。

這就是價值百萬的自動化流程!

下一章,我們將學習如何製作一個能在 Discord 或 Line 群組自動回覆的 Chatbot (聊天機器人)


延伸閱讀

LATEST POST
TAG