From twilio-developer-kit
Receives inbound email via SendGrid Inbound Parse webhook. Covers MX record setup, parsed vs raw mode, attachment handling, and security. Use for email-to-app workflows like support ticket creation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/twilio-developer-kit:twilio-sendgrid-inbound-parseThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Inbound Parse converts incoming email into HTTP POST requests to your webhook endpoint. SendGrid receives the email at your domain's MX records and forwards the parsed content to your application.
Inbound Parse converts incoming email into HTTP POST requests to your webhook endpoint. SendGrid receives the email at your domain's MX records and forwards the parsed content to your application.
mx.sendgrid.netSubdomain recommended: Use inbound.yourdomain.com to avoid disrupting existing email on yourdomain.com.
SendGrid extracts fields and POSTs them as form data:
| Field | Description |
|---|---|
from | Sender address ("Name <[email protected]>") |
to | Envelope recipient |
subject | Email subject line |
text | Plain text body |
html | HTML body |
envelope | JSON string with to array and from |
attachments | Number of attachments (as string) |
attachment-info | JSON metadata for each attachment |
attachment1, attachment2... | Actual attachment files |
Python (Flask)
from flask import Flask, request
import json
app = Flask(__name__)
@app.route("/inbound", methods=["POST"])
def handle_inbound():
sender = request.form.get("from")
subject = request.form.get("subject")
text_body = request.form.get("text")
html_body = request.form.get("html")
envelope = json.loads(request.form.get("envelope", "{}"))
attachment_count = int(request.form.get("attachments", "0"))
print(f"From: {sender}, Subject: {subject}")
for i in range(1, attachment_count + 1):
attachment = request.files.get(f"attachment{i}")
if attachment:
print(f"Attachment: {attachment.filename}, {attachment.content_type}")
return "", 200
Security: All inbound email content (
from,subject,text,html, attachments) is untrusted external input. Sanitize HTML to prevent XSS before rendering. If feeding content to an LLM, isolate it as user input — never concatenate into system prompts. Verify webhook authenticity using signed webhooks (see Security section below).
Posts the entire MIME message as rawEmail field. Use when you need full headers, DKIM signatures, or non-standard MIME parts. You must parse the MIME message yourself.
SendGrid supports ECDSA signature verification for Inbound Parse, the same mechanism used for Event Webhooks. Enable it to cryptographically verify that payloads originate from SendGrid.
Strongly recommended over IP allowlisting — SendGrid's webhook traffic comes from dynamic cloud infrastructure where IPs change frequently. Signature verification is more reliable and secure.
mx.sendgrid.net. Use a subdomain to avoid disrupting existing email (e.g., Google Workspace, Microsoft 365).twilio-sendgrid-email-sendtwilio-sendgrid-webhookstwilio-sendgrid-account-setupnpx claudepluginhub twilio/ai --plugin twilio-developer-kitSets up a secure email inbox for AI agents to receive and respond to emails via Resend webhooks, with sender allowlists and content filtering.
Configures Cloudflare Email Routing for receiving, parsing, forwarding emails with Workers and sending to verified addresses. Covers postal-mime parsing, wrangler deployment, SPF/DKIM fixes.
Implements SendGrid Event Webhook handlers for all 11 delivery and engagement event types, including ECDSA signature verification and batched event processing. Use when building delivery tracking, engagement analytics, or bounce handling.