Look up any customer's email delivery history in one place

Your support team types a customer's email address and instantly sees every message you sent them, why it failed, and how to fix it.

App
MailgunHubSpotZendeskCustomer SupportOperationsEmail Automation
PromptCreate

Build me an internal support console my customer support team opens every time a customer says they never received an email from us, so nobody on the team has to log into Mailgun and read raw logs. A rep opens it on demand and works a single case at a time. There is no schedule and no trigger.

The main screen is a single search box where a rep types a recipient email address. On submit, fetch that address's full sending history from Mailgun using List Events filtered by recipient, plus Query Logs, and render it as a per-message timeline. Group the raw events by message id and show one row per message with the subject, the sending domain, the timestamp and the current status, expandable into the ordered event trail of accepted, delivered, opened, failed and bounced, including the delivery status text or SMTP response on any failure event. Sort newest first. Mailgun's searchable log retention is capped by plan, roughly one to five days on entry tiers, fifteen on mid tiers and thirty on higher ones, so when a search returns nothing say that explicitly: an empty result means no messages inside the retained window, not proof that nothing was ever sent.

Above the timeline, show a status banner about the address itself. Check its suppression state with Get Bounce, List Complaints and List Unsubscribes (the single-address variants Get Complaint and Get Unsubscribe are fine if you want a faster exact lookup), and use List Domains to enumerate the account's sending domains so the banner covers every domain rather than only one. The banner should state plainly whether the address is currently suppressed, which kind of suppression it is (hard bounce, spam complaint or unsubscribe), which sending domain it applies to, when it happened and the reason recorded alongside it. If the address is clean, say so just as plainly.

Beside the timeline, a context panel that identifies the person so the rep gets one screen instead of three browser tabs. Use HubSpot Search Contacts on the email address to pull the contact's name, company, lifecycle stage and owner. Use Zendesk Search Tickets to list their recent tickets with subject, status and last update, newest first, each linking out to Zendesk. Let the rep select one of those tickets as the linked ticket for the session, since the diagnosis agent posts its reply back to it. If either lookup returns nothing, show a quiet empty state rather than an error, because plenty of recipients are not in the CRM.

Give the timeline rows actions. Resend a failed message with Mailgun Send Message, prefilling the sending domain, from address, recipient and subject from the event record so the rep can review and edit the body before it goes. Lift a suppression with Delete Bounce, Delete Complaint or Delete Unsubscribe, scoped to the domain the suppression actually sits on. Re-check the address with Validate Single Address and show the verdict inline, including the risk assessment and any suggested correction for a typo'd domain.

Resending and lifting a suppression are the only destructive things in this app, so put a confirmation step on both. The confirmation should spell out exactly what is about to happen, naming the address, the domain and the specific message, and require an explicit click to proceed. Record every action in a persisted action log inside the app: what was done, to which address and domain, when, and which rep did it, taken from the signed-in app user. Show that log in a panel beneath the timeline and stamp the rep's name onto the affected row, so the team can always see who lifted a block or resent a message. Nothing else in the app writes anything anywhere.

Add a Diagnose this delivery button on the results screen that kicks off a background agent. The agent reads the assembled event history for that address, pulls the detailed bounce classification with List Bounce Classification Bounce Logs for the sending domain, and checks the sending domain's signing health with List DKIM Keys for a Domain. It then writes two things back into the app. First, a plain-English root cause aimed at the support rep, for example that the recipient's mail server rejected the message as a hard bounce because the mailbox does not exist, or that messages are being accepted but the sending domain's DKIM key is not active so spam filtering is the likely culprit. Second, a customer-ready reply the rep could send as is, written in a calm non-technical support voice that never blames the customer and says clearly what happens next. Store both against the searched address so the results panel renders them the moment the agent finishes, and show a visible running state while it works.

Under the drafted reply, put a one-click button that posts it onto the linked Zendesk ticket as a public comment using Zendesk Update Ticket. Let the rep edit the draft text before posting. If no ticket was linked in the context panel, keep the button visible but disabled with a short explanation of what is missing, rather than hiding it.

