Features

Email Integration

Servelo handles inbound and outbound email natively. Customers can open tickets by sending an email, reply to updates without ever visiting the portal, and your team can respond directly from their inbox.

Inbound email address

Every tenant has a dedicated inbound email address:

{slug}@serveloapp.com

Any email sent to this address creates a new ticket and notifies your admin. If the sender is not already a client, a client record is created automatically using their name and email address.

💡 If you have an existing support address like support@yourdomain.com, set up a forward rule in your email provider pointing to {slug}@serveloapp.com. No DNS changes required on your side.

New ticket from email

Flow: customer emails your support address
Customer
support@yourdomain.com
Your email
ImprovMX / Google / etc.
forward rule
AWS SES
{slug}@serveloapp.com
Lambda
routes by address
Ticket created
in correct tenant
Servelo server
POST /api/inbound/email
Admin notified
admin@yourdomain.com
with reply token
Customer confirmed
ticket #XXXX created
with reply token
  1. Customer sends an email to your support address (e.g. support@yourdomain.com)
  2. Your email provider forwards it to {slug}@serveloapp.com
  3. AWS SES receives it, stores the raw email in S3, and triggers a Lambda function
  4. Lambda identifies the tenant from the To address and posts to the Servelo server
  5. A ticket is created. If the sender is new, a client record is created automatically
  6. Your admin receives a notification email with the ticket contents
  7. The customer receives a confirmation with their ticket number

Reply by email

Both your team and your customers can reply to ticket notification emails. Replies are threaded directly to the correct ticket using a signed reply token embedded in the Reply-To header, no login required.

Flow: technician replies from inbox
Technician
hits Reply in email client
AWS SES
reply+TOKEN@serveloapp.com
Lambda
decodes token
Servelo server
verifies + posts comment
Comment added
on correct ticket
Customer notified
with new reply token

How reply tokens work

Every outgoing notification email has a Reply-To address in the form:

reply+TOKEN@serveloapp.com

The token is a base64-encoded string containing the tenant slug, ticket ID, and customer ID, signed with an HMAC secret. This means:

⚠️ Reply tokens do not expire. If a customer forwards a notification email, anyone with that email can post a reply to the ticket. This is a deliberate tradeoff for simplicity, the same model used by GitHub, Linear, and most issue trackers.

Email routing logic

Lambda routes inbound emails based on the local part of the To address:

Address patternAction
reply+TOKEN@serveloapp.comAdds a comment to the matching ticket
{slug}@serveloapp.comCreates a new ticket in the matching tenant
support@serveloapp.comForwarded to the operator's personal inbox
legal@serveloapp.comForwarded to the operator's personal inbox

Setting up inbound email for your tenant

  1. Note your tenant slug (visible in your browser URL, e.g. acme)
  2. In your email provider, add a forward rule: support@yourdomain.comacme@serveloapp.com
  3. Test by sending an email to your support address — a ticket should appear within seconds
  4. Optionally set a Portal Notify Email in Settings to control who gets notified
ℹ️ The Support / Reply-To Email in Settings is used on quotes only. Ticket email reply addresses are set automatically per ticket.