Keep Customers Informed at Every Shipping Stage

Automated shipping notifications with real-time tracking links. Reduce 'where is my order?' tickets by 40% with proactive updates.


Why this matters

Customers contact support asking about their order status when they don't receive proactive shipping updates. Each 'where is my order?' ticket costs time and money, and the customer experience suffers. Manual shipping notifications don't scale during peak fulfillment periods, leaving customers in the dark during the most anxious part of the purchase journey.


How MultiMail solves this

MultiMail's AI agent sends automated shipping status emails as packages move through fulfillment stages — picked, packed, shipped, out for delivery, and delivered. Autonomous oversight ensures zero delay on these event-driven, templated notifications. High volume is handled without creating a human bottleneck.

1

Receive Fulfillment Events

Your fulfillment system sends shipping status events to the AI agent via webhook or API call. Each event includes the order ID, current status, tracking number, and estimated delivery window.

2

Generate Status Update Email

The agent composes a clear, concise email with the current shipping status, tracking link, and updated estimated delivery time. The format adapts based on the event type (shipped vs. out for delivery vs. delivered).

3

Send Immediately

Under autonomous oversight, the update is sent instantly via send_email. Customers receive real-time notifications without any human approval needed.

4

Handle Exceptions

If a delivery encounters issues (delays, failed delivery attempts, returned to sender), the agent sends appropriate notification emails with next steps and support contact information.


Implementation

Process Shipping Event
python
import requests

API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}

STATUS_SUBJECTS = {
    "shipped": "Your order #{order_id} has shipped!",
    "in_transit": "Your order #{order_id} is on its way",
    "out_for_delivery": "Your order #{order_id} is out for delivery",
    "delivered": "Your order #{order_id} has been delivered"
}

def handle_shipping_event(event: dict):
    subject = STATUS_SUBJECTS[event["status"]].format(
        order_id=event["order_id"]
    )

    body = (
        f"Hi {event[&"cm">#039;customer_name']},\n\n"
        f"{get_status_message(event)}\n\n"
        f"Track your package: {event[&"cm">#039;tracking_url']}\n"
        f"Estimated delivery: {event[&"cm">#039;eta']}"
    )

    requests.post(
        f"{API}/send",
        headers=HEADERS,
        json={
            "from": "[email protected]",
            "to": event["customer_email"],
            "subject": subject,
            "text_body": body,
            "html_body": build_shipping_html(event)
        }
    )

Handle fulfillment events and send appropriate shipping status emails.

Handle Delivery Exceptions
python
import requests

API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}

def handle_delivery_exception(event: dict):
    if event["exception_type"] == "delayed":
        subject = f"Delivery update: Order "cm">#{event['order_id']} delayed"
        body = (
            f"Hi {event[&"cm">#039;customer_name']}, your delivery has been "
            f"delayed. New estimated arrival: {event[&"cm">#039;new_eta']}.\n\n"
            f"We apologize for the inconvenience. Track updates: "
            f"{event[&"cm">#039;tracking_url']}"
        )
    elif event["exception_type"] == "failed_attempt":
        subject = f"Delivery attempted: Order "cm">#{event['order_id']}"
        body = (
            f"Hi {event[&"cm">#039;customer_name']}, delivery was attempted "
            f"but could not be completed. A second attempt will be "
            f"made on {event[&"cm">#039;retry_date']}.\n\n"
            f"Need to reschedule? Reply to this email."
        )

    requests.post(
        f"{API}/send",
        headers=HEADERS,
        json={
            "from": "[email protected]",
            "to": event["customer_email"],
            "subject": subject,
            "text_body": body,
            "html_body": f"<p>{body}</p>"
        }
    )

Send notifications for shipping delays or failed delivery attempts.

MCP Tool Integration
typescript
"cm">// Using MultiMail MCP tools for shipping updates

async function handleShippingEvent(event: ShippingEvent) {
  const statusMessages: Record<string, string> = {
    shipped: "has shipped and is on its way!",
    in_transit: "is currently in transit.",
    out_for_delivery: "is out for delivery today!",
    delivered: "has been delivered."
  };

  "cm">// Send shipping update
  await mcp.send_email({
    to: event.customerEmail,
    subject: `Your order #${event.orderId} ${event.status.replace("_", " ")}`,
    text_body: [
      `Hi ${event.customerName},`,
      `Your order #${event.orderId} ${statusMessages[event.status]}`,
      `Track your package: ${event.trackingUrl}`,
      `Estimated delivery: ${event.eta}`
    ].join("\n\n")
  });

  "cm">// Update contact metadata
  await mcp.add_contact({
    email: event.customerEmail,
    metadata: { last_shipping_status: event.status }
  });
}

Send shipping updates using MultiMail MCP tools.


What you get

40% Fewer Support Tickets

Proactive shipping updates answer the customer's question before they ask it. Less 'where is my order?' means more time for your support team on real issues.

Real-Time Event-Driven Delivery

Autonomous mode sends updates the moment a shipping event occurs. Customers get notifications in real time, not in batches.

Scales to Any Order Volume

No human bottleneck means shipping updates flow at the same speed whether you ship 50 or 50,000 packages per day.

Exception Handling Built In

Delays, failed delivery attempts, and returned packages trigger appropriate customer communications automatically, with clear next steps and support options.


Recommended oversight mode

Recommended
autonomous
Shipping notifications are event-driven, templated, and derived from factual fulfillment data. They carry no brand risk and customers expect instant delivery. Autonomous mode ensures real-time notifications without human delays.

Common questions

How many shipping status emails should I send per order?
The standard cadence is 3-4 updates: shipped, out for delivery, and delivered. Add in-transit updates for long-distance shipments. You can configure which events trigger emails based on your business needs and customer expectations.
Can I include product recommendations in shipping emails?
Yes. Shipping updates have high open rates, making them a good opportunity for cross-sell recommendations. Your AI agent can include personalized product suggestions based on purchase history. Keep recommendations secondary to the shipping information.
What happens if tracking data is delayed from the carrier?
Your agent only sends updates when it receives events from your fulfillment system. If carrier tracking data is delayed, the customer won't get a premature notification. When the data arrives, the update is sent immediately regardless of time of day.
Can customers reply to shipping update emails?
Yes. Replies are captured by MultiMail's inbound processing and can be routed to your support team or AI agent. Customers often reply to shipping emails with delivery instructions or rescheduling requests, and your agent can handle these automatically.

Explore more use cases

The only agent email with a verifiable sender

Email infrastructure built for AI agents. Verifiable identity, graduated oversight, and a 38-tool MCP server. Formally verified in Lean 4.