npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mail2dns

v1.0.0

Published

CLI that automates DNS setup for email.

Readme

CLI that automatically creates MX, SPF, DKIM, DMARC and verification DNS records for email providers. Supports multiple DNS providers.

👍 Stop manually copy-pasting DNS records for email!

⭐ Currently Supports 12 email providers and 10 DNS providers in any combination.

🔗 See website for setup guides for every provider combination

Example

mail2dns setup example.com googleworkspace cloudflare

Creates:

  • MX records
  • SPF record
  • DKIM records
  • DMARC record
  • Domain verification records

📦 Installation

Requires Node.js 18+.

npm install -g mail2dns

⚙️ Usage

Setup

Create DNS records for an email provider

mail2dns setup [options] <domain> <email-provider> <dns-provider>

Email Providers

migadu, googleworkspace, ms365, outlook, fastmail, mailgun, proton, zoho, sendgrid, resend, postmark, ses

DNS Providers

cloudflare, digitalocean, godaddy, gcloud, netlify, route53, vercel, hetzner, spaceship, azure

Provider Options

Provider-specific options are prompted interactively if not provided via flag or environment variable. See the providers reference below.

Options

| Flag | Description | Default | |------|-------------|---------| | -o, --no-mx | Skip MX records (set up DNS for outbound email only) | false | | -n, --skip-verify | Skip domain verification step (use if domain is already verified) | false | | -y, --yes | Skip confirmation prompts (the command will error if any required inputs are missing) | false | | --allow-insecure-flags | Allow secrets to be passed via command-line flags (not recommended) | false | | -d, --dry-run | Show records that would be created without applying them | false | | -z, --zone | DNS zone that contains the domain (overrides auto-detection) | undefined | | -p, --dmarc-policy | DMARC policy to use in the _dmarc TXT record (none, quarantine, reject) | none |

Verify

Check that expected DNS records for an email provider are present via public DNS lookup

mail2dns verify [options] <domain> <email-provider>

Email Providers

migadu, googleworkspace, ms365, outlook, fastmail, mailgun, proton, zoho, sendgrid, resend, postmark, ses

Provider Options

Provider-specific options are prompted interactively if not provided via flag or environment variable. See the providers reference below.

Options

| Flag | Description | Default | |------|-------------|---------| | -o, --no-mx | Skip MX records (verify DNS for outbound email only) | false | | -p, --dmarc-policy | Expected DMARC policy in the _dmarc TXT record (none, quarantine, reject) | none |

List

Show existing DNS records for a domain via the DNS provider API

mail2dns list [options] <domain> <dns-provider>

DNS Providers

cloudflare, digitalocean, godaddy, gcloud, netlify, route53, vercel, hetzner, spaceship, azure

Provider Options

Provider-specific options are prompted interactively if not provided via flag or environment variable. See the providers reference below.

Options

| Flag | Description | Default | |------|-------------|---------| | --allow-insecure-flags | Allow secrets to be passed via command-line flags (not recommended) | false | | -z, --zone | DNS zone that contains the domain (overrides auto-detection) | undefined |

💻 Examples

Interactive — prompts for any required inputs

mail2dns setup example.com migadu cloudflare

Non-interactive - inputs provided via flags

mail2dns setup example.com migadu cloudflare --verify-txt "hosted-email-verify=YOUR_KEY" --token YOUR_CF_TOKEN

Non-interactive - inputs provided via environment variables

MIGADU_VERIFY_TXT="hosted-email-verify=YOUR_KEY" \
CLOUDFLARE_API_TOKEN=YOUR_CF_TOKEN \
mail2dns setup example.com migadu cloudflare

✅ Supported Email providers

| Provider | Key | |----------|-----| | Migadu | migadu | | Google Workspace | googleworkspace | | Microsoft 365 | ms365 | | Microsoft Outlook | outlook | | Fastmail | fastmail | | Mailgun | mailgun | | Proton Mail | proton | | Zoho Mail | zoho | | Twilio SendGrid | sendgrid | | Resend | resend | | Postmark | postmark | | Amazon SES | ses |

✅ Supported DNS providers

| Provider | Key | |----------|-----| | Cloudflare | cloudflare | | DigitalOcean | digitalocean | | GoDaddy | godaddy | | Google Cloud | gcloud | | Netlify | netlify | | Amazon Route 53 | route53 | | Vercel | vercel | | Hetzner | hetzner | | Spaceship | spaceship | | Azure DNS | azure |

📧 Email providers

Migadu

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --verify-txt | MIGADU_VERIFY_TXT | Migadu verification TXT value | hosted-email-verify=abc123 |

Google Workspace

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --verify-txt | GOOGLE_VERIFY_TXT | Google Workspace verification TXT value | google-site-verification=abc123 | | --dkim-key | GOOGLE_DKIM_KEY | Google Workspace DKIM key | v=DKIM1; k=rsa; p=... |

