Omid Sayfun
Omid SayfunComputer Geek
Home
Notebook
Journey

Online

Github
Linkedin
Read.cv
Notebook
A try at type-safe groupBy function in TypeScript
April 10, 2025
Adding prettier to eslint
April 10, 2025
Upgrading my blog to Next 15
April 05, 2025
tsx doesn’t support decorators
March 26, 2025
Extending Window: types vs interfaces
March 21, 2025
Loading env file into Node process
February 06, 2025
Validating NestJS env vars with zod
February 06, 2025
Using node API for delay
February 06, 2025
React Component Lifecycle
November 28, 2024
Email special headers
November 20, 2024
How CQRS is different than Event Sourcing
August 18, 2024
RabbitMQ exchange vs queue
August 14, 2024
PgVector similarity search distance functions
August 13, 2024
PgVector indexing options for vector similarity search
July 31, 2024
Counting GPT tokens
June 30, 2024
Logging route handler responses in Next.js 14
June 19, 2024
Redirect www subdomain with Cloudflare
June 17, 2024
Logging requests in Express app
June 16, 2024
Move Docker volume to bind mount
June 12, 2024
Using puppeteer executable for GSTS
June 08, 2024
Next.js Hydration Window Issue
May 29, 2024
Using Git rebase without creating chaos in your repo
May 16, 2024
Why EQ is Your Next Career Upgrade
May 13, 2024
Storing Vector in Postgres with Drizzle ORM
March 21, 2024
Implementing RPC Calls with RabbitMQ in TypeScript
March 16, 2024
Optimize webpage load with special tags
March 15, 2024
What the hell is Open Graph?
March 13, 2024
My go-to Next.js ESlint config
March 10, 2024
List of useful Chrome args
March 10, 2024
Add update date field to Postgres
February 27, 2024
Combining RxJS observables - Part 1
February 20, 2024
Canvas macOS issue
February 20, 2024

Email special headers

November 20, 2024 · Updated on April 10, 2025

Ever wonder how some emails magically include an “Unsubscribe” button at the top or how your inbox neatly categorizes messages from the same sender? That’s thanks to special email headers!

Unsubscribe Headers

Modern email services like Gmail and Outlook use List-Unsubscribe headers to let users opt out with a single click. Instead of digging through the email for a tiny “unsubscribe” link, you get a clear button at the top. This improves deliverability for senders and makes it easier for users to manage subscriptions.

Email Grouping Headers

To prevent inbox clutter, email providers use headers like List-ID and Precedence to group related emails together. For example:

• List-ID: Helps categorize newsletters from the same source.

• Precedence: Bulk: Tells the email provider it’s part of a mass mailing, which can influence filtering.

Example 1

	const info = await transporter.sendMail({
		from: '"My Newsletter" <[email protected]>',
		to: '[email protected]',
		subject: 'Your Weekly Update',
		text: 'Here is your update!',
		html: '<p>Here is your update!</p>',
 
		// Special headers
		headers: {
			'List-Unsubscribe': '<mailto:[email protected]>, <https://yourdomain.com/unsubscribe>',
			'List-ID': 'weekly-updates.yourdomain.com',
			Precedence: 'bulk',
		},
	});

When a recipient clicks the unsubscribe link, an unsubscribe request will be emailed to the email address you've provided.

Example 2

	const info = await transporter.sendMail({
		from: '"My Newsletter" <[email protected]>',
		to: '[email protected]',
		subject: 'Your Weekly Update',
		text: 'Here is your update!',
		html: '<p>Here is your update!</p>',
 
		// Special headers
		headers: {
			'List-Unsubscribe': '<https://yourdomain.com/unsubscribe>',
			'List-ID': 'weekly-updates.yourdomain.com',
			Precedence: 'bulk',
		},
	});

When a recipient clicks the unsubscribe link, the user will be redirected to the provided URL where the rest of the flow will continue.

By using these headers correctly, email senders improve engagement, while users get a cleaner, more manageable inbox.

Want to improve your email campaigns? Make sure you’re using these headers the right way!

Continue Reading

  • 15-03-2024

    Optimize webpage load with special tags

  • 13-03-2024

    What the hell is Open Graph?

  • 29-11-2024

    React Component Lifecycle

  • 09-03-2024

    Combining RxJS observables - Part 1

  • 16-06-2024

    Logging requests in Express app