🎯

mailsac

🎯Skill

from vm0-ai/vm0-skills

VibeIndex|
What it does

Manages disposable email addresses for testing, enabling email verification, inbox management, and QA automation via Mailsac API.

πŸ“¦

Part of

vm0-ai/vm0-skills(138 items)

mailsac

Installation

Add MarketplaceAdd marketplace to Claude Code
/plugin marketplace add vm0-ai/vm0-skills
Install PluginInstall plugin from marketplace
/plugin install notion@vm0-skills
Install PluginInstall plugin from marketplace
/plugin install slack-webhook@vm0-skills
git cloneClone repository
git clone https://github.com/vm0-ai/vm0-skills.git
πŸ“– Extracted from docs: vm0-ai/vm0-skills
13Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

Mailsac disposable email API via curl. Use this skill to receive test emails, validate email addresses, manage inboxes, and automate email-based QA testing.

Overview

# Mailsac

Use the Mailsac API via direct curl calls to manage disposable email addresses for testing and QA automation.

> Official docs: https://docs.mailsac.com/

---

When to Use

Use this skill when you need to:

  • Receive test emails in disposable inboxes
  • Validate email addresses (check format and disposable status)
  • Automate email verification flows in E2E tests
  • Configure webhooks for real-time email notifications
  • Manage private email addresses for testing

---

Prerequisites

  1. Sign up at https://mailsac.com/
  2. Get your API key from the dashboard (Account > API Key)

```bash

export MAILSAC_API_KEY="your-api-key"

```

---

> Important: When using $VAR in a command that pipes to another command, wrap the command containing $VAR in bash -c '...'. Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly.

> ```bash

> bash -c 'curl -s "https://mailsac.com/api/..." --header "Mailsac-Key: $MAILSAC_API_KEY"'

> ```

How to Use

All examples below assume you have MAILSAC_API_KEY set.

Base URL: https://mailsac.com

---

1. Messages - Read Emails

Retrieve and read emails from any inbox.

List Messages in Inbox

```bash

bash -c 'curl -s "https://mailsac.com/api/addresses/test@mailsac.com/messages" --header "Mailsac-Key: $MAILSAC_API_KEY"' | jq .

```

Read Message Content (Plain Text)

Replace with the actual messageId from the list:

```bash

bash -c 'curl -s "https://mailsac.com/api/text/test@mailsac.com/" --header "Mailsac-Key: $MAILSAC_API_KEY"'

```

Read Message Content (HTML)

```bash

bash -c 'curl -s "https://mailsac.com/api/body/test@mailsac.com/" --header "Mailsac-Key: $MAILSAC_API_KEY"'

```

Get Raw SMTP Message (with headers and attachments)

```bash

bash -c 'curl -s "https://mailsac.com/api/raw/test@mailsac.com/" --header "Mailsac-Key: $MAILSAC_API_KEY"'

```

Get Message Headers as JSON

```bash

bash -c 'curl -s "https://mailsac.com/api/headers/test@mailsac.com/" --header "Mailsac-Key: $MAILSAC_API_KEY"' | jq .

```

Message Format Endpoints:

| Endpoint | Description |

|----------|-------------|

| /api/text/{email}/{messageId} | Plain text body |

| /api/body/{email}/{messageId} | Sanitized HTML body |

| /api/dirty/{email}/{messageId} | Unsanitized HTML with inlined images |

| /api/raw/{email}/{messageId} | Complete SMTP message |

| /api/headers/{email}/{messageId} | JSON headers |

---

2. Messages - Delete

Delete single messages or purge entire inboxes.

Delete Single Message

```bash

bash -c 'curl -s -X DELETE "https://mailsac.com/api/addresses/test@mailsac.com/messages/" --header "Mailsac-Key: $MAILSAC_API_KEY"'

```

Purge Entire Inbox (Enhanced Address only)

```bash

bash -c 'curl -s -X DELETE "https://mailsac.com/api/addresses/test@mailsac.com/messages" --header "Mailsac-Key: $MAILSAC_API_KEY"'

```

Note: Starred messages will NOT be purged. Unstar them first if you want to delete everything.

Delete All Messages in Custom Domain

```bash

bash -c 'curl -s -X PUT "https://mailsac.com/api/domains/yourdomain.com/delete-all-domain-mail" --header "Mailsac-Key: $MAILSAC_API_KEY"'

```

