<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: William Weiner</title>
    <description>The latest articles on DEV Community by William Weiner (@wadco).</description>
    <link>https://dev.to/wadco</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3858244%2Fda60f13a-4dd2-48af-9e2c-dbc2887679a4.png</url>
      <title>DEV Community: William Weiner</title>
      <link>https://dev.to/wadco</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wadco"/>
    <language>en</language>
    <item>
      <title>UID2: The Standard That Quietly Replaced the Tracking Cookie</title>
      <dc:creator>William Weiner</dc:creator>
      <pubDate>Thu, 25 Jun 2026 04:10:53 +0000</pubDate>
      <link>https://dev.to/wadco/uid2-the-standard-that-quietly-replaced-the-tracking-cookie-2e12</link>
      <guid>https://dev.to/wadco/uid2-the-standard-that-quietly-replaced-the-tracking-cookie-2e12</guid>
      <description>&lt;p&gt;While the industry celebrated the “death of the third-party cookie,” advertising platforms built a more persistent and standardized identity system based on your email address.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unified ID 2.0 (UID2)&lt;/strong&gt; is now powering a significant portion of open-web advertising. Created by The Trade Desk and open-sourced, it standardizes how companies turn email addresses into stable identifiers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1hmb183x7y72eh95gv0f.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1hmb183x7y72eh95gv0f.jpeg" alt="UID2 - the new tracking cookie" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How UID2 Works
&lt;/h2&gt;

&lt;p&gt;UID2 has two layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Raw UID2&lt;/strong&gt;: A static SHA-256 hash (Base64) of your normalized email address. Deterministic and permanent — same email = same hash everywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UID2 Token&lt;/strong&gt;: An encrypted, rotating token used in the bidstream. This is what gets the “privacy-friendly” headlines.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rotating token protects the bidstream, but the raw UID2 hash lives in backend databases across publishers, advertisers, and data platforms. That hash is the real backbone of the identity graph.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Gmail Plus-Sign Trick Doesn’t Work Here
&lt;/h2&gt;

&lt;p&gt;UID2’s normalization rules explicitly strip everything after the &lt;code&gt;+&lt;/code&gt; sign for Gmail addresses (and remove dots). So &lt;code&gt;user+shopping@gmail.com&lt;/code&gt; and &lt;code&gt;user@gmail.com&lt;/code&gt; produce the &lt;strong&gt;exact same UID2 hash&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A common privacy workaround is rendered useless inside the UID2 ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Phishing Risk Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Because the algorithm is fully public (no secrets, just SHA-256 + normalization), anyone can generate UID2 hashes from a list of email addresses.&lt;/p&gt;

&lt;p&gt;An attacker with breached UID2 databases can now map which services you actually use and craft highly targeted phishing emails that impersonate those exact services. Hashing doesn’t anonymize — it creates a reproducible lookup key.&lt;/p&gt;

&lt;p&gt;EUID (the European variant) improves consent flows under GDPR but doesn’t fix the underlying structural vulnerability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Alias Solution
&lt;/h2&gt;

&lt;p&gt;The most effective defense is simple: &lt;strong&gt;never give sites your real email address&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Use unique aliases per service. Each alias produces a completely different UID2 hash with no mathematical link to your real identity or other aliases. This breaks the identity graph at the source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://emparrot.com" rel="noopener noreferrer"&gt;EMail Parrot&lt;/a&gt;&lt;/strong&gt; goes further by also stripping tracking pixels, unwrapping tracking links, and cleaning metadata at the relay layer before delivery.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Read the full article here:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://emparrot.com/blog/2026/06/24/uid2-the-standard.html" rel="noopener noreferrer"&gt;UID2: The Standard That Replaced the Cookie&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What are your thoughts on UID2? Is it a necessary evolution for a cookieless web, or does it introduce new privacy and security risks?&lt;/p&gt;

&lt;p&gt;I’d love to hear from developers, privacy engineers, and ad-tech folks.&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>email</category>
      <category>adtech</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Who Is Email Security Actually Built For?</title>
      <dc:creator>William Weiner</dc:creator>
      <pubDate>Sat, 20 Jun 2026 16:06:25 +0000</pubDate>
      <link>https://dev.to/wadco/who-is-email-security-actually-built-for-957</link>
      <guid>https://dev.to/wadco/who-is-email-security-actually-built-for-957</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm01iysbcawl1pw7wmucv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm01iysbcawl1pw7wmucv.jpg" alt="Two tier email protections" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Email has one of the most mature security stacks in tech: &lt;strong&gt;SPF, DKIM, DMARC, BIMI&lt;/strong&gt;, advanced spam filtering, and decades of infrastructure. Yet when you ask a simple question of each layer — &lt;em&gt;who is this actually protecting?&lt;/em&gt; — a clear pattern emerges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication Protects Brands, Not Recipients
&lt;/h2&gt;

&lt;p&gt;SPF verifies authorized sending servers.&lt;br&gt;&lt;br&gt;
DKIM cryptographically signs the message.&lt;br&gt;&lt;br&gt;
DMARC ties it all to the visible &lt;code&gt;From:&lt;/code&gt; address and lets domain owners set policies.&lt;/p&gt;

&lt;p&gt;These are excellent &lt;strong&gt;anti-spoofing&lt;/strong&gt; and &lt;strong&gt;anti-counterfeiting&lt;/strong&gt; tools. They protect the &lt;strong&gt;sender’s identity&lt;/strong&gt; and brand reputation.&lt;/p&gt;

&lt;p&gt;What they don’t do is ask: &lt;em&gt;What is this authenticated message doing to the person receiving it?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A perfectly authenticated email (all green checks) can still contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tracking pixels&lt;/li&gt;
&lt;li&gt;Per-recipient rewritten links&lt;/li&gt;
&lt;li&gt;Hidden identifiers&lt;/li&gt;
&lt;li&gt;Fingerprinting techniques&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The stack happily vouches for the &lt;em&gt;authenticity of the surveillance&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  DMARC’s Enforcement Bar Was Set Low on Purpose
&lt;/h2&gt;

