Blue Checkmark On Emails
Blue Checkmark On Emails
Introduction
When you send an email from a personal domain and see a blue verification checkmark appear next to your name in Gmail, it signals to recipients that the message originates from an authenticated source. For homelab enthusiasts, self‑hosted mail servers, and DevOps engineers who run their own mail infrastructure, this visual cue is more than a cosmetic perk — it is a trust signal that can improve deliverability, reduce spam‑folder placement, and reinforce the credibility of your services.
The phenomenon is not limited to large enterprises; it is achievable for individual domains that meet a set of technical requirements defined by the industry‑wide DMARC, DKIM, SPF, and BIMI standards. The key question many readers ask is whether a blue checkmark requires a paid service or can be earned through open‑source configuration. The answer lies in a disciplined approach to email authentication, domain reputation management, and proper use of the Verified Mark (BIMI) specification. In this comprehensive guide you will learn: * The underlying mechanisms that cause Gmail to display a blue checkmark.
- How to configure SPF, DKIM, and DMARC for a self‑hosted mail system.
- The steps required to publish a BIMI logo that satisfies Google’s verification criteria.
- Practical Docker‑based deployments for DMARC monitoring and mail routing.
- Common pitfalls, troubleshooting techniques, and performance considerations.
By the end of this article you will have a clear roadmap for obtaining that coveted blue checkmark on your own domain, without relying on third‑party paid services. ## Understanding the Topic
What Is the Blue Checkmark?
The blue checkmark in Gmail is part of Google’s “Verified Sender” program. When a message passes a strict DMARC policy (typically p=reject or p=quarantine with a high pass rate) and includes a correctly referenced BIMI logo, Google may display a small blue checkmark next to the sender’s name. This visual indicator is distinct from the gray checkmarks used for internal Gmail conversations and serves as a public statement that the sender’s domain has been verified as legitimate.
Historical Context Google introduced the Verified Sender program in 2020, initially targeting high‑volume commercial senders. Over time, the criteria have been refined to include personal domains that demonstrate robust authentication. The underlying standards — SPF, DKIM, DMARC, and BIMI — have been part of the email ecosystem for over a decade, but widespread adoption only accelerated after major providers began enforcing stricter DMARC policies.
Core Components
| Component | Purpose | Typical Implementation |
|---|---|---|
| SPF | Authorizes IP addresses allowed to send mail on behalf of the domain. | TXT record: v=spf1 ip4:198.51.100.0/24 -all |
| DKIM | Adds a cryptographic signature to each message, enabling receivers to verify integrity. | Generated by signing service; public key published in DNS. |
| DMARC | Provides policy enforcement and reporting based on SPF and DKIM results. | TXT record: v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com |
| BIMI | Publishes a verified logo that appears next to the sender name when DMARC passes. | SVG file hosted at https://example.com/bimi/logo.svg with google-site-verification meta tag. |
Pros and Cons
Pros * Improves recipient trust and can increase open rates.
- Reduces likelihood of messages being flagged as spam.
- Provides a clear, visual confirmation of domain legitimacy.
Cons
- Requires meticulous DNS configuration and ongoing monitoring.
- Misconfigurations can cause legitimate mail to be rejected.
- The verification process is ultimately controlled by the receiving provider (e.g., Gmail) and may not be guaranteed.
Current State and Future Trends
The email authentication landscape is moving toward stricter enforcement. As of 2024, Gmail expects a DMARC policy of p=reject for at least 95 % of messages to consider a domain fully verified. Emerging standards such as “Authenticated Received Chain” (ARC) are being explored to preserve authentication across forwarding paths, which may affect future verification criteria.
Comparison With Alternatives
- Third‑party email service providers (e.g., SendGrid, Mailgun) often handle authentication automatically for you, but they charge per‑email or subscription fees.
- Self‑hosted solutions give you full control and can be integrated into a homelab environment, but they require manual DNS management and monitoring.
- Open‑source DMARC monitoring tools (e.g., dmarcian, Postmark) provide reporting without cost, yet they do not directly grant the blue checkmark; they only help you meet the technical prerequisites.
Prerequisites
System Requirements
- A publicly routable IPv4 address or domain‑based hostname for inbound mail reception.
- Sufficient CPU and RAM (minimum 2 vCPU, 4 GB RAM) for running a mail server and associated containers. * An operating system capable of running Docker Engine (Ubuntu 22.04 LTS, Debian 12, or CentOS 9).
Required Software
| Software | Minimum Version | Purpose |
|---|---|---|
| Docker Engine | 24.0 | Container runtime for mail services and monitoring tools. |
| Docker Compose | 2.20 | Orchestration of multi‑container setups. |
| OpenDKIM | 2.11 | DKIM signing service. |
| OpenDMARC | 1.3 | DMARC policy enforcement and reporting. |
| Postfix | 3.8 | Mail Transfer Agent (MTA). |
| Dovecot | 2.3 | IMAP/POP3 delivery agent. |
| Certbot | 2.9 | Automated TLS certificate issuance via Let’s Encrypt. |
Network and Security Considerations
- Port 25 (SMTP) must be open inbound for mail reception; many providers block outbound port 25, so consider using a relay service if needed. * TLS (port 587 for submission, port 465 for SMTPS) should be enforced to prevent plaintext transmission.
- Firewall rules should restrict access to only necessary ports (25, 587, 993, 995).
User Permissions * The user running Docker commands must belong to the docker group or have sudo privileges.
- DNS updates require administrative access to the domain registrar’s control panel.
Pre‑Installation Checklist
- Register a domain and configure authoritative nameservers.
- Obtain a TLS certificate for the domain (via Let’s Encrypt or a commercial CA).
- Set up DNS records for SPF, DKIM, DMARC, and BIMI.
- Verify that the domain resolves correctly (
dig,nslookup). - Ensure that port 25 inbound traffic is not blocked by your ISP or cloud provider.
Installation & Setup
Deploying Core Mail Components with Docker
Below is a sample docker-compose.yml that provisions Postfix, OpenDKIM, OpenDMARC, and a lightweight DMARC reporting UI.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
version: "3.8"
services:
postfix:
image: catatnight/postfix:latest container_name: $CONTAINER_NAMES_postfix
restart: unless-stopped
environment:
- myhostname=mail.example.com
- mydomain=example.com
- smtp_user=user
- smtp_password=pass
ports:
- "25:25"
- "587:587"
- "465:465"
volumes:
- ./postfix:/etc/postfix
- ./mail:/var/mail
depends_on:
- opendmarc
- opendkim
opendkim:
image: dperson/opendkim:latest
container_name: $CONTAINER_NAMES_opendkim
restart: unless-stopped
environment:
- DKIM_SELECTOR=mail
- DKIM_KEY_PATH=/keys/mail.private
volumes:
- ./dkim/keys:/keys
- ./dkim/signing.conf:/etc/opendkim.conf
opendmarc:
image: dperson/opendmarc:latest
container_name: $CONTAINER_NAMES_opendmarc
restart: unless-stopped
environment:
- DMARC_REPORT_URI=https://dmarc.example.com/report
volumes:
- ./dmarc/reports:/var/reports
- ./dmarc/opendmarc.conf:/etc/opendmarc.conf
dmarc-ui:
image: dmarcian/dmarc-report-viewer:latest
container_name: $CONTAINER_NAMES_dmarc_ui
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ./dmarc/reports:/app/data
Step‑by‑Step Installation
Create a dedicated directory structure on the host to store configuration files and persistent data.
1 2
mkdir -p ~/mailstack/{postfix,dkim,opendmarc,dmarc} cd ~/mailstack
Generate DKIM keys using OpenDKIM utilities.
1 2
opendkim-genkey -s mail -d example.com -b 2048 -D ./dkim/keys chown opendkim:opendkim ./dkim/keys/mail.private
- Configure OpenDKIM (example
signing.conf). ```conf/home/user/mailstack/dkim/signing.conf
Example:mail.example.com *:@example.com ```
Set up OpenDMARC (example
opendmarc.conf).1 2 3 4 5 6
# /home/user/mailstack/opendmarc/opendmarc.conf AuthServers = * Domain = example.com KeyFile = /home/user/mailstack/dkim/keys/mail.private Selector = mail Mode = s
Deploy the compose stack.
1
docker compose up -dVerify container status.
1 2 3
docker ps --filter "name=$CONTAINER_NAMES_postfix" --format ": " docker ps --filter "name=$CONTAINER_NAMES_opendkim" --format ": " docker ps --filter "name=$CONTAINER_NAMES_opendmarc" --format ": "
Expected output shows each container in
Upstate with no errors. 7. Publish DNS records.SPF Record (TXT):
1
v=spf1 mx a:example.com -all
DKIM DNS Record (TXT):
1
mail._domainkey.example.com. 3600 TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw...";
DMARC Policy (TXT):
1
_dmarc.example.com. 3600 TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com; ruf=