Microsoft 365

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --verify-txt | MS365_VERIFY_TXT | Microsoft 365 domain verification TXT value | MS=ms12345678 | | --dkim-selector1-target | MS365_DKIM_SELECTOR1 | DKIM selector1 CNAME target | selector1-example-com._domainkey.example.onmicrosoft.com | | --dkim-selector2-target | MS365_DKIM_SELECTOR2 | DKIM selector2 CNAME target | selector2-example-com._domainkey.example.onmicrosoft.com |

Microsoft Outlook

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --verify-txt | MS365_VERIFY_TXT | Microsoft 365 domain verification TXT value | MS=ms12345678 | | --dkim-selector1-target | MS365_DKIM_SELECTOR1 | DKIM selector1 CNAME target | selector1-example-com._domainkey.example.onmicrosoft.com | | --dkim-selector2-target | MS365_DKIM_SELECTOR2 | DKIM selector2 CNAME target | selector2-example-com._domainkey.example.onmicrosoft.com |

Fastmail

Mailgun

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --dkim-txt | MAILGUN_DKIM_TXT | DKIM TXT value | k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4... |

Proton Mail

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --verify-txt | PROTON_VERIFY_TXT | Proton Mail domain verification TXT value | protonmail-verification=abc123 | | --dkim-cname1 | PROTON_DKIM_CNAME1 | DKIM CNAME 1 target | protonmail.domainkey.abc123.domains.proton.ch | | --dkim-cname2 | PROTON_DKIM_CNAME2 | DKIM CNAME 2 target | protonmail2.domainkey.abc123.domains.proton.ch | | --dkim-cname3 | PROTON_DKIM_CNAME3 | DKIM CNAME 3 target | protonmail3.domainkey.abc123.domains.proton.ch |

Zoho Mail

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --verify-txt | ZOHO_VERIFY_TXT | Zoho Mail domain verification TXT value | zoho-verification=zb12345678.zmverify.zoho.com | | --dkim-name | ZOHO_DKIM_NAME | Zoho Mail DKIM record hostname | zmail._domainkey | | --dkim-key | ZOHO_DKIM_KEY | Zoho Mail DKIM TXT value | v=DKIM1; k=rsa; p=... | | --zoho-region | ZOHO_REGION | Zoho Mail region | |

Twilio SendGrid

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --return-path-name | SENDGRID_RETURN_PATH_NAME | SendGrid return path CNAME hostname | em1234.yourdomain.com | | --return-path-value | SENDGRID_RETURN_PATH_VALUE | SendGrid return path CNAME value | u12345.wl123.sendgrid.net | | --dkim1 | SENDGRID_DKIM1 | DKIM CNAME 1 value | s1.domainkey.u12345.wl123.sendgrid.net | | --dkim2 | SENDGRID_DKIM2 | DKIM CNAME 2 value | s2.domainkey.u12345.wl123.sendgrid.net |

Resend

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --dkim-key | RESEND_DKIM_KEY | Resend DKIM TXT value | p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ... | | --resend-region | RESEND_REGION | Resend region | |

Postmark

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --dkim-name | POSTMARK_DKIM_NAME | DKIM TXT record hostname | 202060101010101pm._domainkey | | --dkim-value | POSTMARK_DKIM_VALUE | DKIM TXT record value | k=rsa;p=MIGfMA0... |

Amazon SES

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --aws-profile | AWS_PROFILE | AWS profile to use | my-profile |

⬛ DNS providers

Cloudflare

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --token | CLOUDFLARE_API_TOKEN | Cloudflare API token | |

DigitalOcean

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --token | DIGITALOCEAN_TOKEN | DigitalOcean API token | |

GoDaddy

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --key | GODADDY_API_KEY | GoDaddy API key | | | --secret | GODADDY_API_SECRET | GoDaddy API secret | |

Google Cloud

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --project | CLOUDSDK_CORE_PROJECT | Google Cloud project ID to use | my-project-123 |

Netlify

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --token | NETLIFY_AUTH_TOKEN | Netlify personal access token | |

Amazon Route 53

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --aws-profile | AWS_PROFILE | AWS profile to use | my-profile |

Vercel

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --token | VERCEL_TOKEN | Vercel API token | | | --team-id | VERCEL_TEAM_ID | Vercel team ID | |

Hetzner

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --token | HCLOUD_TOKEN | Hetzner Cloud API token | |

Spaceship

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --api-key | SPACESHIP_API_KEY | Spaceship API key | | | --api-secret | SPACESHIP_API_SECRET | Spaceship API secret | |

Azure DNS

Inputs

| Flag | Env var | Description | Example | |------|---------|-------------|---------| | --subscription | AZURE_SUBSCRIPTION_ID | Azure subscription ID to use | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |