Inbound email
evre can receive mail on a verified domain, store the parsed message, and deliver a signed email.received webhook.
Enable
- Create an inbound route (or let enable create one):
curl -X POST https://api.evre.email/routes \
-H "Authorization: Bearer $EVRE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Inbound","kind":"inbound","isDefault":true}'
- Verify the sending domain, then enable inbound:
curl -X POST https://api.evre.email/domains/{id}/inbound \
-H "Authorization: Bearer $EVRE_API_TOKEN"
- Publish the returned MX record (distinct from
bounce.*MAIL FROM MX) so mail reaches SES inbound.
Webhooks
Subscribe to email.received. The delivery payload is small; fetch the full body via the API:
{
"type": "email.received",
"createdAt": "…",
"data": {
"email_id": "re_…",
"routeId": "route_…",
"from": "a@ex.com",
"to": ["inbox@customer.com"],
"subject": "…",
"created_at": "…"
}
}
Retrieve
GET /emails/receivedGET /emails/received/{id}
SDK: client.emails.receiving.list() / .get(id)
CLI: evre emails received list|get
Local / mock ingest
curl -X POST https://api.evre.email/internal/inbound-emails \
-H "Authorization: Bearer $EVRE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"from":"a@ex.com","to":"inbox@customer.com","subject":"Hi","text":"hello"}'
Production SES
Set on the API service:
| Env | Purpose |
|---|---|
EVRE_INBOUND_BUCKET | S3 bucket for raw MIME |
EVRE_INBOUND_RECEIPT_RULE_SET | Shared SES receipt rule set (default evre-inbound) |
EVRE_INBOUND_SNS_TOPIC_ARN | SNS topic → POST /internal/ses-inbound |
EVRE_INBOUND_SUBDOMAIN | Optional receive host label (empty = apex) |
EVRE_INBOUND_OBJECT_PREFIX | S3 key prefix (default inbound) |
Subscribe the SNS topic to https://api.evre.email/internal/ses-inbound (HTTPS confirmation is handled automatically).