Mailjet email delivery lookup console for support teams

Type a customer's email address and see every message you sent them, what happened to each one, and why it did not land.

App
MailjetHubSpotSlackCustomer SupportOperationsNotifications & AlertsData Sync
PromptCreate

Build me an email delivery lookup console that my support team opens whenever a customer says "I never got the email." It is an internal tool for support agents, shared across the whole team, and the whole point is to answer one question fast: what happened to the messages we sent this person, and why did they not land.

The main screen is a single search box where the agent types a recipient email address, plus a date-range filter that defaults to the last 30 days. Results are a list of every Mailjet message sent to that person in reverse chronological order. Load the rows with the Mailjet "List and retrieve messages" operation filtered by contact, and enrich them with "List and retrieve message information" so each row can show size and spam details. Mailjet list endpoints wrap results in a { Count, Data, Total } envelope, accept Limit up to 1000 plus Offset for paging, take Unix timestamps or RFC3339 for datetime filters, and accept a Sort property with DESC appended, so sort newest first and page with Offset rather than pulling everything at once.

Keep the search fast and forgiving. If the agent types a complete email address, filter the message list directly by that contact, which is the fast path. If they type a fragment such as a first name, a last name, or a company domain, scan the messages in the selected date window and match recipient addresses that contain the fragment, case-insensitively and ignoring stray whitespace. When a fragment matches more than one address, show a short candidate picker listing the matching addresses with how many messages each has, and let the agent click through to the one they want. Never make them retype the address to get a result.

Each result row gets a status chip: delivered, opened, clicked, bounced, blocked, or spam, plus queued or deferred when that is the state. Use semantic colors so the list is scannable at a glance, with delivered, opened, and clicked reading as healthy, bounced, blocked, and spam reading as problems, and queued or deferred reading as neutral and in progress. Show the subject, the send time, and the status chip on every row.

Clicking a row opens a detail pane for that message. It shows three things side by side. First, the full event timeline for the message from the Mailjet "Get message history" operation, rendered as an ordered trail of events with timestamps, including the bounce or block reason when there is one, plus the size and spam information for that message. Second, the person's CRM context from HubSpot using "Get Contact" with the email address as the lookup key via the idProperty parameter, showing lifecycle stage, contact owner, and associated company. Third, the recipient's current Mailjet subscription state from "Get a contact's list subscriptions", showing which lists they are on and whether they are unsubscribed or excluded. Put these together so an agent can tell at a glance whether the address was suppressed on our side or simply never opened.

From the detail pane the agent can take two actions. Resend the message using the Mailjet "Send an email (Send API v3.1)" operation, behind a confirmation step so nobody double-sends by accident, and note in the app that a resend happened and who did it. Escalate to the deliverability channel using the Slack "Send a Message" operation, with the message ID, the recipient address, the current status, and a condensed event trail pre-filled in the message body so the agent only has to add a sentence of context. Format the Slack message with mrkdwn, meaning single asterisks for bold and angle-bracket links, not standard Markdown.

Add a "Diagnose this delivery" button in the detail pane that kicks off a background agent for that message. The agent reads the event history from "Get message history", the bounce or block reason attached to those events, and the recipient's list subscriptions from "Get a contact's list subscriptions", then writes a short plain-English diagnosis and a recommended fix. Examples of the tone I want: "This address hard bounced twice, the mailbox does not exist, correct the address on the account and it will keep failing until you do" or "This was delivered and sat unopened for nine days, nothing is wrong with delivery, the customer is likely filtering or ignoring it." Save the diagnosis in the app against the message ID and the recipient address, with a timestamp, and render it at the top of the detail pane. Crucially, the next person who searches that address should see the existing diagnosis without rerunning anything, so store it as shared team data rather than per-user state. Show a clear running state on the button while the agent works, and surface a small indicator on result rows that already have a diagnosis.

Persist diagnoses, resend records, and escalation records inside the app so the console builds up an institutional memory of problem addresses that outlasts what Mailjet's own reporting screens show. Handle the empty case gracefully: if there are no messages for an address in the selected window, say so plainly and suggest widening the date range, rather than showing a blank table.

