Skip Navigation

Blog

  • What Cold Outreach Has to Get Right Before Volume

    What Cold Outreach Has to Get Right Before Volume

    Cold outreach is not a volume problem first. It is a permission and reputation problem that happens to use email. If the first message would surprise the recipient, mailbox providers will eventually treat the rest of the sequence the same way. Scale a vague first touch and you will buy complaints, traps, and a domain you cannot use for anything else.

    What belongs in a first touch

    Say who you are, why this person, and what you want in a few sentences. A meeting link with no context is a pitch, not a conversation. Reference a real detail: a role change, a product launch, a constraint you can help with. If you cannot name that detail, you are not ready to send.

    The test is simple. Would you send this from your personal account to a stranger at a conference? If not, do not automate it from a domain you care about.

    Infrastructure still matters

    Authenticate the domain you send from. Do not borrow a shared pool that already has a complaint history. Warm new IPs. Do not dump a scraped list on day one. Keep the From name stable. A new identity every week looks like a compromised account.

    Split this stream from receipts and product mail. Cold volume will take hits. Password resets should not share that fate. Use a subdomain you can isolate, with its own DKIM selector and a DMARC policy you actually monitor.

    Stop when they say no

    A sequence should have an obvious out and a hard cap. Automating a third bump after silence is optional. Automating past an unsubscribe or a clear rejection is how you earn blocks. Cold outreach that lands is specific, short, and easy to refuse.

    Suppression on reply is mandatory. If they said “not now,” that is not an object to a four-week drip. Put the next date in a CRM task, not in a stubborn sequence.

    Lists and lies

    Scraped addresses, purchased files, and “intent data” that is really a guess will look fine in a spreadsheet and terrible on a blocklist. Confirm how each name entered the system. If sales cannot explain it, it does not go to the sending domain.

    Volume comes after the first touch is something a human would defend. Until then, more senders is not a strategy. It is a way to discover your complaint ceiling faster.

    Volume after proof

    Increase daily send only after replies exist, complaints stay tiny, and unknown users stay tiny. If the first 200 named people do not answer, the next 20,000 will not save the thesis. They will only publish it to the blocklists.

  • Email APIs vs SMTP: Which Sending Path to Use

    Email APIs vs SMTP: Which Sending Path to Use

    SMTP is a conversation with a mail server. An email API is an HTTP request that your application makes, after which a provider talks SMTP for you. Both can deliver the same message. They fail in different places. Pick the interface that matches how you ship software, not a shortcut around authentication.

    When SMTP is enough

    A small app, a known recipient list, and a server you already run can send through a local or dedicated MTA. You own retries, bounce handling, and IP reputation. That is power and work. Hosting panels that expose SMTP are this path. So is a company that already has Postfix on a well-run IP and does not need templates or inbound parse.

    SMTP credentials on every app server become a secret-spreading problem. Connection pools get messy in serverless. If those sentences describe you, the API is not a fad. It is an operational fit.

    When an API is the better interface

    You need templates, click tracking, or inbound parse without running extra daemons. Several environments (app servers, workers, serverless) should send without each one holding SMTP credentials. You want webhooks for bounces and complaints instead of parsing DSN mail at 3am.

    APIs also make it easier to split transactional and bulk at the application layer: different keys, different sending identities, different webhook URLs. You can still do that with two smarthosts. Many teams never will.

    What does not change

    APIs do not skip SPF, DKIM, or list hygiene. They wrap the same internet mail path. A JSON payload with a pretty template still lands on an MX. If you buy an API so you can import a purchased list, you bought a more convenient way to get listed.

    You still need warmup on dedicated IPs. You still need a complaint loop. You still need to stop a campaign. The vendor dashboard is not a substitute for knowing your unknown-user rate.

    Failure modes to plan for

    SMTP failures show up as codes and greylisting. API failures show up as HTTP 429s, webhook delays, and a vendor outage that you cannot SSH through. Design for both: idempotent send calls, stored provider message IDs, and a queue that can pause.

    If the API is your only window into bounces, test the webhook path in staging. A signed webhook you never verified is how suppression silently dies for a month.

    A practical choice

    Choose SMTP when you already operate mail well and the app is simple. Choose an API when many services must send, you want vendor-side templates and inbound, or you do not want to run the retry layer. Then apply the same deliverability discipline you would on a raw socket: alignment, hygiene, and the willingness to stop.

  • Mastering Spam Traps: Avoid the Honeypots

    Mastering Spam Traps: Avoid the Honeypots

    A spam trap is not a grouchy subscriber. It is an address monitored by a blocklist operator or a mailbox provider. Mail to that address is evidence you do not have permission, or that you ignore hygiene. Hitting traps is one of the fastest ways to turn a normal sending domain into a listed one.

    Pristine vs recycled traps

    Pristine traps were never used by a human. They exist to catch list appends, scrapes, and purchased files. Recycled traps used to belong to someone and were later converted after a long quiet period. The first type punishes data you never should have had. The second punishes mailing ancient files you never sunset.

    You cannot tell them apart from the SMTP conversation. You only see the aftermath: listings, a sudden junk placement, or a partner who names trap hits in a ticket.

    How senders step on them

    • Buying or appending emails because a vendor promised “verified” data.
    • Scraping contact pages, WHOIS, and GitHub profiles.
    • Never removing hard bounces, so directory-style retries keep going.
    • Reactivating a five-year-old export “just this once” after a tool migration.

    How to stay off them

    Collect addresses yourself, confirm them, and remove persistent failures. Do not send to the full historical database because a new ESP made import easy. Confirm-at-capture beats cleaning-after-the-blast.

    For B2B, a business card is not a license to newsletter someone until they quit the industry. Use a first-touch that is easy to refuse, then require a clear opt-in for recurring mail.

    If you already hit traps

    Stop the campaign. Do not “warm through it”. Identify which list, which form, which vendor, or which year of export those recipients came from. Purge that source. Recheck authentication so you are not compounding a content problem with an alignment problem. Then resume only on recently confirmed, engaged mail, at lower volume.

    If a blocklist listing names you, follow their published removal process after the source is gone. Asking for delisting while the same file is still in production is how you stay listed.

    Vendors who “verify”

    A verification API can tell you an MX exists and a mailbox might accept mail. It cannot tell you the person asked to hear from you. It cannot tell you the address is not a recycled trap. Use verification to drop syntax junk and obvious dead domains. Do not use it as a moral license to buy a file.

    If a vendor will not explain how they got the names, you already know. Walk away. The cost of a listing is higher than the cost of building the list yourself.

  • The Metrics That Matter Most When Analyzing Deliverability

    The Metrics That Matter Most When Analyzing Deliverability

    Deliverability reports are full of numbers that look important and do not change what you should do on Monday. The useful set is small: acceptance, bounces, complaints, unknown users, and whether the people who got the mail actually did something. Inbox placement is a result, not a dashboard widget.

    Acceptance vs inbox

    Accepted by the MX is not the same as landing in the primary inbox. Seed tests and panel data estimate placement. Your SMTP logs only prove the receiving server took the message. Use both. If acceptance is high and seeds sit in spam, the problem is reputation or content, not routing.

    The rates that get you blocked

    Keep hard bounces and unknown users well under 2%, ideally far lower on a mature list. Stay comfortably under 0.1% spam complaints of delivered mail. A few tenths of a percent is an emergency. Treat spikes in Gmail Postmaster spam-folder behavior as product problems, not a template tweak.

    These numbers are not vanity. They are how providers decide whether you still get to talk to their users.

    Engagement is the long game

    Mailbox providers watch whether recipients open, click, reply, move to inbox, or delete unread. A list that never engages will eventually be filtered even if authentication is perfect. Segment by recency. Stop mailing people who have ignored you for months.

    Infrastructure signals

    Track deferrals (4xx), blocklists, SPF/DKIM/DMARC pass rates, and TLS. A sudden 421 from Microsoft with a clean list often means you ramped volume or changed IPs too fast. Pair metrics with a timeline of what you changed: IP, domain, template, or audience.

    A metric without a change log is trivia. A change log without metrics is folklore. You need both on the same page when something breaks.

    A weekly ritual

    Fifteen minutes: Postmaster spam rate, unknown-user rate, complaints, top 4xx by provider, and whether DMARC still passes. If any of those moved, look at campaigns shipped that week before you look at copy opinions.

    Vanity metrics to ignore

    Total sent, list size, and open rate without a complaint twin are how teams congratulate themselves while Gmail quietly files them away. If a metric cannot change whether you send tomorrow, it does not belong on the Monday dashboard.

  • How to Keep Campaigns Out of Gmail’s Promotions Tab

    How to Keep Campaigns Out of Gmail’s Promotions Tab

    There is no official primary-inbox switch. Gmail’s classifiers look at bulk headers, similar copies to many people, image-to-text ratio, unsubscribe language, and how users historically treat mail from your domain. Bulk design and promotional language push you into Promotions. That tab is not a penalty box in the old spam sense, but it is where mail goes to be ignored.

    What pushes you into Promotions

    • Single large hero images and sparse text.
    • Discount language, countdown urgency, and multiple tracking links.
    • List-Unsubscribe plus campaign-style HTML sent to thousands at once.
    • A From name that is a brand, not a person, especially on mixed-use domains.

    If your mail looks like every other retailer, Gmail will file it with every other retailer. That can still be the right place for a sale announcement. It is the wrong place for a password reset or a one-to-one sales thread.

    What actually helps

    Send mail people reply to. Conversational text, a real signature, and a domain they already trust for one-to-one mail all help. Do not pretend a newsletter is a personal note if the body is still a three-column promo. Users train Gmail when they drag you to Promotions. They also train it when they reply or move you to Primary.

    Preview text that repeats the subject, giant buttons, and tracking wrappers on every link are campaign tells. A short message that could have been sent from a person is not a guarantee of Primary. It is the only honest attempt.

    Split transactional and marketing

    Receipts, password resets, and shipping mail should come from a dedicated subdomain with a different template. Mixing abandoned-cart blasts onto the same domain as password resets teaches Gmail that everything from you is marketing. Keep authentication aligned on each subdomain.

    This split is the highest-leverage move in the article. Copy tricks will not save a domain that sends both a 40% off banner and a two-factor code.

    What not to waste time on

    Header folklore (“add this X-Priority and you will skip Promotions”) does not survive contact with the classifier. Neither does stuffing the word “invoice” into a promo. Gmail has seen that joke.

    Measure: placement seed tests, Gmail Postmaster spam rate, and whether people who used to reply still reply. If Promotions is where your newsletter lives and revenue is fine, you may not have a crisis. You have a tab. Optimize the mail for people who open there, or earn Primary by sending less, better mail.

  • List Hygiene: Removing Risk Before It Becomes a Block

    List Hygiene: Removing Risk Before It Becomes a Block

    Every send is a vote on your reputation. Mailing addresses that never existed, never opted in, or have not engaged in a year is how good domains end up on blocklists. Most deliverability crises start as a dirty list, not as a clever template.

    Remove these first

    • Hard bounces and known invalid syntax. Do it before the next campaign, not in a quarterly cleanup.
    • Role accounts (info@, sales@) unless you have a documented B2B reason and permission.
    • Complaints and legal suppression, immediately. A preference center that takes a day to sync is a complaint factory.
    • Unengaged subscribers past your cutoff, often 90 to 180 days depending on how often you mail.

    Unknown-user rate is the hygiene metric mailbox providers notice fastest. Keep it tiny. If a campaign spikes it, the source of those names is the incident, not the subject line.

    Confirm before you blast

    Double opt-in is still the cheapest insurance for consumer lists. For imported B2B lists, require a paper trail: who captured the address, when, and for what. Purchased lists are not a gray area. They are how you inherit spam traps.

    If sales hands you an export from a conference scanner, that is not consent to a weekly newsletter. Put those names in a one-time, clearly identified follow-up, then require a real opt-in for ongoing mail.

    Sunset instead of sudden silence

    A short win-back sequence with an obvious preference center is fair. If they still do not engage, stop. Continuing to mail them to “keep the list large” is how complaint rates climb while revenue per send falls. A smaller list that replies is cheaper to send and easier to place.

    Hygiene is a pipeline, not a project

    Validate at capture. Recheck on import. Suppress on bounce events in near real time. Review role accounts and traps after any list append. If your ESP makes it easy to upload a CSV and send tonight, add a hold that a human has to clear for lists older than 30 days.

    When a blocklist listing names trap hits, freeze campaigns, audit the source of those recipients, and only resume on recently confirmed mail. Hygiene after a listing is slower and more public than hygiene before one.

    Role accounts and traps in B2B

    B2B senders love role addresses because they look like coverage. They also concentrate risk: one sales@ alias can be a trap, a ticket queue that marks you as spam, or five people who never wanted the mail. If you must mail them, use a one-to-one thread and a named person as soon as you have one.

    Watch for clusters: many unknowns at one domain after a scrape, or a vendor file that bounces at 8%. That is not a Monday problem. That is a source problem.

    What “clean” looks like in numbers

    On a mature, opted-in list, unknown users should be a fraction of a percent. Complaints should stay comfortably under 0.1% of delivered mail. If you cannot see those rates per campaign, you are flying on vanity metrics. Hygiene without measurement is a slogan.

  • A Practical Approach to Warming Up Dedicated IPs

    A Practical Approach to Warming Up Dedicated IPs

    A dedicated IP is only an advantage if mailbox providers already trust it. A brand-new address has no reputation. Treat the first two to four weeks as a controlled introduction, not a launch party. Send too much volume too quickly and ISPs will throttle or block you.

    Why warmup exists

    Gmail, Microsoft, and Yahoo watch volume, complaint rate, unknown-user rate, and whether engaged humans open the mail. A cold IP that suddenly sends tens of thousands of messages looks like a compromised host. Warmup is how you prove you are a real sender before you ask for inbox placement at scale.

    A conservative schedule

    Days 1 to 3: a few hundred messages per day to your most engaged subscribers only. Days 4 to 7: double volume only if bounce rate stays under 2% and complaints stay well under 0.1%. Week 2: add slightly older but still opted-in names. Do not dump the full list. Weeks 3 to 4: step toward production volume. Pause and investigate if complaints or blocks appear.

    These numbers are a starting point, not a dare. If Microsoft 421s you on day 4, you do not “push through”. You cut volume and look at the list.

    Who should receive warmup mail

    Send to people who recently opened or clicked. Skip role accounts, purchased lists, and addresses that have not engaged in months. Those cohorts create spam-trap and complaint risk exactly when the IP is most fragile.

    Authentication and infrastructure

    SPF, DKIM, and DMARC should already pass before the first warmup message. Align the From domain with DKIM. Keep a consistent HELO name. If you also send from a shared pool, do not mix the new dedicated IP into the same campaign until warmup is done.

    When to stop or slow down

    If you see 421/450 deferrals, junk-folder placement on seed tests, or a spike in 550 user-unknown, cut volume in half for 48 hours and clean the list. Warmup is not a substitute for list hygiene. It only works if the mail itself is wanted.

    Write the plan down before day 1, including who can halt sending. Warmup fails in the gaps between marketing’s calendar and ops’ pager.

    Shared pools vs dedicated

    If you are small and clean, a reputable shared pool can outperform a cold dedicated IP for months. Dedicated is for when your volume and risk need isolation, not because a sales deck said “dedicated” is more professional. Warming a dedicated IP to send the same neglected list you already had on shared is a lateral move.

  • A Complete Beginner’s Guide to A/B Testing Subject Lines

    A Complete Beginner’s Guide to A/B Testing Subject Lines

    A subject line test is only useful if you can explain what won and why you will reuse it. Testing a witty line against a completely different offer, preview text, and From name at the same time teaches you nothing. Isolate one element and wait for a real sample.

    Test one thing

    Hold the body, From name, send time, and audience constant. Change only the subject, or only the preview text. Common splits: curiosity vs clarity, question vs statement, specific number vs vague benefit, and branded vs personal From names on a separate test.

    If product wants to change the offer in the same send, that is a different experiment. Do not call it a subject test.

    Sample size and timing

    Do not call a winner after 40 opens. For most lists you need enough unique clicks or replies that a few random events cannot flip the result. Send both variants into the same window so a news cycle does not favor one side. Leave a holdout if you also care about unsubscribes, not just opens.

    Stop peeking every ten minutes. Early noise looks like a story. It is not.

    Opens are a noisy metric

    Apple Mail Privacy Protection and image-blocking inflate or hide opens. Pair the test with clicks and replies when the mail asks for a click. If the goal is a reply, measure replies. Optimizing only for opens trains you to write clickbait that tanks trust.

    What to do with a winner

    Roll the winner to the remainder of the send, log the hypothesis, and retire the loser. Do not keep running the same curiosity-gap trick until the list learns to ignore you. Rotate patterns the way you rotate offers.

    Write the result down in one sentence: “Clarity beat mystery on invoice reminders, n=…” Next quarter’s intern should be able to reuse it without rerunning folklore.

    From name is a different test

    People argue about subject lines when the From name is the thing they actually scan. Test From name on its own week. Do not bundle it with a new subject pattern. A personal From on a blast can lift opens and also lift complaints if the body is clearly a campaign.

  • Why Plain Text Emails Often Perform Better Than HTML

    Why Plain Text Emails Often Perform Better Than HTML

    HTML templates are fine for newsletters with a real layout. They are a liability when you are asking for a reply, a meeting, or a support resolution. Many of those messages win as multipart mail whose visible body is mostly plain text. A clean text email can outperform a heavy HTML blast because it looks like a person wrote it and it survives more clients intact.

    What plain text actually means

    Send a text/plain part. You can still attach a simple HTML alternative. The point is that the readable message does not depend on tables, web fonts, or a 200-kilobyte hero image. Links should be real URLs a human can copy.

    If the HTML part is a pixel-perfect newsletter and the text part says “view this in a browser,” you did not send multipart. You sent a shrug.

    Why engagement often improves

    • It resembles one-to-one mail, so it is less likely to be pre-judged as a campaign.
    • It degrades gracefully in locked-down corporate clients.
    • It avoids broken images and tracking pixels that some filters score negatively.
    • It forces clearer writing because you cannot hide behind a button.

    When HTML still wins

    Product launches, visual lookbooks, and receipt designs with tables of line items still belong in HTML. Even then, keep a sensible plain-text alternative. Accessibility and some backup clients will use it.

    A practical hybrid

    Write the text version first. If the HTML cannot be generated from that copy without adding fluff, the design is doing too much. For transactional mail, prefer simple HTML plus a complete text part over a pixel-perfect template that fails when CSS is stripped.

    Check the message in a client that blocks images and a client that strips CSS. If the point of the mail disappears, the design was the product. That is rarely what you wanted for a reset link or a sales follow-up.

    Tracking without wrecking the text

    If you must measure clicks, wrap as few links as possible and keep the visible URL honest. A text mail full of tracking hosts looks like phishing. For replies, you may not need click tracking at all. Count the thread.

  • Scaling SMTP Without Burning Your Reputation

    Scaling SMTP Without Burning Your Reputation

    Raising the concurrent connection limit on your MTA does not scale email. Mailbox providers apply per-IP and per-domain rate limits. If you outrun them you collect deferrals, then blocks. Throughput is a queueing problem, a reputation problem, and a list problem at the same time.

    What actually constrains throughput

    Your server can open hundreds of sockets. Gmail and Microsoft will not take hundreds of messages per second from a new or noisy IP. They look at the domain, the IP history, the complaint rate, and whether the recipients look like a real audience. A queue that drains faster than they will accept simply retries the same burst until you look like an attack.

    Watch the 4xx class closely. A 421 or 450 with a try-again message is a brake pedal. Treating it like packet loss and retrying immediately is how you turn a slowdown into a 550 policy block.

    Separate the queues

    Transactional mail should not wait behind a newsletter. Use different queues, and often different IPs or subdomains, so a slow campaign cannot delay password resets. Retry 4xx with exponential backoff and jitter. Cap retries. Do not hammer a 421 with the same burst every second.

    If one product team can dump a promotional send into the same daemon that handles receipts, they will, usually on a Friday. Make the split boring and obvious: different smarthosts, different credentials, different From domains.

    Add IPs the slow way

    New IPs need warmup. Spreading volume across ten cold addresses is worse than one warm IP. Each new address has to earn its own acceptance curve. Microsoft and Gmail will not ramp on the same schedule. If you add IPs because the current one is already listed, you are multiplying the problem instead of cleaning the list.

    Keep a written map of which IP sends which stream. When a block appears, you need to know whether it is the newsletter pool or the password-reset pool before you start moving traffic around.

    Application-level brakes

    The MTA should not be the only place you can stop mail. Cap welcome sequences for new signups. Throttle or pause when bounce webhooks spike. Kill a campaign if complaint feedback loops fire above your threshold. Put those controls in the app that owns the audience, not only in Postfix knobs.

    Dashboards that only show “messages sent” hide the failure. You want accepted, deferred, bounced, complained, and a timeline of deploys. Scaling SMTP is an operations problem: on-call, a stop button, and the willingness to use it.

    A working order of operations

    • Authenticate every sending domain and keep DMARC at enforcement on streams you care about.
    • Split transactional and bulk before you add hardware.
    • Warm each new IP against engaged recipients only.
    • Raise volume in steps you can roll back in an hour.
    • When deferrals cluster on one provider, slow that provider, not the whole world.

    If you remember one thing: providers reward predictability. Sudden volume, mixed content on one identity, and retries without backoff are the three fastest ways to spend a dedicated IP.

    Provider-specific ramps

    Gmail cares about user engagement and spam-folder behavior in Postmaster Tools. Microsoft is often stricter on sudden volume from a cold IP and will 421 you with little warning. Yahoo still watches complaint rates closely. If you treat “the internet” as one pipe, you will overfill the pickiest hop and think the whole MTA is broken.

    Keep per-domain concurrency caps. When Gmail defers, slow Gmail. Leave transactional Microsoft mail alone if that stream is healthy. A global panic button is useful. A global panic as the first reaction is how you create a second incident.

    What to log

    Store the enhanced status code, the provider, the sending IP, the campaign or message class, and whether the recipient was engaged in the last 30 days. Without that join you cannot tell a list problem from an IP problem. The weekly review is: where did acceptance drop, what changed, and did we stop in time.