email-smtp-send

email-smtp-send

透過 SMTP 發送電子郵件,可附加本地檔案,並可選擇透過 IMAP APPEND 同步至寄件備份信箱。適用於需要可靠外寄郵件傳遞、附加檔案、SMTP 連線檢查,或跨用戶端寄件備份可見性(例如 SMTP 發送後附加至「寄件備份」)的情境。

7星標
14分支
更新於 2026/6/1
SKILL.md
readonlyread-only
name
email-smtp-send
description

透過 SMTP 發送電子郵件,可附加本地檔案,並可選擇透過 IMAP APPEND 同步至寄件備份信箱。適用於需要可靠外寄郵件傳遞、附加檔案、SMTP 連線檢查,或跨用戶端寄件備份可見性(例如 SMTP 發送後附加至「寄件備份」)的情境。

Email SMTP Send

核心目標

  • 使用環境變數設定的憑證,透過 SMTP 發送外寄郵件。
  • 依需求將本地檔案附加至 MIME 郵件內容。
  • 可選擇將已發送郵件附加至 IMAP 寄件備份信箱,以實現跨用戶端可見性。
  • 在發送前驗證 SMTP 與寄件同步設定。
  • 回傳機器可讀的 JSON 狀態/錯誤輸出。

工作流程

  1. 設定 SMTP 環境變數(請參閱 references/env.mdassets/config.example.env)。
  2. 選用:若啟用同步功能,請設定 IMAP 寄件同步環境變數並安裝 imapclient
  3. 驗證設定:
python3 scripts/smtp_send.py check-config
  1. 發送一封郵件:
python3 scripts/smtp_send.py send \
  --to recipient@example.com \
  --subject "SMTP 測試" \
  --body "來自 email-smtp-send 的問候"
  1. 附加檔案發送:
python3 scripts/smtp_send.py send \
  --to recipient@example.com \
  --subject "包裹遞送" \
  --body "請見附件。" \
  --attach ./report.pdf \
  --attach ./appendix.xlsx
  1. 發送並同步至寄件備份:
python3 scripts/smtp_send.py send \
  --to recipient@example.com \
  --subject "已同步發送" \
  --body "此郵件將附加至寄件備份。" \
  --sync-sent \
  --sent-mailbox "Sent Items"

輸出規範

  • check-config 會印出經過清理的 SMTP 設定 JSON,包含預設值與寄件同步設定。
  • send 成功時會印出一個 type=status JSON 物件,包含:
    • event=smtp_sent
    • 寄件者、收件者摘要、主旨、SMTP 主機/埠號
    • message_id
    • attachment_countattachments[] 中繼資料
    • sent_sync 物件,包含 enabledrequiredappended 以及同步中繼資料/錯誤
  • send 失敗時會將 type=error JSON 輸出至 stderr,可能的事件:
    • event=smtp_send_invalid_args
    • event=smtp_send_failed
    • event=smtp_sent_sync_failed(僅在同步為必要且同步失敗時)

參數

  • send --to:必要收件者,可重複或逗號分隔。
  • send --cc:選用副本收件者。
  • send --bcc:選用密件副本收件者。
  • send --subject:選用主旨(預設來自環境變數)。
  • send --body:選用內文(預設來自環境變數)。
  • send --content-typeplainhtml
  • send --from:選用寄件者覆蓋。
  • send --attach:選用本地附加檔案路徑,可重複或逗號分隔。
  • send --max-attachment-bytes:每個附加檔案允許的最大位元組數。
  • send --message-id:選用 Message-ID 標頭。
  • send --in-reply-to:選用 In-Reply-To 標頭。
  • send --references:選用 References 標頭。
  • send --sync-sent|--no-sync-sent:強制啟用/停用本次發送的 IMAP 寄件同步。
  • send --sent-mailbox:覆蓋寄件備份信箱。
  • send --sent-flags:IMAP APPEND 旗標,逗號分隔(預設 \Seen)。
  • send --sent-sync-required:若 SMTP 成功但寄件同步失敗,回傳非零值。

環境變數預設值:

  • SMTP_HOSTSMTP_PORTSMTP_SSLSMTP_STARTTLS
  • SMTP_USERNAMESMTP_PASSWORDSMTP_FROMSMTP_CONNECT_TIMEOUT
  • SMTP_SUBJECTSMTP_BODYSMTP_CONTENT_TYPE
  • SMTP_MAX_ATTACHMENT_BYTES
  • SMTP_SYNC_SENTSMTP_SYNC_SENT_REQUIRED
  • SMTP_SENT_IMAP_HOSTSMTP_SENT_IMAP_PORTSMTP_SENT_IMAP_SSL
  • SMTP_SENT_IMAP_USERNAMESMTP_SENT_IMAP_PASSWORD
  • SMTP_SENT_IMAP_MAILBOXSMTP_SENT_IMAP_FLAGSSMTP_SENT_IMAP_CONNECT_TIMEOUT
  • 相容性備援:IMAP_HOSTIMAP_PORTIMAP_SSLIMAP_USERNAMEIMAP_PASSWORDIMAP_CONNECT_TIMEOUT

相依套件

  • 寄件同步模式需要 imapclient
python3 -m pip install imapclient

錯誤處理

  • 無效的環境設定會以代碼 2 結束。
  • 發送失敗會以代碼 1 結束。
  • 若同步為必要(--sent-sync-requiredSMTP_SYNC_SENT_REQUIRED=true),同步失敗會以代碼 1 結束。

參考資料

  • references/env.md

資產

  • assets/config.example.env

腳本

  • scripts/smtp_send.py