What does this prompt do?

  • One search box for 'I never got the email' tickets: type a recipient address and get every message you sent that person, newest first, with clear status labels for delivered, opened, clicked, bounced, blocked, and spam.
  • Click any message to open a detail view with the full event timeline, the size and spam details, the person's CRM record from HubSpot including lifecycle stage, owner, and company, and their current subscription state so you can tell instantly whether the address was suppressed or the person simply never opened it.
  • Resend the message or escalate to your deliverability channel in Slack without leaving the screen, with the message reference and event trail already filled in.
  • Hit 'Diagnose this delivery' and a background assistant reads the history, the bounce or block reason, and the subscription state, then writes a plain-English explanation and recommended fix back into the app so the next person who searches that address sees it too.

What do I need to use this?

  • A Mailjet account you can create API credentials in
  • A HubSpot login, used to show the customer's CRM details next to the delivery history
  • A Slack workspace with the channel your team uses for deliverability escalations
  • The sender address your team sends from, for the resend button

How can I customize it?

  • Change the default time window: the view opens on the last 30 days, but you can set it to 7, 60, or 90 days to match how far back your tickets usually go.
  • Pick which Slack channel escalations land in, and what the pre-filled message says.
  • Choose which CRM fields show in the detail view, such as lifecycle stage, owner, company, or your own custom properties.
  • Adjust what the diagnosis focuses on, for example weighting hard bounces and blocks more heavily than unopened messages.

FAQs

Can I search by part of an email address?
Yes. Type a full address for the fastest lookup, or type a fragment like a name or a company domain and the console will show you the matching addresses it found in your selected date range so you can pick the right one.
How far back can I look?
The view opens on the last 30 days because that covers most support tickets, and you can widen the date range whenever you need to go further back. How much history is available depends on your Mailjet plan's retention.
Will clicking resend send a duplicate to the customer?
Resend sends a fresh copy of the message to that recipient, and the console asks you to confirm first so nobody sends twice by accident. The resent message then shows up in the same history like any other send.
Do I need HubSpot for this to work?
No. The delivery history, event timeline, and diagnosis all work on their own. HubSpot simply adds helpful context next to each message, such as who owns the account and what stage they are in, so you know how carefully to handle the ticket.
What does the diagnosis actually tell me?
It reads the event trail, the bounce or block reason, and whether the person is still subscribed, then explains in plain language what went wrong and what to do next, for example that the address hard bounced and should be corrected, or that it was delivered fine and simply never opened.
Does everyone on the team see the same diagnoses?
Yes. Diagnoses are saved in the app against the message, so once one person runs it, the next teammate who searches that address sees the same explanation instead of starting the investigation over.

Related templates

Call overdue Xero customers with an AI collections agent

Every weekday at 10am, an AI voice agent phones your most overdue Xero accounts, logs what each customer promised, and reports back to finance in Slack.

LiveKit
Xero
Deepgram
+2
Agentic Task
Win back LiveChat visitors whose chats went unanswered

Every couple of hours we find the chats your team never answered, email those visitors a real reply, and hand the sensitive ones to a support lead.

LiveChat
Gmail
Slack
Agentic Task
Turn Mailjet email clicks into ranked HubSpot follow-ups

Twice a day we spot the people clicking your pricing and demo pages, create a follow-up task for their owner, and post a ranked recap to Slack.

Mailjet
HubSpot
Slack Bot
Agentic Task
iMessage campaign console with pre-flight checks and delivery board

Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.

LoopMessage
Google Sheets
HubSpot
App
Chat quality review board for LiveChat support leads

Score last week's finished live chats against one rubric, let an AI grader draft the notes with quotes, and send coaching straight to the agent.

LiveChat
Slack
General Input Database
App
A searchable RFP answer library your bid team drafts from

Every proposal you have ever submitted in one searchable archive, with the closest past answers lined up against each question in a new RFP.

General Input Storage
General Input Database
Mistral AI
+2
App

Stop digging through email reports to answer one simple question.

Give your support team one search box that shows exactly what happened to any message you sent, and why.