&lt;p&gt;When major providers finally pushed DMARC requirements in 2024, they mostly required the weakest mode: &lt;code&gt;p=none&lt;/code&gt; (monitor only). &lt;/p&gt;

&lt;p&gt;Meanwhile, the most common real-world spoofing attack — forging the &lt;strong&gt;display name&lt;/strong&gt; while hiding the actual address — remains largely unaddressed. And the newest addition, &lt;strong&gt;BIMI&lt;/strong&gt;, is essentially a paid brand-marketing feature that shows logos in inboxes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The One Layer That Protects Recipients Is a Black Box
&lt;/h2&gt;

&lt;p&gt;Spam filtering is the clear exception — it genuinely tries to protect recipients. But it’s also the only major layer that is &lt;strong&gt;proprietary&lt;/strong&gt;, opaque, and controlled by the same gatekeepers who run the dominant email services.&lt;/p&gt;

&lt;p&gt;This creates an interesting dynamic: open standards protect senders; recipient protection is a competitive moat.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Envelope Is the Real Product
&lt;/h2&gt;

&lt;p&gt;Below all the content-level protections lies the &lt;strong&gt;metadata&lt;/strong&gt; — who emailed whom, when, how often, reply chains, message identifiers — which remains completely exposed. Even end-to-end encrypted email doesn’t protect the envelope.&lt;/p&gt;

&lt;p&gt;This metadata has become extremely valuable in today’s data economy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Real Recipient-Side Email Security Would Look Like
&lt;/h2&gt;

&lt;p&gt;If we designed email security &lt;strong&gt;for the person opening the message&lt;/strong&gt;, it would be radically different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strip tracking pixels and rewrite links &lt;strong&gt;at the relay layer&lt;/strong&gt; (before delivery)&lt;/li&gt;
&lt;li&gt;Anonymize or replace per-recipient identifiers&lt;/li&gt;
&lt;li&gt;Protect the recipient’s address as the core asset&lt;/li&gt;
&lt;li&gt;Prevent reply-chain mapping across groups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is exactly the direction we’re building at &lt;strong&gt;&lt;a href="https://emparrot.com" rel="noopener noreferrer"&gt;EMail Parrot&lt;/a&gt;&lt;/strong&gt; — privacy-first group email that puts the recipient first.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Read the full article here:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://emparrot.com/blog/2026/06/15/who-is-email-security-for.html" rel="noopener noreferrer"&gt;Who Is Email Security For?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What do you think? Has the email security stack quietly evolved into a sophisticated brand protection + marketing infrastructure while leaving recipients exposed?&lt;/p&gt;

&lt;p&gt;I’d love to hear perspectives from email deliverability engineers, privacy advocates, and security professionals.&lt;/p&gt;

</description>
      <category>email</category>
      <category>security</category>
      <category>emailsecurity</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>The Cookie That Never Expires</title>
      <dc:creator>William Weiner</dc:creator>
      <pubDate>Sat, 13 Jun 2026 20:26:00 +0000</pubDate>
      <link>https://dev.to/wadco/the-cookie-that-never-expires-4677</link>
      <guid>https://dev.to/wadco/the-cookie-that-never-expires-4677</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1yf28r9nlmflpdvgxzar.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1yf28r9nlmflpdvgxzar.jpg" alt="The Cookie That Never Expires" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You probably remember when the tracking cookie died. Browsers blocked them,&lt;br&gt;
regulators demanded banners for them, and the advertising industry spent years&lt;br&gt;
announcing its move to a "post-cookie world." It felt like a win for privacy.&lt;/p&gt;

&lt;p&gt;It wasn't a win. It was a substitution. The identifier that replaced the cookie&lt;br&gt;
is your email address.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why your email address is a better cookie than the cookie ever was
&lt;/h2&gt;

&lt;p&gt;A cookie lived in one browser on one device, and you could clear it whenever&lt;br&gt;
you wanted. Your email address follows you everywhere. You type it into every&lt;br&gt;
store, newsletter, app, loyalty program, and login screen. It is the same on&lt;br&gt;
your phone, your laptop, and your work computer. It survives for decades.&lt;/p&gt;

&lt;p&gt;The advertising industry noticed. The standard practice today is to take the&lt;br&gt;
email address you provide, run it through a hashing function, and use the&lt;br&gt;
result as a tracking identifier. The industry calls this a "hashed email" and&lt;br&gt;
describes it as privacy-safe because the hash can't be reversed back into your&lt;br&gt;
address. What that description leaves out: it doesn't need to be reversed.&lt;br&gt;
Every company that hashes your address gets the same code. The code IS you.&lt;/p&gt;

&lt;p&gt;This is not a fringe practice. It is the documented foundation of the&lt;br&gt;
post-cookie ad industry. Identity resolution vendors openly sell&lt;br&gt;
&lt;a href="https://atdata.com/data-services/identity-graphs/" rel="noopener noreferrer"&gt;email-centric identity graphs&lt;/a&gt;&lt;br&gt;
built on exactly this matching. Marketing platforms publish guides on&lt;br&gt;
&lt;a href="https://www.experian.com/blogs/marketing-forward/uncovering-hashed-email/" rel="noopener noreferrer"&gt;unlocking the hashed email "goldmine"&lt;/a&gt;&lt;br&gt;
sitting in customer databases. Analytics tools document how&lt;br&gt;
&lt;a href="https://docs.segmentstream.com/project-configuration/identity-graph/cross-device-tracking-via-email-hash" rel="noopener noreferrer"&gt;clicking a newsletter link that carries your email hash&lt;/a&gt;&lt;br&gt;
stitches your devices together into one profile. None of this is hidden. It is&lt;br&gt;
the product.&lt;/p&gt;

