Email-to-Ticket

Configure inbound email parsing to automatically create support tickets and append replies.

Overview

MaxRMM can receive inbound emails and automatically:

  • Create a new ticket from the email subject and body
  • Add a comment to an existing ticket when the email subject contains a ticket reference

This works with email parsing services like Resend or SendGrid that forward incoming emails to a webhook URL.

How It Works

  1. An end user sends an email to your support address (e.g., support@company.com)
  2. Your email provider forwards the parsed email to the MaxRMM inbound webhook
  3. MaxRMM matches the sender's domain to a company in the system
  4. If the subject contains a ticket reference (e.g., [Ticket: clxxxxxxxxx]), a comment is added to the existing ticket
  5. Otherwise, a new ticket is created with medium priority and SLA timers applied

Step 1: Set Up Your Email Provider

Using Resend

  1. In Resend, configure an inbound webhook for your domain
  2. Set the webhook URL to:
    https://api.maxrmm.com/api/inbound-email
  3. Resend will POST parsed email data (from, subject, text, html) to this endpoint

Using SendGrid

  1. In SendGrid, go to Settings → Inbound Parse
  2. Add a hostname and set the URL to:
    https://api.maxrmm.com/api/inbound-email
  3. Enable "POST the raw, full MIME message" or use the parsed format

Step 2: Configure Domain Matching

MaxRMM identifies which company a ticket belongs to by matching the sender's email domain. There are two matching methods:

  1. Custom domain — Set your company's domain in Settings. Emails from *@company.com will create tickets under your tenant.
  2. Technician email fallback — If no custom domain matches, MaxRMM looks for a technician in the system with a matching email domain.

Important: If the sender's domain does not match any company or technician in MaxRMM, the email is silently ignored (HTTP 200 returned to the email provider with status ignored).

New Ticket Creation

When a new email arrives that does not match an existing ticket, MaxRMM creates a ticket with:

Field Value
TitleEmail subject line
DescriptionEmail body, prefixed with "Email from sender@domain.com"
PriorityMedium (default)
Sourceemail
SLAResponse and resolution timers applied per your SLA policy

Reply Threading

To add a comment to an existing ticket, the email subject must contain one of these patterns:

  • [Ticket: clxxxxxxxxxxxxxxxxx] — e.g., Re: Printer not working [Ticket: cl8f2k9x0001abcdef012345]
  • #clxxxxxxxxxxxxxxxxx — e.g., Re: Printer not working #cl8f2k9x0001abcdef012345

When a match is found, the email body is added as a public comment on the ticket. This allows end users to reply to ticket notification emails and have their responses threaded into the ticket automatically.

Webhook Payload Format

The inbound email endpoint accepts the following fields (all optional except from and subject):

POST /api/inbound-email
Content-Type: application/json

{
  "from": "user@company.com",
  "subject": "Printer not working",
  "text": "The printer on floor 3 is showing an error...",
  "html": "<p>The printer on floor 3 is showing an error...</p>"
}

The endpoint also accepts SendGrid's envelope format with envelope.from and sender fields.

Note: This endpoint does not require authentication — it is designed to receive webhooks from email providers. The domain-matching logic ensures that only emails from known domains create tickets.

Response Codes

Status Response Meaning
201{"status": "ticket_created", "ticketId": "..."}New ticket was created
200{"status": "comment_added", "ticketId": "...", "commentId": "..."}Comment added to existing ticket
200{"status": "ignored", "reason": "no matching company"}Sender domain not recognized
400{"error": "Missing required fields: from, subject"}Missing from or subject