Email Imap Append
Compose unsent email drafts (with optional attachments) and append them to an IMAP mailbox via AP…
by tiangong-ai · MIT
The skill
Compose unsent email drafts (with optional attachments) and append them to an IMAP mailbox via APPEND (typically Drafts) without sending. Use when tasks need to save draft messages for human review, prefill reply templates, stage outbound content inside mailbox folders before manual send, or prepare draft attachments in mailbox-native format.
Email IMAP Append
Core Goal
- Build RFC 5322 draft messages with subject/body/recipients.
- Attach local files into draft MIME payload when requested.
- Append the draft MIME into an IMAP mailbox using
APPEND. - Set draft flags (default
\\Draft) and keep the message unsent. - Return machine-readable JSON with append status and server response metadata.
Workflow
- Configure IMAP env vars (see
references/env.mdandassets/config.example.env). - Validate config and defaults:
python3 scripts/imap_append.py check-config
- Append one draft email to Drafts mailbox:
python3 scripts/imap_append.py append-draft \
--to reviewer@example.com \
--subject "Draft: quarterly update" \
--body "Please review this draft before sending."
- Append HTML draft with explicit mailbox and flags:
python3 scripts/imap_append.py append-draft \
--mailbox "Drafts" \
--flags "\\Draft,\\Seen" \
--content-type html \
--subject "Draft: release note" \
--body "<p>Release note draft for approval.</p>"
- Append draft with attachments:
python3 scripts/imap_append.py append-draft \
--to reviewer@example.com \
--subject "Draft: WG2 package" \
--body "See attached draft tables." \
--attach ./wg2-table.xlsx \
--attach ./notes.docx
Output Contract
check-configprints sanitized IMAP + append defaults as JSON.append-draftsuccess prints onetype=statusJSON object containing:event=imap_draft_appendedaccount,mailbox,subject,message_id- recipient lists and counts
flagsattachment_countandattachments[]metadataappend_uidvalidityandappend_uidwhen server returnsAPPENDUID
append-draftfailure printstype=errorJSON to stderr withevent=imap_append_failed.
Parameters
append-draft --to: optional recipient, repeatable or comma-separated.append-draft --cc: optional CC recipient list.append-draft --bcc: optional BCC recipient list.append-draft --subject: optional subject (defaults from env).append-draft --body: optional body (defaults from env).append-draft --content-type:plainorhtml.append-draft --from: optional sender override.append-draft --mailbox: target mailbox (defaultIMAP_APPEND_MAILBOX, thenIMAP_MAILBOX, thenDrafts).append-draft --flags: append flags, comma-separated (default\\Draft).append-draft --message-id: explicit Message-ID header.append-draft --in-reply-to: optional In-Reply-To header.append-draft --references: optional References header.append-draft --attach: local attachment path, repeatable or comma-separated.append-draft --max-attachment-bytes: max bytes allowed per attachment.
Required Environment
IMAP_HOSTIMAP_USERNAMEIMAP_PASSWORD
Optional defaults:
IMAP_NAMEIMAP_PORTIMAP_SSLIMAP_CONNECT_TIMEOUTIMAP_MAILBOXIMAP_APPEND_MAILBOXIMAP_APPEND_FLAGSIMAP_APPEND_FROMIMAP_APPEND_TOIMAP_APPEND_CCIMAP_APPEND_BCCIMAP_APPEND_SUBJECTIMAP_APPEND_BODYIMAP_APPEND_CONTENT_TYPEIMAP_APPEND_MAX_ATTACHMENT_BYTES
References
references/env.md
Assets
assets/config.example.env
Scripts
scripts/imap_append.py
Use this skill
Connect your agent to the Skill Store MCP server and ask for it by ref: tiangong-ai/email-imap-append-16795059171.
Details
- Publisher
- tiangong-ai
- Category
- AI & Agents › Tool & MCP integration
- License
- MIT
- Updated
- 2026-09-14
References
More from tiangong-ai
- Academic Paper Download Fetch and atomically save structurally and identity-verified academic-paper PDFs from legal open-…
- Ai Tech Fulltext Fetch Fetch and persist article full text for RSS entries already stored in SQLite by ai-tech-rss-fetch.
- Ai Tech Rss Fetch Subscribe to AI and tech RSS feeds and persist normalized metadata into SQLite using mature Pytho…
- Ai Tech Summary Retrieve time-windowed RSS evidence from SQLite and let the agent produce final summaries using R…