PluginBench
Skill
Review
Audit score 70

apple-mail

rbouschery/marketplace

Control Apple Mail on macOS—read, send, search, and manage emails via AppleScript.

What is apple-mail?

This skill provides command-line access to Apple Mail on macOS through AppleScript. Use it to automate email workflows: retrieve and search messages, send and draft emails, and manage mailbox operations like archiving and marking read/unread.

  • List email accounts and mailboxes, check unread counts
  • Retrieve recent emails or search by query with optional content
  • Send emails directly or create drafts for manual review
  • Reply to emails with reply-all support
  • Archive, delete, and mark emails as read or unread

How to install apple-mail

npx skills add https://github.com/rbouschery/marketplace --skill apple-mail
Prerequisites
  • macOS with Apple Mail installed and configured
  • At least one email account set up in Apple Mail
  • macOS automation permissions granted to the agent (may prompt on first run)
Claude Code
Cursor
Windsurf
Cline

How to use apple-mail

  1. 1.Install the skill via the provided npx command
  2. 2.Run list-accounts.sh to verify your email accounts are accessible
  3. 3.Use get-emails.sh to retrieve messages from a mailbox, optionally filtering by unread status
  4. 4.Search emails with search-emails.sh using keywords or sender names
  5. 5.Send emails with send-email.sh or create drafts with create-draft.sh for review
  6. 6.Manage messages using mark-read.sh, archive-email.sh, or delete-email.sh as needed

Use cases

Good for
  • Automatically fetch and process incoming emails from specific mailboxes
  • Search email history for messages matching keywords or senders
  • Send templated or programmatic emails without manual composition
  • Create draft replies for review before sending
  • Maintain inbox hygiene by archiving or deleting messages in bulk
Who it's for
  • macOS users automating email workflows
  • Developers building email-integrated agents or bots
  • Teams managing high-volume email processing
  • Anyone seeking to script Apple Mail operations

apple-mail FAQ

Do I need to enter my email password?

No. The skill uses AppleScript to control Apple Mail directly, so it accesses accounts already configured in the Mail app without requiring credentials.

Can I use this with non-Apple email providers?

Yes, as long as the account is set up in Apple Mail (Gmail, Outlook, custom IMAP, etc. all work).

What happens if I don't provide optional arguments?

Pass empty strings "" for optional arguments you don't need. The skill will use defaults like the first account or INBOX mailbox.

Can I send emails to multiple recipients at once?

Yes, pass comma-separated email addresses for the to, cc, or bcc fields in send-email.sh.

Will this work on non-macOS systems?

No, this skill requires macOS and Apple Mail. It uses AppleScript which is macOS-specific.

Full instructions (SKILL.md)

Source of truth, from rbouschery/marketplace.


name: apple-mail description: Interact with Apple Mail on macOS. Use for reading, sending, searching, and managing emails. allowed-tools: Bash, Read

Apple Mail Skill

This skill provides commands to interact with Apple Mail on macOS via AppleScript.

Available Scripts

All scripts are in the ../../scripts/ directory (relative to this file). Execute them via bash from the plugin root.

Account & Mailbox Management

ScriptPurposeArguments
list-accounts.shList all email accountsnone
list-mailboxes.shList mailboxes/folders[account] (optional)
get-unread-count.shGet unread email count[account] [mailbox] (optional)

Reading Emails

ScriptPurposeArguments
get-emails.shGet recent emails[account] [mailbox] [limit] [include_content] [unread_only]
get-email-by-id.shGet specific email by ID<id> [account] [mailbox] [include_content]
search-emails.shSearch emails<query> [account] [mailbox] [limit]

Sending & Composing

ScriptPurposeArguments
send-email.shSend an email<to> <subject> <body> [cc] [bcc] [from]
create-draft.shCreate a draft email<subject> <body> [to] [cc] [bcc] [from]
create-reply-draft.shCreate reply to email<message_id> <body> [reply_all] [account] [mailbox]
send-draft.shSend front-most draftnone

Email Management

ScriptPurposeArguments
archive-email.shArchive an email<message_id> [account] [mailbox] [archive_mailbox]
delete-email.shDelete an email<message_id> [account] [mailbox]
mark-read.shMark email as read<message_id> [account] [mailbox]
mark-unread.shMark email as unread<message_id> [account] [mailbox]

Output Format

Scripts use delimiters for structured output:

  • <<>> separates fields within a record
  • ||| separates multiple records
  • ERROR: prefix indicates an error message

Email Record Format

id<<>>subject<<>>sender<<>>to<<>>cc<<>>bcc<<>>dateSent<<>>isRead<<>>content|||

Usage Examples

List accounts

./scripts/list-accounts.sh

Get recent emails from INBOX

./scripts/get-emails.sh "" "INBOX" 10 false false

Get recent unread emails with content

./scripts/get-emails.sh "" "INBOX" 10 true true

Get specific email by ID

./scripts/get-email-by-id.sh 12345 "iCloud" "INBOX" true

Search emails

./scripts/search-emails.sh "meeting notes" "" "" 20

Send an email

./scripts/send-email.sh "recipient@example.com" "Subject" "Body text"

Send with CC and BCC

./scripts/send-email.sh "to@example.com" "Subject" "Body" "cc@example.com" "bcc@example.com"

Create a draft

./scripts/create-draft.sh "Draft Subject" "Draft body" "recipient@example.com"

Reply to an email

./scripts/create-reply-draft.sh 12345 "Thanks for your message!" false "iCloud" "INBOX"

Send the front-most draft

./scripts/send-draft.sh

Archive an email

./scripts/archive-email.sh 12345 "iCloud" "INBOX"

Mark as read/unread

./scripts/mark-read.sh 12345 "iCloud" "INBOX"
./scripts/mark-unread.sh 12345 "iCloud" "INBOX"

Parsing Output

When receiving email records, parse them like this:

  1. Split by ||| to get individual records
  2. Split each record by <<>> to get fields
  3. Fields are: id, subject, sender, to, cc, bcc, dateSent, isRead, content

Example parsing in bash:

IFS='|||' read -ra emails <<< "$output"
for email in "${emails[@]}"; do
    IFS='<<>>' read -ra fields <<< "$email"
    id="${fields[0]}"
    subject="${fields[1]}"
    sender="${fields[2]}"
    # ... etc
done

Notes

  • Scripts require macOS with Apple Mail configured
  • Apple Mail must have at least one account set up
  • First run may trigger macOS permission prompts for automation
  • Empty optional arguments should be passed as empty strings ""
  • For scripts that need arrays (multiple recipients), pass comma-separated values

Reference

For advanced AppleScript patterns and customization, see ./reference/applescript-patterns.md.