&lt;p&gt;So here is the trade you actually made when the cookie died: an identifier you&lt;br&gt;
could clear in two clicks was replaced by one you've used for fifteen years&lt;br&gt;
and gave to everyone.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the graph knows
&lt;/h2&gt;

&lt;p&gt;Once your email address is the key, everything keyed to it can be joined. The&lt;br&gt;
shoes you browsed on your laptop connect to the news you read on your phone.&lt;br&gt;
The purchase you made in a store, where the cashier asked for your email "for&lt;br&gt;
the receipt," joins the profile too. Data breaches add their contents to the&lt;br&gt;
pile -- and your address has almost certainly been in several.&lt;/p&gt;

&lt;p&gt;It gets one step stranger. Marketing emails carry per-recipient trackers --&lt;br&gt;
invisible images and rewritten links that identify you specifically. When you&lt;br&gt;
forward one of those emails to a friend and they open it, their device&lt;br&gt;
announces itself against your tracking identifier.&lt;br&gt;
&lt;a href="https://knowledge.hubspot.com/connected-email/understand-hubspot-sales-email-open-and-click-tracking" rel="noopener noreferrer"&gt;Email platforms acknowledge&lt;/a&gt;&lt;br&gt;
that forwarded opens register against the original recipient. The email you&lt;br&gt;
shared becomes a signal that the two of you are connected and what you both&lt;br&gt;
found interesting. Academic researchers studying email tracking found that&lt;br&gt;
a substantial share of commercial emails leak the recipient's address -- often&lt;br&gt;
in hashed form -- to third parties the sender never mentioned.&lt;/p&gt;

&lt;p&gt;Is your email address personal information? Both GDPR and CCPA say yes,&lt;br&gt;
plainly. But the legal classification understates the situation. Your email&lt;br&gt;
address is not just a piece of personal data. It is the join key -- the one&lt;br&gt;
identifier that links all the others together.&lt;/p&gt;




&lt;h2&gt;
  
  
  You can't clear it -- but you can stop using it
&lt;/h2&gt;

&lt;p&gt;You can't reset your email address the way you cleared cookies. Changing it&lt;br&gt;
means losing access to everything attached to it, which is exactly why it&lt;br&gt;
makes such a durable identifier.&lt;/p&gt;

&lt;p&gt;What you can do is stop handing the join key to everyone who asks.&lt;/p&gt;

&lt;p&gt;If the email address is the cookie, then an alias is the cookie blocker. Give&lt;br&gt;
every company a different address that routes to your real inbox, and the&lt;br&gt;
hashes stop matching. The store, the newsletter, and the loyalty program each&lt;br&gt;
hold a different code, and the graph can't join them. You stay reachable --&lt;br&gt;
real mail still arrives, replies still work -- but the one thread tying your&lt;br&gt;
profiles together is gone.&lt;/p&gt;

&lt;p&gt;That is half the answer. The other half is the trackers inside the email&lt;br&gt;
itself, because an alias does nothing about the invisible image that reports&lt;br&gt;
when you read a message. Those have to be removed before the email reaches&lt;br&gt;
you -- which means stripping the tracking machinery and rebuilding a clean&lt;br&gt;
copy for delivery. An email that has been through that process can even be&lt;br&gt;
forwarded to a friend without reporting on them when they open it.&lt;/p&gt;

&lt;p&gt;The cookie didn't die. It moved into your email address. Treat that address&lt;br&gt;
accordingly -- like the permanent identifier it has become, not like a piece&lt;br&gt;
of contact information.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://emparrot.com/blog/2026/06/11/cookie-that-never-expires.html" rel="noopener noreferrer"&gt;emparrot.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>email</category>
      <category>privacy</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What a Mailman service shutdown reveals about the state of mailing lists in 2026</title>
      <dc:creator>William Weiner</dc:creator>
      <pubDate>Wed, 10 Jun 2026 23:32:20 +0000</pubDate>
      <link>https://dev.to/wadco/what-a-mailman-service-shutdown-reveals-about-the-state-of-mailing-lists-in-2026-5g5i</link>
      <guid>https://dev.to/wadco/what-a-mailman-service-shutdown-reveals-about-the-state-of-mailing-lists-in-2026-5g5i</guid>
      <description>&lt;p&gt;DreamHost is shutting down their hosted Mailman service on July 31. If you run a&lt;br&gt;
list there, you already know. If you don't, it's worth understanding why -- because&lt;br&gt;
the reasons behind the decision say something about where mailing list infrastructure&lt;br&gt;
stands today.&lt;/p&gt;

&lt;p&gt;I'll be upfront: I built EMail Parrot, a privacy-first mailing list relay, and this&lt;br&gt;
situation is relevant to us commercially. I'm going to try to write something useful&lt;br&gt;
regardless of that.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why DreamHost's exit makes technical sense
&lt;/h2&gt;

&lt;p&gt;Mailman is roughly 25 years old. That longevity is a credit to the project, but it&lt;br&gt;
also means the software was designed for a threat environment that no longer exists.&lt;/p&gt;