---

3. Private Addresses - Reserve and Release

Manage private email addresses for exclusive use.

Reserve a Private Address

```bash

bash -c 'curl -s -X POST "https://mailsac.com/api/addresses/mytest@mailsac.com" --header "Mailsac-Key: $MAILSAC_API_KEY"' | jq .

```

Response:

```json

{

"_id": "mytest@mailsac.com",

"owner": "your-username",

"forward": null,

"webhook": null,

"webhookSlack": null,

"enablews": false,

"created": "2024-01-01T00:00:00.000Z",

"updated": "2024-01-01T00:00:00.000Z"

}

```

List Your Private Addresses

```bash

bash -c 'curl -s "https://mailsac.com/api/addresses" --header "Mailsac-Key: $MAILSAC_API_KEY"' | jq .

```

Release a Private Address

```bash

bash -c 'curl -s -X DELETE "https://mailsac.com/api/addresses/mytest@mailsac.com" --header "Mailsac-Key: $MAILSAC_API_KEY"'

```

Release Address and Delete All Messages

```bash

bash -c 'curl -s -X DELETE "https://mailsac.com/api/addresses/mytest@mailsac.com?deleteAddressMessages=true" --header "Mailsac-Key: $MAILSAC_API_KEY"'

```

---

4. Webhook Forwarding

Configure webhooks to receive email notifications in real-time.

Set Webhook for Private Address

Write to /tmp/mailsac_webhook.json:

```json

{

"webhook": "https://your-server.com/email-webhook"

}

```

Then run:

```bash

bash -c 'curl -s -X PUT "https://mailsac.com/api/private-address-forwarding/mytest@mailsac.com" --header "Mailsac-Key: $MAILSAC_API_KEY" --header "Content-Type: application/json" -d @/tmp/mailsac_webhook.json' | jq .

```

Remove Webhook

Write to /tmp/mailsac_webhook.json:

```json

{

"webhook": ""

}

```

Then run:

```bash

bash -c 'curl -s -X PUT "https://mailsac.com/api/private-address-forwarding/mytest@mailsac.com" --header "Mailsac-Key: $MAILSAC_API_KEY" --header "Content-Type: application/json" -d @/tmp/mailsac_webhook.json' | jq .

```

Webhook Payload Format:

```json

{

"text": "Email body content",

"subject": "Email subject",

"from": [{"address": "sender@example.com", "name": "Sender Name"}],

"to": [{"address": "recipient@mailsac.com", "name": ""}],

"headers": {},

"messageId": "unique-message-id",

"date": "2024-01-01T00:00:00.000Z",

"receivedDate": "2024-01-01T00:00:00.000Z",

"raw": "Full RFC-formatted email"

}

```

---

5. Email Validation

Validate email addresses and detect disposable email services.

Validate Single Email

```bash

bash -c 'curl -s "https://mailsac.com/api/validations/addresses/test@example.com" --header "Mailsac-Key: $MAILSAC_API_KEY"' | jq .

```

Response:

```json

{

"email": "test@example.com",

"isValidFormat": true,

"isDisposable": false,

"disposableDomains": [],

"aliases": [],

"domain": "example.com",

"local": "test"

}

```

Check if Email is Disposable

```bash

bash -c 'curl -s "https://mailsac.com/api/validations/addresses/test@mailsac.com" --header "Mailsac-Key: $MAILSAC_API_KEY"' | jq '{email, isDisposable}'

```

Validation Response Fields:

| Field | Description |

|-------|-------------|

| isValidFormat | Email syntax is valid |

| isDisposable | Email is from a disposable service |

| disposableDomains | List of identified disposable domains |

| aliases | Domain aliases and IP addresses |

| domain | Domain part of email |

| local | Local part of email |

---

6. Send Email (Outgoing)

Send emails via API (requires outgoing message credits).

Write to /tmp/mailsac_outgoing.json:

```json

{

"to": "recipient@example.com",

"from": "sender@mailsac.com",

"subject": "Test Email",

"text": "This is the email body content."

}

```

Then run:

```bash

bash -c 'curl -s -X POST "https://mailsac.com/api/outgoing-messages" --header "Mailsac-Key: $MAILSAC_API_KEY" --header "Content-Type: application/json" -d @/tmp/mailsac_outgoing.json' | jq .

```

Note: Sending requires purchased credits unless sending within your custom domain.

---

7. Attachments

Download attachments from received emails.

Get Attachment by MD5 Hash

```bash

bash -c 'curl -s "https://mailsac.com/api/addresses/test@mailsac.com/messages//attachments/" --header "Mailsac-Key: $MAILSAC_API_KEY"' > attachment.bin

```

Get Raw Message and Parse Attachments

```bash

bash -c 'curl -s "https://mailsac.com/api/raw/test@mailsac.com/" --header "Mailsac-Key: $MAILSAC_API_KEY"' > message.eml

```

Note: For public addresses, attachments must be downloaded via API; they are not viewable on the website.

---

8. Star/Save Messages

Prevent messages from being auto-deleted by starring them.

Star a Message

```bash

bash -c 'curl -s -X PUT "https://mailsac.com/api/addresses/test@mailsac.com/messages//star" --header "Mailsac-Key: $MAILSAC_API_KEY"' | jq .

```

---

Practical Examples

Wait for Email and Extract Verification Code

```bash

EMAIL="test-$(date +%s)@mailsac.com"

echo "Use this email for registration: $EMAIL"

# Poll for new message (check every 5 seconds, max 60 seconds)

for i in $(seq 1 12); do

MESSAGES=$(bash -c 'curl -s "https://mailsac.com/api/addresses/'"$EMAIL"'/messages" --header "Mailsac-Key: $MAILSAC_API_KEY"')

COUNT=$(echo "$MESSAGES" | jq 'length')

if [ "$COUNT" -gt "0" ]; then

MESSAGE_ID=$(echo "$MESSAGES" | jq -r '.[0]._id')

echo "Message received: $MESSAGE_ID"

bash -c 'curl -s "https://mailsac.com/api/text/'"$EMAIL"'/'"$MESSAGE_ID"'" --header "Mailsac-Key: $MAILSAC_API_KEY"'

break

fi

echo "Waiting for email... ($i/12)"

sleep 5

done

```

List Recent Messages with Subject and Sender

```bash

bash -c 'curl -s "https://mailsac.com/api/addresses/test@mailsac.com/messages" --header "Mailsac-Key: $MAILSAC_API_KEY"' | jq '.[] | {subject, from: .from[0].address, received: .received}'

```

Clean Up Test Inbox Before Tests

```bash

bash -c 'curl -s -X DELETE "https://mailsac.com/api/addresses/test@mailsac.com/messages" --header "Mailsac-Key: $MAILSAC_API_KEY"'

echo "Inbox purged"

```

Check if Email Service is Disposable

```bash

bash -c 'curl -s "https://mailsac.com/api/validations/addresses/user@tempmail.com" --header "Mailsac-Key: $MAILSAC_API_KEY"' | jq 'if .isDisposable then "DISPOSABLE" else "LEGITIMATE" end'

```

---

Response Format

Message List Response

```json

[

{

"_id": "message-id-here",

"from": [{"address": "sender@example.com", "name": "Sender"}],

"to": [{"address": "test@mailsac.com", "name": ""}],

"subject": "Email Subject",

"received": "2024-01-01T00:00:00.000Z",

"size": 1234,

"attachments": []

}

]

```

Validation Response

```json

{

"email": "test@mailsac.com",

"isValidFormat": true,

"isDisposable": true,

"disposableDomains": ["mailsac.com"],

"aliases": ["104.197.186.12"],

"domain": "mailsac.com",

"local": "test"

}

```

---

Limits and Quotas

| Type | Limit |

|------|-------|

| Public address message retention | 4 days |

| Public inbox max messages | 6 |

| Max message size | 2.5 MB |

| Operations quota reset | 1st of each month (UTC) |

---

Guidelines

  1. Public vs Private: Public addresses are accessible by anyone; use private addresses for sensitive test data
  2. Starred messages: Star important messages to prevent auto-deletion
  3. Rate limits: Free accounts may experience throttling; paid plans have higher limits
  4. Webhook reliability: Check Recent Activity page for webhook debugging
  5. Attachments security: For security reasons, attachments on public addresses require API access
  6. Operations count: Listing messages + reading content = 2 API operations

More from this repository10