Connect the inbox you already use. Load a list, write one email, and Mailmize drips personal copies out on a schedule you set. Replies land where they always did — in your inbox, from your name, on your domain.
Sends straight from your own mailbox — no mail passes through anyone else, and no tracking pixel is added to anything you send.
Write it once with a few blanks. Each person gets their own copy — their name,
their business, their town — and messy lists are cleaned up on the way in:
OWNER becomes your fallback greeting, MCDONALD becomes McDonald.
Preview exactly what the next person receives before a single message moves.
Chain second and third touches with your own delays and send times. The moment somebody replies, they drop out — nobody gets “just bumping this” after they've already answered.
Most outreach tools are built for a sales team with a budget and somebody whose job is to run them. This one is built around a simpler idea: the mailbox you already use is the most valuable thing you own here, and the tool's job is to protect it rather than spend it.
Most platforms relay your mail through their own servers and their own IP addresses, so your delivery is only as good as the worst sender on that platform today. Here the message is handed to your Outlook or Gmail account and sent by them. Your domain, your reputation, your result.
No second inbox to check and no dashboard to log into to discover somebody answered you two days ago. The reply lands in the mailbox it was sent from, as an ordinary email, in the same thread.
Open tracking means a hidden image in every message. It is one of the most common reasons a cold email gets filtered, and recipients who spot it do not like it. Nothing here adds one — you give up an open rate you could never fully trust, and get a message that looks like a person wrote it.
When somebody asks out they are gone — from that campaign, from every other campaign, and from every list you import from then on. It is enforced at import and again at the moment of sending, so it cannot be undone by uploading the same spreadsheet next month.
A campaign will not start until there is a real physical address on the account, because CAN‑SPAM requires one in every commercial message, and the opt-out line goes into the footer by default. Tools that leave both to you are how people end up in trouble without knowing they did anything wrong.
You set the gap between sends and the daily ceiling per mailbox, and both are enforced rather than suggested. Nothing goes out in a burst unless you deliberately ask for one — because a mailbox restricted for sending too fast stops sending everything, not just the campaign.
No seat minimum, no onboarding call, no CRM to migrate into first. Connect a mailbox, load a list, write one email. If a feature needs a tutorial before it can be used, it was built wrong.
Contacts are never pooled, sold, shared between accounts, or used to send anything on anybody else's behalf. There is no analytics on this site and no third-party script on any page — and that is written down in the privacy policy rather than merely implied.
Email and a password. Your mailboxes, campaigns and history live inside it and nobody else's account can see them.
Outlook through Microsoft sign-in, or Gmail with an app password. There's a step-by-step guide inside for both.
Drop in a list or type a few names. Preview it, set the pacing, start sending.
Cold email has rules and consequences, and this tool doesn't hide them from you. Every message carries your physical address and an opt-out line, because CAN-SPAM requires both. Daily limits are enforced per mailbox, and the app tells you when you're pushing past what providers tolerate — the penalty for ignoring that isn't a bounced message, it's your mailbox getting restricted from sending anything at all.
Run every purchased list through a verifier before you import it. Stale lists bounce at 10–20%, and providers read that as a scraped list. It's the highest-value thing you can do, and it happens before this app ever sees the addresses.
Your mailbox, your list, your words — sent on your schedule, to every name, without the burst that gets accounts restricted.
Runs every campaign marked Running, across every connected mailbox.
Skips the sending window and the gaps between sends. Daily limits still apply - those are the ones protecting the mailbox.
The last 30 days.
Last 100 messages across all campaigns.
| Time | To | From | Subject | Result |
|---|---|---|---|---|
| Nothing yet. | ||||
Everything this account has done, newest first. Kept across sign-ins.
| When | What | Detail |
|---|---|---|
| Nothing yet. | ||
Every email Mailmize has sent from this account, as a spreadsheet. Leave the dates blank for all of it.
Every email Mailmize has actually sent from this account, with the exact text that went out — merge fields already filled in, the way the person received it. Click one to read it.
Nothing sent yet.
Every campaign this account has run, including finished ones.
| Campaign | Status | Sent | Replied | Failed | Started | Finished |
|---|---|---|---|---|---|---|
| No campaigns yet. | ||||||
Pick the one that matches the address you want to send from. Every click is spelled out. If a step doesn't match what you're seeing, stop there and say so — a wrong guess three steps back is what causes the confusing errors later.
You do this once per company, not per mailbox. Once it's done, every Outlook mailbox at your company connects in three clicks forever after.
Mailmize/oauth/callback
/oauth/callback on the end
matters. One character off and sign-in fails later with a vague error.You land on the Overview page. Two of the three are right there.
AADSTS50194.Mailmize → Add.abC8Q~xYz.9Kv_... — random, with
~ and . in it. Secret ID is a GUID, all dashes in
an 8-4-4-4-12 pattern. If it looks like a GUID, it's the wrong one.
email,
offline_access, openid, profile.Mail.Send — this is the one that
actually matters — and then User.Read.Mail.Read here. It's the permission
that lets Mailmize see replies arriving in a Microsoft mailbox, and it's tempting.
But unless you administer your own Microsoft 365, your company almost certainly won't
let you approve an app that reads mail — the sign-in stops dead on “Need
admin approval” and the mailbox then can't connect at all, so it can't send
either. Get the mailbox sending first. If you later want reply detection on it, an
administrator adds Mail.Read and clicks Grant admin consent, and you
tick Let Mailmize read replies in Settings.Stages 1 to 4 are done once, ever. This is the bit you repeat for each address you want to send from.
AADSTS50020 — not because anything is broken, but because that
account is not in your directory.AADSTS50194 — tenant ID missing or not saved.AADSTS50020 — that account isn't in your Microsoft organisation. See
above.AADSTS7000215 — you pasted the Secret ID instead of the secret Value.redirect_uri mismatch — the URI in Entra doesn't match exactly, or the
Public address field isn't empty.{{first_name}}, {{company}}, {{city}}.People you're working, separate from any campaign list. Set a follow-up date and Mailmize emails you a reminder from your own mailbox when it comes due.
No contacts yet.
Short answers you send over and over. They show up as buttons when you reply, and you can still change the wording before it goes.
People who wrote back. Every connected mailbox is checked automatically every five minutes — app-password mailboxes over IMAP, Microsoft sign-in mailboxes over Microsoft Graph — and anyone who replies is dropped from their sequence straight away.
Check everything I've sent goes back a year and looks at every address you have ever emailed, including finished campaigns. The automatic five-minute check only watches people in a campaign that is still running, so this is the one that catches a reply that arrived after a campaign wrapped up. Give it up to a minute per connected mailbox.
Make up whatever labels suit you — Interested, Called, Bad number, anything. Tick never email again and anyone you give that label is added to your opt-out list automatically.
Nothing yet.
Anything you want an email about later. Mailmize sends it to you from your own connected mailbox at the day and time you pick.
No reminders yet.
Raised from the Support tab. Replying emails the answer to the person and marks the request answered.
Nothing waiting.
Everyone with an account on this install. You're the administrator because yours was the first account created.
Leave this off and anyone who finds the site can make an account. Turn it on before you put this on a public domain.
Makes the account yourself and hands them the password — no sign-up form, no waiting for approval. Use Free for the people you're letting in for nothing; you can move anyone between plans later without touching their data.
With a password: you pick it and pass it on yourself — it's shown here once and never again. With an invite: they get an email and choose their own, and you never handle it. The invite link lasts seven days.
Everything — accounts, campaigns, contacts, opt-out lists — lives in one file. A copy is taken automatically once a day and the last 14 are kept. Use the button to grab one now and put it somewhere other than this computer.
Failed sends and inbox problems across every account, newest first. Clear empties this list once you've dealt with them — the emails stay in everyone's sent history.
| When | Account | Mailbox | What | Detail |
|---|---|---|---|---|
| Nothing yet. | ||||
Where the Pay again button sends someone whose payment failed — your Stripe or PayPal link. Leave it blank and they're pointed to the Support tab instead.
Optional. Set this up and Stripe tells Mailmize the moment someone pays — the account flips to Pro on its own, a failed payment drops them to the free rate, and a cancellation puts them back on Free. You get an email either way. Leave it blank and you switch people over by hand in Admin, which works fine.
/api/stripe/hook
Without this secret Mailmize refuses every message that claims to be from Stripe — it is the only thing separating a real payment from somebody who found the address and fancies a free upgrade.
Point an uptime monitor at /api/health — it reports a failure if the sending engine stops, not just if the site goes down.
| Account | Plan | Joined | Last seen | Mailboxes | Campaigns | Sent | Status | |
|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||
Three ways to do it. Pick whichever matches the job — they all use the same mailboxes, the same opt-out list and the same log.
One to 10 emails without building a campaign. Same engine, same log, same opt-out list — just none of the setup.
Emails send from this account, and replies land in it. Pick where your email lives.
Describe what happened and it goes straight to the person who runs this site. You'll get the answer back here and by email, so you don't have to sit and wait on the page.
Your email address, plan, and which mailboxes are connected are sent along with this so nobody has to ask. Don't paste passwords or app passwords — nobody here will ever need one.
Everything you've sent, newest first, with any answer underneath.
Nothing sent yet.
Three things account for most of what comes through here.
.xlsx saved straight from Excel is the usual cause
— it has to be saved as CSV UTF-8 first.What you get now, and what changes if you go Pro.
Pay through the link above. Once the payment clears your account switches to Pro — usually within a few minutes. Nothing you've already set up changes: your campaigns, contacts and history all stay exactly as they are.
If you ever stop paying, nothing is deleted. You keep every mailbox on screen, pick one to keep sending from, and the rest sit locked until you're back on Pro.
Appended to every email. The address is a legal requirement.
Your privacy policy, terms, cookie policy and refund policy are written from these details and rewrite themselves the moment you save. Check every line below. A policy naming the wrong business or an address nobody reads is worse than no policy, because it is a written statement that happens to be false.
The moment a reply is spotted, Mailmize emails you from the same mailbox it arrived in, so it lands in the inbox you already watch.
The subject reads YOU RECEIVED A RESPONSE FROM (their name), and the body has who it was, the subject line, and which mailbox it came into. Alerts arrive within about five minutes of the reply, because that is how often the inbox is checked. Bounces and out-of-office autoreplies are filed but never alerted on.
When someone writes back, send them an instant holding reply so they know it landed. Off unless you switch it on.
Your signature is added underneath. Three rules are built in and can't be switched off, because they're what stops an auto-responder wrecking a mailbox: one per person, ever (not one per email), never to a robot (bounces and out-of-office replies are ignored, so two auto-responders can't sit there emailing each other), and never to anyone on your opt-out list.
Added to the bottom of every email, above the address and opt-out line. Links and images are allowed.
From your app registration in the Microsoft Entra admin center. Without these, "Sign in with Microsoft" can't work.
/oauth/callback
Off by default — Mailmize sends whenever it has something queued. Switch this on and it only sends during the hours and days you pick. A business email arriving at 3am reads as a machine, which is the impression you're trying to avoid.
All times here are local time.
Put your own addresses here and they get added to every campaign you start, mixed in with everyone else. You receive the same emails your list does, so you can see whether they're landing in the inbox or the spam folder. A Gmail and an Outlook address tell you the most.
Puts a one-click Unsubscribe link at the bottom of every campaign email. Anyone who clicks it lands on a confirmation page, and the moment they confirm, their address drops into the opt-out list below — nothing queued for them goes out, and no future campaign picks them up.
Skipped permanently, across every campaign and every future import. People who click the unsubscribe link land here on their own; you can also add addresses by hand, one per line.
| Address | Why | When | |
|---|---|---|---|
| Nobody yet. | |||
Nothing has been deleted. Your campaigns, contacts and mailboxes are exactly where you left them — but until this is sorted, sending runs at the free rate of 15 emails a day from one mailbox.
What they wrote
The oldest record is kept. Anything blank on it is filled in from the others, and every note is kept — nothing is thrown away except the duplicate rows. This can't be undone.
Loading…
You set a follow-up date for this contact.