Mail

Mail turns Comms into a shared inbox. Incoming email becomes a message in a channel; replies go out as normal email. Everything stays searchable alongside regular chat.

How Mail works

  1. You point a subdomain (e.g., mail.acme.com) at an email provider that supports inbound parsing (SendGrid, Postmark, Mailgun, etc.).
  2. The provider POSTs parsed messages to Comms's /api/mail/inbound endpoint.
  3. The comms-inbound-email Edge Function verifies the HMAC signature, looks up the destination inbox by address, and inserts the message.
  4. You reply from Comms; the reply goes out via Resend, addressed from the inbox address.

No IMAP polling, no separate client.

Setting up your first inbox

Settings → Mail → Add inbox.

  1. Pick a local part (e.g., support).
  2. Choose the inbound domain (must match COMMS_INBOUND_EMAIL_DOMAIN).
  3. Pick the channel where inbound messages should land (usually a private channel called #mail-support).
  4. Optionally set a signature that appends to every outgoing reply.

Comms gives you the DNS records to paste into your domain registrar. MX + TXT for inbound; SPF + DKIM for outbound (via Resend). Green checkmarks appear when each record propagates.

Replying to email

Email messages look like chat messages in the channel, with an envelope icon and the sender's address. Click Reply to compose.

The composer automatically:

  • Sets From: to the inbox address.
  • Sets To: to the original sender (or Reply-To if present).
  • Preserves Subject: with Re: prefix.
  • Quotes the original message inline.

You can edit any of these before sending.

Threading

Reply threads follow email conventions (In-Reply-To, References). A back-and-forth with a customer renders as one continuous thread, regardless of whether each side replied from email or from Comms.

Assignment and routing

Shared inboxes support lightweight ticketing without a separate tool:

  • Assign a message to a team member (menu on the message).
  • Statusopen, snoozed, resolved. Filter the channel by status.
  • Auto-routing rulesSettings → Mail → Rules. Match on sender, subject, or body and auto-assign, tag, or forward.

Canned replies

Save frequently-used replies under Settings → Mail → Canned replies. Insert with the /canned slash command in the composer. Supports variable substitution: {{sender.name}}, {{inbox.name}}, {{today}}.

Forwarding and drafts

  • Forward from the message menu. Preserves headers and attachments.
  • Save as draft is automatic — unsent composer state survives refreshes for 24 hours.

Spam and DMARC

Inbound provider handles spam filtering. Comms trusts the provider's verdict by default. Under Settings → Mail → Spam you can tighten:

  • Quarantine messages failing DMARC
  • Reject messages failing SPF
  • Allow-list specific senders

Limits

  • Attachment size: 25 MB per file (upstream limit from most mail providers).
  • Inbox count: unlimited — create one per team, product, or project.
  • Retention: inherits the parent channel's retention policy.

Privacy

Every email lives in your Supabase. Nothing is forwarded to ARK or any other party. If you use Resend, bodies pass through Resend's servers on their way out (see Resend's data processing terms).