email-smtp-send

email-smtp-send

通过SMTP发送电子邮件,可附带本地附件,并可选择通过IMAP APPEND同步到已发送邮箱。适用于需要可靠外发邮件、发送附件、检查SMTP连接或实现跨客户端已发送邮件可见性的任务(例如在SMTP发送后将邮件追加到“已发送邮件”文件夹)。

7Star
14Fork
更新于 2026/6/1
SKILL.md
只读
名称
email-smtp-send
描述

通过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 test" \
  --body "Hello from email-smtp-send"
  1. 发送带附件的邮件:
python3 scripts/smtp_send.py send \
  --to recipient@example.com \
  --subject "Package delivery" \
  --body "See attachments." \
  --attach ./report.pdf \
  --attach ./appendix.xlsx
  1. 发送并同步到已发送邮箱:
python3 scripts/smtp_send.py send \
  --to recipient@example.com \
  --subject "Synced send" \
  --body "This message will be appended to Sent Items." \
  --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