Keep the whole thing a fast, dense, single-screen tool: search at the top, status banner under it, the message timeline as the main column, the customer context panel on the right, the action log below. Reps use this under time pressure with a customer waiting, so focus the search box on load, make each row readable without expanding it, and color-code status consistently throughout, with delivered and opened positive, failed and bounced negative, and suppressed as a warning state.

What does this prompt do?

  • Search any recipient address and get their full sending history as a clear per-message timeline: accepted, delivered, opened, failed and bounced.
  • A banner up top says right away whether that address is currently blocked from receiving your mail, what kind of block it is, and which sending address it was mailed from.
  • Beside it, the customer's CRM record and their recent support tickets, so a rep gets one screen instead of three browser tabs.
  • Row actions let a rep resend a failed message, lift a block, or re-check whether the address is even valid, each behind a confirmation and stamped with the rep's name.
  • A Diagnose this delivery button hands the case to a background assistant that works out the root cause and drafts a customer-ready reply you can post onto the support ticket in one click.

What do I need to use this?

  • A Mailgun account with access to your sending logs and blocked-address lists
  • A HubSpot login, if you want the customer's CRM details on screen
  • A Zendesk login, if you want their recent tickets on screen and want to post replies back onto a ticket
  • Worth knowing: your Mailgun plan decides how far back searchable logs go, from a few days on entry plans up to about a month on higher ones

How can I customize it?

  • Limit which of your sending addresses reps are allowed to search and resend from
  • Decide how much friction sits on the two risky actions, from a simple confirmation to a required note explaining why the block was lifted
  • Change the tone and sign-off of the drafted customer reply to match your support voice
  • Turn off the CRM or ticket panel if your team does not use HubSpot or Zendesk

FAQs

How far back can we look up a customer's emails?
That depends on your Mailgun plan, since searchable log history is capped by tier: roughly one to five days on entry plans, around fifteen days on mid tiers, and about thirty days on higher ones. The app is explicit about this. If a search comes back empty, it tells the rep that no messages were found inside the retained window rather than claiming nothing was ever sent.
Can a rep accidentally email the wrong person or unblock someone they shouldn't?
Resending a message and lifting a block are the only two actions in the app that change anything, and both sit behind a confirmation step that spells out the exact address and message involved. Every action is recorded with the name of the rep who took it, so the team can always see who did what.
Do we need both HubSpot and Zendesk to use this?
No. Mailgun does the real work here. The CRM panel and the ticket panel are context, and the app shows a quiet empty state when a recipient is not in either system. If you only use one of them, or neither, the delivery timeline and the blocked-address banner still work on their own.
Will it actually tell us why an email bounced?
Yes. The Diagnose this delivery button starts a background assistant that reads the event history, the detailed bounce reason, and the health of the sending domain's signing setup, then writes a plain-English root cause for the rep plus a reply written for the customer. It runs in the background, so the rep can keep working while it thinks.
Can support reply to the customer without leaving the app?
The drafted reply appears right in the app and the rep can edit it before anything goes out. One click posts it onto the linked Zendesk ticket as a public reply. If no ticket has been linked, the button stays visible but disabled and explains what is missing.

Related templates

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
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
See which target accounts just started advertising on LinkedIn

Open one board each Monday to see which of your target accounts are running LinkedIn ads right now, and which only switched them on this week.

LinkedIn Ad Library
HubSpot
General Input Database
App
Pause marketing emails to escalated customers, then restore them

Twice a day we take anyone with a live high-priority support ticket off your campaign list, and put them back once support has fixed it.

MailForge
Zendesk
Slack Bot
Agentic Task
Account health board that puts product usage next to your CRM

Your customer success team opens one board where every account's logins, seats and usage trend sit beside its owner, plan and renewal date.

Looker
HubSpot
Slack Bot
App

Stop digging through raw email logs.

Give your support team one screen that answers "did they actually get my email?" in seconds, with the fix one click away.