&lt;p&gt;The original Mailman model assumes email is mostly plain text and that threats are&lt;br&gt;
simple and human-detectable. In 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML email is the norm, and with it comes an entire passive tracking surface --
pixels, CSS-based trackers, fingerprinting links -- that Mailman passes through
without inspection&lt;/li&gt;
&lt;li&gt;Member email addresses are visible in headers and exposed to senders, creating a
persistent privacy risk that list admins have no control over&lt;/li&gt;
&lt;li&gt;There is no systematic inspection of URLs, attachments, or message content beyond
whatever external spam hooks an admin has configured&lt;/li&gt;
&lt;li&gt;Monthly subscription reminders go out in plain text including passwords -- a detail
that looks almost quaint now but is a real credential exposure vector&lt;/li&gt;
&lt;li&gt;When a member's account is compromised, the attacker inherits their list membership,
subscription details, and a window into other members' activity. The blast radius
of a single member compromise can extend across the entire list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI-generated threats add another layer. Mailman has no framework for detecting&lt;br&gt;
AI-generated phishing at volume, and prompt injection -- malicious instructions&lt;br&gt;
embedded in email content to manipulate AI agents processing a recipient's inbox --&lt;br&gt;
is an emerging threat class that list software built before LLMs existed was simply&lt;br&gt;
never designed to consider.&lt;/p&gt;

&lt;p&gt;Running that stack on modern cloud infrastructure requires maintaining a deployment&lt;br&gt;
model that was never intended for it. The operational cost to benefit ratio for a&lt;br&gt;
hosting company is poor and getting worse.&lt;/p&gt;




&lt;h2&gt;
  
  
  The digest question
&lt;/h2&gt;

&lt;p&gt;The most common concern from people looking at alternatives is digest delivery. It&lt;br&gt;
is worth examining whether that concern is pointing at the right thing.&lt;/p&gt;

&lt;p&gt;Digest was a solution to two problems: mail server storage costs and inbox overload.&lt;br&gt;
In 2026, mailbox storage is essentially free. Every major email client supports folder&lt;br&gt;
filter rules -- route list mail into a dedicated folder, check it when convenient,&lt;br&gt;
reply normally with threading intact. The underlying problems digest solved are already&lt;br&gt;
solved by better means. Most people reaching for digest are actually reaching for inbox&lt;br&gt;
control, and they have better tools for that than a 25-year-old batching mechanism that&lt;br&gt;
introduces reply-address complications.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the alternatives actually are
&lt;/h2&gt;

&lt;p&gt;If you are helping someone migrate off DreamHost Mailman, the honest framing is this:&lt;br&gt;
most mailing list alternatives follow the same basic architecture Mailman established.&lt;br&gt;
Member addresses visible, messages passed through unexamined, digest as inbox&lt;br&gt;
management. Google Groups, Groups.io, and most others are a hosting change, not a&lt;br&gt;
model change.&lt;/p&gt;

&lt;p&gt;Hosted Mailman (&lt;a href="https://mailman3.com" rel="noopener noreferrer"&gt;mailman3.com&lt;/a&gt;,&lt;br&gt;
&lt;a href="https://mailmanhost.com" rel="noopener noreferrer"&gt;mailmanhost.com&lt;/a&gt;) is the right answer for people who need&lt;br&gt;
minimum disruption and can accept the existing model's tradeoffs.&lt;/p&gt;

&lt;p&gt;EMail Parrot is a different architecture: the relay is an active participant rather&lt;br&gt;
than a passive pipe. Every message is rebuilt from scratch after stripping tracking&lt;br&gt;
content, member addresses are replaced with pseudonyms, and content is scanned before&lt;br&gt;
delivery. It is not a drop-in Mailman replacement -- it requires pseudonyms at import&lt;br&gt;
and does not host archives -- but it was designed for the current threat environment&lt;br&gt;
rather than the one that existed when Mailman was written.&lt;/p&gt;

&lt;p&gt;Migration guide for Mailman users: &lt;a href="https://emparrot.com/mailman-migration.html" rel="noopener noreferrer"&gt;emparrot.com/mailman-migration.html&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The business lesson
&lt;/h2&gt;

&lt;p&gt;One more thing worth noting since it comes up in any discussion of sunsetting&lt;br&gt;
software: DreamHost's execution here has been poor. Short notice, no migration&lt;br&gt;
support, thin communication. The customer frustration has spread from the Mailman&lt;br&gt;
conversation into broader discussions about DreamHost as a company.&lt;/p&gt;

&lt;p&gt;How you exit a service matters as much as whether you exit it. That is probably&lt;br&gt;
obvious but the evidence keeps suggesting it needs to be said.&lt;/p&gt;

</description>
      <category>email</category>
      <category>security</category>
      <category>privacy</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Email Privacy Shield: Zero Direct Mail and No Cross-Site Correlation via Email Aliases</title>
      <dc:creator>William Weiner</dc:creator>
      <pubDate>Sun, 26 Apr 2026 19:25:38 +0000</pubDate>
      <link>https://dev.to/wadco/email-privacy-shield-zero-direct-mail-and-no-cross-site-correlation-via-email-aliases-5c5a</link>
      <guid>https://dev.to/wadco/email-privacy-shield-zero-direct-mail-and-no-cross-site-correlation-via-email-aliases-5c5a</guid>
      <description>&lt;p&gt;Every alias service hides your address. Almost none of them fix what happens after you reply. Give out your real address once, and it becomes a permanent identifier that data brokers, marketers, and attackers can correlate across services, sites, and breaches. Reply chains and headers often leak context. Tracking pixels and sophisticated passive techniques confirm opens and clicks even before you interact.&lt;/p&gt;

&lt;p&gt;Developers face this acutely: every SaaS signup, API provider, cloud account, or open-source contribution risks linking identities. &lt;br&gt;
One leaked address can map your entire digital footprint.&lt;/p&gt;

&lt;p&gt;A robust countermeasure is the Personal Privacy Shield - a compartmentalized setup using Email Parrot that ensures your real inbox receives no direct mail from the outside world. Every external contact (service, person, or business) gets its own unique email alias address. All inbound traffic routes through a relay that applies deep privacy protections before delivery.&lt;/p&gt;

&lt;p&gt;I work on EMail Parrot and run variations of this pattern personally. It mirrors the "unique password per site" principle but applied at the email layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a Relay with Virtual Private Email (VPE) Matters
&lt;/h2&gt;

&lt;p&gt;Simple email forwarding or alias services often fall short. &lt;br&gt;
They may hide the real address but lack comprehensive relay-layer processing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Header scrubbing and propagation attacks: Email headers and reply chains can embed identifiers that allow network graphing and cross-message correlation. A proper VPE relay replaces sender identifiers with one-way hashes under its namespace, preserving threading while blocking reversal or mapping.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tracker removal beyond pixels: Client-side tools (browser extensions or email client blockers) act after delivery and miss reply-chain elements or evolving techniques. Relay processing sees the full message and can strip both active trackers (e.g., HTML and CSS-based external references, presentation attributes that trigger fetches on render) and passive ones (e.g., tokenized query parameters in links, click redirects).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Blast radius reduction: If one alias leaks or gets spammed (via breach or sale), it affects only that compartment. Quarantine or delete it instantly without touching other contacts or your core address.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Virtual Private Email (VPE) turns an open list into a privacy envelope. &lt;br&gt;
Outbound messages to externals use a special addressing pattern so recipients see only the alias, never the real address. Replies route back automatically through the correct alias, with all messages filtered for spam, viruses, and trackers.&lt;/p&gt;

&lt;p&gt;This setup is not just forwarding - it is a structural firewall that client tools cannot replicate due to limited visibility into full message context and outbound paths.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-Step Setup (~15-20 Minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Configure Email Parrot&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Go to emparrot.com/admin and create a new list with a neutral name (e.g., relay or mp). The list address becomes something like &lt;a href="mailto:relay@emparrot.com"&gt;relay@emparrot.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Add yourself as the sole member using a neutral pseudonym (e.g., me).&lt;/p&gt;

&lt;p&gt;In Group Settings, enable Open Email List with VPE (Virtual Private Email). This enables private outbound initiation and reply routing.&lt;/p&gt;

&lt;p&gt;Create a dedicated sublist (unique alias) for each external party or category. Examples:&lt;/p&gt;

&lt;p&gt;&lt;a href="mailto:github.relay@emparrot.com"&gt;github.relay@emparrot.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="mailto:aws.relay@emparrot.com"&gt;aws.relay@emparrot.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="mailto:stripe.relay@emparrot.com"&gt;stripe.relay@emparrot.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="mailto:doctor.relay@emparrot.com"&gt;doctor.relay@emparrot.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="mailto:temp1.relay@emparrot.com"&gt;temp1.relay@emparrot.com&lt;/a&gt; (for throwaway signups)&lt;/p&gt;

&lt;p&gt;Each sublist contains only you. Use short, opaque names to avoid leaking context.&lt;/p&gt;

&lt;p&gt;Enable all protection layers in Group Settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advanced protection&lt;/li&gt;
&lt;li&gt;Strip external content&lt;/li&gt;
&lt;li&gt;AI safe protection&lt;/li&gt;
&lt;li&gt;Instant deletion&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Lock Down the Real Inbox&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Configure your email client to block non-relayed mail. &lt;br&gt;
For Gmail:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filter condition: -from:emparrot.com&lt;/li&gt;
&lt;li&gt;Action: Skip Inbox, apply label "Direct - Review"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Legitimate traffic from Email Parrot arrives normally. Everything else (scams, leaks, direct sends) goes to a review folder. For extra defense-in-depth, point the relay to a never-used-before address at a privacy-focused provider like Proton Mail or Tuta.&lt;/p&gt;

&lt;p&gt;Optional: Add per-alias filters to route mail into dedicated labels/folders for better organization.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Outbound Communication and Replies&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For new contacts: Use the VPE format via the address conversion tool  at emparrot.com/ext-email.html.&lt;/p&gt;

&lt;p&gt;For replying to email: The reply-to field of EMail Parrot emails will always have the address configured to route back through the service at the alias the email came through.&lt;/p&gt;

&lt;p&gt;Save the converted address in your contacts. The external party sees only the alias. Replies return routed through the same identity, fully protected.&lt;/p&gt;

&lt;p&gt;Never share your real address.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Advantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No cross-service correlation: GitHub, cloud providers, payment processors, and forums each interact with isolated aliases.&lt;/li&gt;
&lt;li&gt;Leak detection: Spam on one alias reveals exactly which party leaked/sold it.&lt;/li&gt;
&lt;li&gt;Address book safety: Commands like &lt;a href="mailto:addressbook.relay@emparrot.com"&gt;addressbook.relay@emparrot.com&lt;/a&gt; return only pseudonyms and sublists - harmless in this solo setup.&lt;/li&gt;
&lt;li&gt;Custom domain option (available via upgrade): Makes aliases appear more native (e.g., under your own domain) and slightly harder for automated identification as relays.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Find Out More
&lt;/h2&gt;

&lt;p&gt;The complete checklist and additional notes are in the official guide: &lt;/p&gt;

&lt;p&gt;Setup: Personal Privacy Shield (&lt;a href="https://emparrot.com/setup-max-privacy.html" rel="noopener noreferrer"&gt;https://emparrot.com/setup-max-privacy.html&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;If you are running your own alias/relay experiments or privacy stack in 2026, what techniques have you found most effective against modern tracking vectors? Share in the comments - curious to hear other devs' approaches.&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>email</category>
    </item>
    <item>
      <title>Tracking, Propagation Attacks, and What We Found in Real Email Traffic</title>
      <dc:creator>William Weiner</dc:creator>
      <pubDate>Thu, 09 Apr 2026 20:07:24 +0000</pubDate>
      <link>https://dev.to/wadco/tracking-propagation-attacks-and-what-we-found-in-real-traffic-4pc2</link>
      <guid>https://dev.to/wadco/tracking-propagation-attacks-and-what-we-found-in-real-traffic-4pc2</guid>
      <description>&lt;p&gt;A few weeks ago I posted about finding the same per-recipient identifier in three independent places inside a single marketing email -- pixel, click redirects, and technical headers -- and asked what other vectors people had seen.&lt;/p&gt;

&lt;p&gt;Surveying surfaced some good ones: CSS media queries, hidden data attributes, MIME boundary patterns. I went looking. Here is what I found in real production traffic, and what turned out to be harder to close than expected.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. CSS Tracking Is Broader Than I Thought
&lt;/h2&gt;

&lt;p&gt;The original post focused on &lt;code&gt;&amp;lt;img src=&amp;gt;&lt;/code&gt; pixels and click-redirect wrappers. CSS-based tracking is a separate attack surface that image-blocking tools don't touch, and it is more varied than the obvious &lt;code&gt;background-image&lt;/code&gt; case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The obvious case (external stylesheet link):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt;
  &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://tracker.esp.com/open/PERRECIPIENTTOKEN.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the email client loads this stylesheet, the sender's server logs the open. The member never sees this. Apple Mail Privacy Protection pre-fetches images but not stylesheets, so this survives MPP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The less obvious cases:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* @import in a &amp;lt;style&amp;gt; block */&lt;/span&gt;
&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="sx"&gt;url('https://tracker.esp.com/t/PERRECIPIENTTOKEN.css')&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c"&gt;/* Any property that accepts a URL, not just background-image */&lt;/span&gt;
&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;list-style-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url('https://tracker.esp.com/PERRECIPIENTTOKEN')&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;border-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url('https://tracker.esp.com/PERRECIPIENTTOKEN')&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The one I did not expect -- CSS custom property indirection:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--emp-track&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url('https://tracker.esp.com/PERRECIPIENTTOKEN')&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.hero&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--emp-track&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tracking URL is stored in a custom property and referenced indirectly. A filter that looks for &lt;code&gt;url(&lt;/code&gt; in property values like &lt;code&gt;background-image&lt;/code&gt; will not find it here. The custom property declaration looks innocuous; only following the reference chain reveals the external URL.&lt;/p&gt;

&lt;p&gt;I have not yet seen this in a real email, but it is a documented evasion technique in 2025-2026 security research and straightforward to generate from a template.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beyond CSS: HTML presentation attributes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These are not CSS at all, which is why they were a separate discovery. HTML has legacy presentation attributes that also trigger automatic network fetches:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- table background attribute -- HTML4 era, still renders in many clients --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;table&lt;/span&gt; &lt;span class="na"&gt;background=&lt;/span&gt;&lt;span class="s"&gt;"https://tracker.esp.com/PERRECIPIENTTOKEN"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- video poster -- loads even if the user never plays the video --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;poster=&lt;/span&gt;&lt;span class="s"&gt;"https://tracker.esp.com/PERRECIPIENTTOKEN"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- object/applet legacy attributes --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;object&lt;/span&gt; &lt;span class="na"&gt;data=&lt;/span&gt;&lt;span class="s"&gt;"https://tracker.esp.com/PERRECIPIENTTOKEN"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;background=&lt;/code&gt; table attribute is the one I actually found in production email. It is visually identical to a background set via CSS, but the attribute lives outside any style block and is missed by a CSS-only filter pass.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Reply Chain Attack: Propagation Tracking
&lt;/h2&gt;

&lt;p&gt;This one came up as I was working through the threat model and it is arguably more valuable to trackers than open tracking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The setup:&lt;/strong&gt; When a sender issues an email, their ESP assigns a Message-ID that typically contains per-send and per-recipient tokens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight email"&gt;&lt;code&gt;&lt;span class="nt"&gt;Message-ID&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; &amp;lt;campaign.abc123.recipient.def456@esp.example.com&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a member replies to that email, their client includes the original Message-ID in the References header:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight email"&gt;&lt;code&gt;&lt;span class="nt"&gt;References&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; &amp;lt;campaign.abc123.recipient.def456@esp.example.com&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;In-Reply-To&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; &amp;lt;campaign.abc123.recipient.def456@esp.example.com&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the sender has instrumented their receiving infrastructure to parse incoming References headers, they can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Recognize their own campaign token (&lt;code&gt;campaign.abc123&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Recover the per-recipient token (&lt;code&gt;recipient.def456&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Link the reply back to the original send record&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This maps who replied to whom. For a relay service like the one I run, the risk is amplified: if a member receives a tracked email through the relay and then replies, the relay's outbound message carries the original sender's Message-ID in the References chain. The original sender now knows the reply chain came through a relay and what user emails it came through.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix&lt;/strong&gt; is to hash all sender-issued Message-IDs in the outbound References and In-Reply-To headers before delivery. The hash is irreversible (sender cannot recover the token), consistent (same input always produces the same output, so member-side threading still works), and emitted under your own namespace so it cannot be confused with any other IDs. This rewrite is valid to do since this code is for an email relay, not an email forwarding service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight email"&gt;&lt;code&gt;&lt;span class="nt"&gt;# Original References in outbound reply -- before fix
References&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; &amp;lt;campaign.abc123.recipient.def456@esp.example.com&amp;gt;&lt;/span&gt;

# After hashing
References: &amp;lt;emp-a3f9b2c1d4e5f678@emparrot.com&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our delivery IDs pass through unchanged -- members thread on these and they contain no sender-controlled token.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Direct-Destination URL Tokens (No Redirect Needed)
&lt;/h2&gt;

&lt;p&gt;The original post covered click-redirect wrappers: links rewritten through a tracking server before reaching the real destination. There is a simpler variant that bypasses the redirect entirely.&lt;/p&gt;

&lt;p&gt;Real example from a Nextdoor email (April 2026), every link included:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://nextdoor.com/news_feed/?ct=ABCDEF123&amp;amp;ec=GHIJ456&amp;amp;token=UNIQUE789&amp;amp;auto_token=XYZ012&amp;amp;link_source_user_id=345678
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The destination is real (nextdoor.com). There is no redirect. But the per-recipient token is in the query string and fires on click. Class A redirect unwrapping does not catch this because there is nothing to unwrap -- the destination IS the URL.&lt;/p&gt;

&lt;p&gt;The naive fix is a known-bad-parameter blocklist (&lt;code&gt;utm_*&lt;/code&gt;, &lt;code&gt;fbclid&lt;/code&gt;, etc.), but that loses the arms race: senders rename parameters or use unfamiliar ones. Nextdoor's &lt;code&gt;ct=&lt;/code&gt;, &lt;code&gt;ec=&lt;/code&gt;, &lt;code&gt;auto_token=&lt;/code&gt;, and &lt;code&gt;link_source_user_id=&lt;/code&gt; would not appear on most blocklists.&lt;/p&gt;

&lt;p&gt;The approach that works without needing to be right about every parameter: strip all query parameters from all links, and back up the original URLs in an attachment when non-&lt;code&gt;utm_*&lt;/code&gt; parameters were present. The stripped link is the primary path. The backup attachment is a recovery mechanism for action links (unsubscribe, confirm) where tokens may be functionally required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Link in email body after stripping
https://nextdoor.com/news_feed/

# emparrot-original-links.txt attachment
[View your feed] https://nextdoor.com/news_feed/?ct=ABCDEF123&amp;amp;ec=GHIJ456&amp;amp;...
[Unsubscribe]    https://nextdoor.com/email/unsubscribe/?token=UNIQUE789&amp;amp;...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;utm_*&lt;/code&gt; parameters are stripped silently with no backup -- the destination always works without them.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Meta Tag Token Embedding
&lt;/h2&gt;

&lt;p&gt;Several other examples exploited data attributes. Meta tags turned out to be a closely related case worth separating out.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"x-em-id"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"PERRECIPIENTTOKEN"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"campaign"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"CAMPAIGN123/PERRECIPIENTTOKEN"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"list-id"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"LIST456/MEMBER789"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These do not trigger a network fetch. They are completely invisible to image-blocking tools and to users. But they survive into quoted reply content -- if a member replies and includes the original email body, the quoted section carries these meta tags forward.&lt;/p&gt;

&lt;p&gt;The threat model is the same as the References header case: the sender's receiving infrastructure can recognize their own tokens in the reply and reconstruct network information without ever seeing an address.&lt;/p&gt;

&lt;p&gt;The fix is a whitelist. The set of meta tags that have any legitimate function in email is small and stable: charset, viewport, http-equiv for content-type, format-detection, color-scheme, theme-color, description, author, generator, robots. Strip everything else.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. What Turned Out to Be Hard
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CSS media query conditional loading&lt;/strong&gt; -- The vector is real:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dark&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url('https://tracker.esp.com/dark/PERRECIPIENTTOKEN')&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;light&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url('https://tracker.esp.com/light/PERRECIPIENTTOKEN')&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This leaks dark/light mode preference in addition to confirming the open. I have not seen this in a real email yet, but it is described in 2026 privacy research as an emerging pattern. The fix is the same (strip external URLs from all CSS properties) but the threat is worth naming: it is not just "did they open" but "what device profile are they using."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Body structural fingerprinting&lt;/strong&gt; is the vector I cannot close without semantic understanding of the content. Unique per-recipient signals embedded in the body itself: specific inline color values, attribute ordering, whitespace patterns, synonym substitution. These survive into reply quotes and surface unexposed users when those replies propagate. Partially mitigated by hashing CSS class names (destroys class-based fingerprints in quoted content), but full removal is out of scope.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Class B opaque link IDs&lt;/strong&gt; (c.gle, click.mailchimp.com, and similar) cannot be resolved without fetching the tracking URL, which would itself be tracked. The right behavior is to flag these with a warning before the member clicks rather than attempting to unwrap them. Fetching to resolve is not an option.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Shipped
&lt;/h2&gt;

&lt;p&gt;For full disclosure: I built these fixes into the relay service EMail Parrot. The analysis above drove the release this month. The implementation handles all of sections 1-4. Body structural fingerprinting and Class B unwrapping remain open.&lt;/p&gt;

&lt;p&gt;A writeup of the release is at the EMail Parrot blog if that is useful context: &lt;a href="https://emparrot.com/blog/2026/04/08/pixels-were-just-the-beginning.html" rel="noopener noreferrer"&gt;Pixels Were Just the Beginning&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  New Questions for the Community
&lt;/h2&gt;

&lt;p&gt;The original post asked about CSS media queries, hidden data attributes, and MIME boundary patterns. The first two turned out to be real and addressed above. MIME boundary patterns remain on the list.&lt;/p&gt;

&lt;p&gt;A few things I am still thinking about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MIME boundary reuse&lt;/strong&gt;: Is there evidence of ESPs using predictable MIME boundaries that encode per-recipient data? I have not seen it in real traffic but it seems plausible. Our relay rebuilds the email from scratch and replaces all MIME boundaries so this threat is architecturally not present for EMail Parrot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quoted-printable encoding patterns&lt;/strong&gt;: Can per-recipient tokens be embedded through deliberate encoding choices (encoding specific characters to &lt;code&gt;=XX&lt;/code&gt; form or not) that survive relay and appear in quoted content?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cid: Content-ID attributes&lt;/strong&gt;: MIME attachment Content-IDs are sender-chosen. I am treating this as low risk but would be interested in evidence either way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;plain-text URL tracking&lt;/strong&gt;: Class A redirect URLs appearing in plain-text body parts rather than HTML hrefs. Lower priority since plain text is less common in tracked email, but not zero.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Has anyone seen these in the wild? And are there vectors I have missed entirely?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Cross-posted from the EMail Parrot engineering blog. I am the sole developer of the service and this work grew directly out of the threat analysis in the original post.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Beyond Pixels: How Modern Emails Embed the Same Identifier Everywhere</title>
      <dc:creator>William Weiner</dc:creator>
      <pubDate>Thu, 02 Apr 2026 19:58:01 +0000</pubDate>
      <link>https://dev.to/wadco/beyond-pixels-how-modern-emails-embed-the-same-identifier-everywhere-4228</link>
      <guid>https://dev.to/wadco/beyond-pixels-how-modern-emails-embed-the-same-identifier-everywhere-4228</guid>
      <description>&lt;p&gt;A few days ago I received a promotional-style email asking for lobbying help on upcoming state regulations on email privacy of all things. Instead of clicking through, I opened the raw source and found something interesting.&lt;/p&gt;

&lt;p&gt;The same unique tracking identifier (tied to me as the recipient) appeared in three completely different places inside that single message:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A classic invisible tracking pixel (the 1x1 image that phones home when the email loads).&lt;/li&gt;
&lt;li&gt;Every clickable link, rewritten through a tracking redirect with long, unique tokens.&lt;/li&gt;
&lt;li&gt;Technical email headers that would survive even if the message was forwarded or relayed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This wasn't an isolated case. I had just finished analyzing a different marketing email that showed the exact same pattern. It looks like the email tracking arms race has quietly entered a new phase.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Old Way: Just a Pixel
&lt;/h2&gt;

&lt;p&gt;For decades, open tracking relied almost entirely on the humble tracking pixel: a tiny invisible image hosted on the sender's server. When your email client loads remote images, the server logs the open, your approximate location (via IP), device, and timestamp.&lt;/p&gt;

&lt;p&gt;Privacy features have made that method much less reliable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple’s Mail Privacy Protection pre-fetches images through proxies.&lt;/li&gt;
&lt;li&gt;Many users and organizations disable remote image loading by default.&lt;/li&gt;
&lt;li&gt;Gmail and other clients now warn about or limit external content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So senders adapted.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Pattern: One Identifier, Multiple Vectors
&lt;/h2&gt;

&lt;p&gt;Instead of depending on a single fragile signal, modern templating systems now embed &lt;strong&gt;the same per-recipient identifier&lt;/strong&gt; across several independent channels. The goal is redundancy: if one vector gets blocked, others still report back.&lt;/p&gt;

&lt;p&gt;Here’s what I’ve been seeing in real emails:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Header-based identifiers: Custom or structured headers (such as Feedback-ID, patterned Message-ID values, or other metadata) contain campaign or recipient tokens. These live outside the visible body and often survive forwarding, relays, and even some stripping tools.&lt;/li&gt;
&lt;li&gt;Click-tracking links: Every (or nearly every) link gets wrapped through a redirect service. The URLs contain long, seemingly random character strings or encoded parameters that uniquely identify the recipient and the specific link clicked. Even if images are completely blocked, a click still phones home.&lt;/li&gt;
&lt;li&gt;The traditional pixel: Still present as a fallback — usually a 1x1 image with its own unique token in the URL.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the examples I examined, the same underlying identifier (or closely derived values) appeared in all three locations. That means the sender can correlate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether the email was opened (pixel or header signal)&lt;/li&gt;
&lt;li&gt;Which links were clicked (redirect tracking)&lt;/li&gt;
&lt;li&gt;And tie everything back to the original send record, even across forwarded or relayed copies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This layered approach makes passive tracking much more resilient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Many people assume “I just disable images and I’m safe.” That no longer holds when the identifier lives in headers and link wrappers too.&lt;/p&gt;

&lt;p&gt;These techniques show up not just in obvious marketing blasts, but in other unsolicited commercial or advocacy emails as well. The infrastructure is baked into popular email service platforms and marketing tools, so even senders who aren’t deeply technical may be using it by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Spot It Yourself
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;In Gmail: Three dots → “Show original”&lt;/li&gt;
&lt;li&gt;In most other clients: Look for “View message source” or “Raw message”&lt;/li&gt;
&lt;li&gt;Search for:&lt;/li&gt;
&lt;li&gt;Long random-looking strings in Feedback-ID, Message-ID, or other X- headers&lt;/li&gt;
&lt;li&gt;&amp;lt;img src= pointing to external domains with query parameters&lt;/li&gt;
&lt;li&gt;href= values that go through known redirect domains or contain long encoded segments instead of clean destination URLs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you see matching or closely related tokens across headers, pixel URLs, and link wrappers, you’re looking at this multi-vector pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;Email senders face real pressure: privacy features are reducing the reliability of traditional metrics, while regulators continue to tighten rules around tracking and consent. The response has been to spread the same identifier across more places so the signal doesn’t die when one vector is defeated.&lt;/p&gt;

&lt;p&gt;This arms race is likely to continue. As clients and privacy tools get better at blocking one method, new or hybrid vectors will appear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full disclosure:&lt;/strong&gt; I’m the developer of a privacy-focused email service that rebuilds messages to reduce tracking exposure. This analysis grew out of work on improving detection and removal of these hidden vectors. The observations here are based on raw email inspection and stand independently of any product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Do You Think?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Have you noticed similar multi-vector tracking in everyday emails (marketing, transactional, or otherwise)?&lt;/li&gt;
&lt;li&gt;Are there other subtle techniques (CSS media queries, hidden data attributes, MIME boundary patterns, etc.) you’ve seen that aren’t covered above?&lt;/li&gt;
&lt;li&gt;How aggressively should email clients or privacy tools try to neutralize header-based and link-wrapper tracking?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’d love to hear examples or counterpoints in the comments. If there’s interest, I can share more sanitized raw-source snippets or dive deeper into specific vectors.&lt;/p&gt;

</description>
      <category>privacy</category>
    </item>
  </channel>
</rss>
