<?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>Forem: InboxGreen</title>
    <description>The latest articles on Forem by InboxGreen (@inboxgreen).</description>
    <link>https://forem.com/inboxgreen</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3946796%2F0dc62a6f-e414-42ce-878d-f28795bf03f4.png</url>
      <title>Forem: InboxGreen</title>
      <link>https://forem.com/inboxgreen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/inboxgreen"/>
    <language>en</language>
    <item>
      <title>SPF record syntax explained: a practical guide for developers</title>
      <dc:creator>InboxGreen</dc:creator>
      <pubDate>Sat, 23 May 2026 05:22:40 +0000</pubDate>
      <link>https://forem.com/inboxgreen/spf-record-syntax-explained-a-practical-guide-for-developers-1kii</link>
      <guid>https://forem.com/inboxgreen/spf-record-syntax-explained-a-practical-guide-for-developers-1kii</guid>
      <description>&lt;p&gt;SPF (Sender Policy Framework) is a DNS record that tells receiving mail servers which servers are allowed to send email on behalf of your domain. If a server not on that list sends email claiming to be from your domain, the receiving server can reject or flag it.&lt;/p&gt;

&lt;p&gt;Understanding the syntax makes it easier to set it up correctly and avoid common mistakes like accidentally hitting the 10-lookup limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basic structure
&lt;/h2&gt;

&lt;p&gt;An SPF record is a TXT record on your domain's DNS. It always starts with:&lt;/p&gt;

&lt;p&gt;v=spf1&lt;/p&gt;

&lt;p&gt;After that, you list your authorized senders as mechanisms, then end with an &lt;code&gt;all&lt;/code&gt; directive.&lt;/p&gt;

&lt;p&gt;A typical SPF record looks like this:&lt;/p&gt;

&lt;p&gt;v=spf1 include:_spf.google.com include:spf.sendinblue.com ip4:203.0.113.50 ~all&lt;/p&gt;

&lt;h2&gt;
  
  
  Mechanisms
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;ip4:&lt;/code&gt; and &lt;code&gt;ip6:&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Authorizes a specific IP address or CIDR range.&lt;/p&gt;

&lt;p&gt;ip4:203.0.113.50&lt;br&gt;
ip4:203.0.113.0/24&lt;br&gt;
ip6:2001:db8::1&lt;/p&gt;

&lt;p&gt;Use this when you know the exact IP of a mail server you control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;include:&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Delegates to another domain's SPF record. Each &lt;code&gt;include:&lt;/code&gt; causes one DNS lookup.&lt;/p&gt;

&lt;p&gt;include:_spf.google.com&lt;br&gt;
include:sendgrid.net&lt;br&gt;
include:spf.mailchimp.com&lt;/p&gt;

&lt;p&gt;Most third-party email services give you an &lt;code&gt;include:&lt;/code&gt; value to add. Each one authorizes all IPs in that service's SPF record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;a:&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Authorizes the A record of a domain. If the domain's A record matches the IP the email came from, it passes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;mx:&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Authorizes the MX records of a domain. Less common, typically used when your mail server and MX records are the same host.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;ptr:&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Avoid this one. It is slow, unreliable, and deprecated in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The &lt;code&gt;all&lt;/code&gt; directive
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;all&lt;/code&gt; at the end controls what happens to mail from servers not on your list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;~all&lt;/code&gt; (softfail) — fail but usually deliver anyway, marking as suspicious&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-all&lt;/code&gt; (hardfail) — reject the email&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;+all&lt;/code&gt; (pass all) — authorizes everything, which defeats the purpose of SPF entirely&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;?all&lt;/code&gt; (neutral) — no policy, same as having no SPF&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most senders, &lt;code&gt;~all&lt;/code&gt; is the safe starting point. Once you are confident your record is complete, switch to &lt;code&gt;-all&lt;/code&gt; for stronger protection.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 10-lookup limit
&lt;/h2&gt;

&lt;p&gt;SPF has a hard limit of 10 DNS lookups per evaluation. Each &lt;code&gt;include:&lt;/code&gt;, &lt;code&gt;a:&lt;/code&gt;, &lt;code&gt;mx:&lt;/code&gt;, and &lt;code&gt;ptr:&lt;/code&gt; costs one lookup. Exceed 10 and the SPF check returns &lt;code&gt;permerror&lt;/code&gt;, which effectively means the record fails.&lt;/p&gt;

&lt;p&gt;This is a common problem when a domain uses multiple services: Google Workspace plus Mailchimp plus SendGrid plus a CRM can easily push you over the limit.&lt;/p&gt;

&lt;p&gt;To fix it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Audit your record and count your lookups&lt;/li&gt;
&lt;li&gt;Remove services you are no longer using&lt;/li&gt;
&lt;li&gt;Flatten the record by replacing &lt;code&gt;include:&lt;/code&gt; values with the raw IPs they resolve to (but you will need to update this when the provider changes their IPs)&lt;/li&gt;
&lt;li&gt;Use an SPF flattening service if you have many senders and cannot reduce them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://inboxgreen.email/tools/spf-lookup" rel="noopener noreferrer"&gt;InboxGreen's SPF lookup tool&lt;/a&gt; shows your current record and flags lookup count issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Multiple SPF records:&lt;/strong&gt; You can only have one TXT SPF record per domain. A second record breaks SPF validation entirely. Merge them into one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrong domain:&lt;/strong&gt; SPF needs to match the domain in the &lt;code&gt;From:&lt;/code&gt; header for DMARC alignment. If you send from &lt;code&gt;noreply@mail.yourdomain.com&lt;/code&gt;, the SPF record needs to be on &lt;code&gt;mail.yourdomain.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forgetting subdomains:&lt;/strong&gt; SPF on &lt;code&gt;yourdomain.com&lt;/code&gt; does not cover &lt;code&gt;mail.yourdomain.com&lt;/code&gt; or &lt;code&gt;info.yourdomain.com&lt;/code&gt;. Each sending subdomain needs its own record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Missing &lt;code&gt;all&lt;/code&gt;:&lt;/strong&gt; Every SPF record must end with some form of &lt;code&gt;all&lt;/code&gt;. Without it, the result is undefined.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking your record
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://inboxgreen.email/check" rel="noopener noreferrer"&gt;InboxGreen's free checker&lt;/a&gt; pulls your SPF record, parses the mechanisms, and runs an authentication check against your domain. No login required.&lt;/p&gt;

</description>
      <category>email</category>
      <category>webdev</category>
      <category>dns</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to check if your domain is on an email blacklist (and what to do if it is)</title>
      <dc:creator>InboxGreen</dc:creator>
      <pubDate>Sat, 23 May 2026 05:18:17 +0000</pubDate>
      <link>https://forem.com/inboxgreen/how-to-check-if-your-domain-is-on-an-email-blacklist-and-what-to-do-if-it-is-22ag</link>
      <guid>https://forem.com/inboxgreen/how-to-check-if-your-domain-is-on-an-email-blacklist-and-what-to-do-if-it-is-22ag</guid>
      <description>&lt;p&gt;If your emails are suddenly going to spam or not arriving at all, a blacklist is one of the first things to rule out. Blacklists are databases of IP addresses and domains that have been flagged for sending spam. Major email providers check these lists before deciding where to deliver your mail.&lt;/p&gt;

&lt;p&gt;Here is how to check if you are listed and what to do about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What gets blacklisted
&lt;/h2&gt;

&lt;p&gt;Both your sending IP address and your domain can be blacklisted independently. An IP blacklisting affects every domain that sends through that IP. A domain blacklisting follows your domain regardless of what IP you send from.&lt;/p&gt;

&lt;p&gt;Common reasons for being blacklisted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sending to addresses that have not opted in&lt;/li&gt;
&lt;li&gt;High spam complaint rates (anything above 0.1% with Gmail will hurt you)&lt;/li&gt;
&lt;li&gt;Sending to spam trap addresses&lt;/li&gt;
&lt;li&gt;A sudden spike in sending volume from a new domain&lt;/li&gt;
&lt;li&gt;Your shared hosting IP was blacklisted by a different tenant (common on shared servers)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to check
&lt;/h2&gt;

&lt;p&gt;The fastest way is to use a blacklist lookup tool. &lt;a href="https://inboxgreen.email/tools/blacklist-checker" rel="noopener noreferrer"&gt;InboxGreen has a free blacklist checker&lt;/a&gt; that checks your domain against the major lists used by Gmail, Outlook, and other providers.&lt;/p&gt;

&lt;p&gt;You can also check manually:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spamhaus&lt;/strong&gt; (spamhaus.org/lookup) is the most important one. Gmail and Microsoft weight Spamhaus heavily. If you are listed here, expect significant deliverability damage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Barracuda&lt;/strong&gt; (barracudacentral.org/lookups) matters mainly for corporate email delivered through Barracuda gateways, which is common in enterprise environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MXToolbox&lt;/strong&gt; (mxtoolbox.com/blacklists) checks against around 100 blacklists at once. Free, no account needed, good for a broad sweep.&lt;/p&gt;

&lt;p&gt;If you are on shared hosting (Namecheap, Bluehost, SiteGround), always check the IP address of your mail server too, not just your domain name.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get delisted
&lt;/h2&gt;

&lt;p&gt;Each blacklist has its own removal process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spamhaus:&lt;/strong&gt; Go to spamhaus.org/lookup, enter your IP or domain, and follow the removal link. For legitimate senders who ended up listed by mistake, removal is usually granted within 24-48 hours if you can explain what happened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Barracuda:&lt;/strong&gt; Fill out the removal request at barracudacentral.org/lookups. Approved within a few hours for clean IPs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SORBS:&lt;/strong&gt; Slower process, often requires waiting out the listing period and demonstrating clean sending behavior over time.&lt;/p&gt;

&lt;p&gt;Before requesting removal from any list, fix the underlying problem first. If you request removal without stopping whatever caused the listing, you will be relisted quickly and future removal requests may be ignored or delayed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Staying off blacklists
&lt;/h2&gt;

&lt;p&gt;The best approach is prevention:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep spam complaint rates below 0.08% (Google's threshold before they start filtering)&lt;/li&gt;
&lt;li&gt;Never send to purchased or scraped lists&lt;/li&gt;
&lt;li&gt;Set up SPF, DKIM, and DMARC — authenticated domains are less likely to be listed&lt;/li&gt;
&lt;li&gt;Warm up new domains gradually, starting at 20-50 emails per day and scaling over 4-6 weeks&lt;/li&gt;
&lt;li&gt;Remove unengaged contacts regularly before complaint rates climb&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Checking your deliverability setup before it becomes a problem is much easier than recovering from a blacklisting. &lt;a href="https://inboxgreen.email/check" rel="noopener noreferrer"&gt;InboxGreen's full domain check&lt;/a&gt; covers SPF, DKIM, DMARC, and blacklist status in one scan, no login required.&lt;/p&gt;

</description>
      <category>email</category>
      <category>webdev</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>DMARC p=none vs p=quarantine vs p=reject: what to use and when</title>
      <dc:creator>InboxGreen</dc:creator>
      <pubDate>Sat, 23 May 2026 04:42:27 +0000</pubDate>
      <link>https://forem.com/inboxgreen/dmarc-pnone-vs-pquarantine-vs-preject-what-to-use-and-when-51kd</link>
      <guid>https://forem.com/inboxgreen/dmarc-pnone-vs-pquarantine-vs-preject-what-to-use-and-when-51kd</guid>
      <description>&lt;p&gt;If you have set up DMARC on your domain, you have probably seen the &lt;code&gt;p=&lt;/code&gt; tag and wondered what each value actually does. The difference matters a lot. The wrong policy can mean your legitimate emails get rejected, or that spoofed emails from your domain land in inboxes without any consequence.&lt;/p&gt;

&lt;p&gt;Here is what each policy does and how to decide which one to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  What DMARC does
&lt;/h2&gt;

&lt;p&gt;DMARC tells receiving mail servers what to do when an email claiming to be from your domain fails authentication. An email fails DMARC when it fails both SPF and DKIM alignment checks.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;p=&lt;/code&gt; tag sets the policy for those failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  p=none
&lt;/h2&gt;

&lt;p&gt;v=DMARC1; p=none; rua=mailto:&lt;a href="mailto:dmarc@yourdomain.com"&gt;dmarc@yourdomain.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the monitoring policy. When a message fails DMARC, nothing happens to it — it gets delivered normally. But you receive aggregate reports (via &lt;code&gt;rua=&lt;/code&gt;) showing you who is sending email from your domain and what is passing or failing.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;p=none&lt;/code&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are setting up DMARC for the first time&lt;/li&gt;
&lt;li&gt;You want to understand your email traffic before enforcing anything&lt;/li&gt;
&lt;li&gt;You have third-party senders (CRMs, ESPs, support tools) that you need to authenticate first&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;p=none&lt;/code&gt; does not protect your domain from spoofing. Anyone can spoof your domain and the email will be delivered. The only benefit is visibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  p=quarantine
&lt;/h2&gt;

&lt;p&gt;v=DMARC1; p=reject; rua=mailto:&lt;/p&gt;

&lt;p&gt;Emails that fail DMARC are rejected outright. They do not arrive. The sending server gets a bounce.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;p=reject&lt;/code&gt; when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have reviewed your DMARC reports and confirmed all legitimate email is passing&lt;/li&gt;
&lt;li&gt;You want the strongest protection against domain spoofing and phishing&lt;/li&gt;
&lt;li&gt;You understand that any misconfigured sender will start bouncing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;p=reject&lt;/code&gt; is the goal. It is what Google, Microsoft, and most large domains use. It is what blocks phishers from impersonating your brand.&lt;/p&gt;

&lt;h2&gt;
  
  
  The right progression
&lt;/h2&gt;

&lt;p&gt;The standard path is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with &lt;code&gt;p=none&lt;/code&gt; and add an &lt;code&gt;rua=&lt;/code&gt; address to receive reports&lt;/li&gt;
&lt;li&gt;Review reports over 2-4 weeks and identify all services sending as your domain&lt;/li&gt;
&lt;li&gt;Make sure each service has SPF or DKIM configured correctly&lt;/li&gt;
&lt;li&gt;Move to &lt;code&gt;p=quarantine&lt;/code&gt; once you are confident in your legitimate traffic&lt;/li&gt;
&lt;li&gt;Move to &lt;code&gt;p=reject&lt;/code&gt; once you see no failures from legitimate senders&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Skipping straight to &lt;code&gt;p=reject&lt;/code&gt; without monitoring first is how organizations accidentally block their own transactional email.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your current DMARC record
&lt;/h2&gt;

&lt;p&gt;You can look up your current DMARC record and see exactly what policy you are running with &lt;a href="https://inboxgreen.email/check" rel="noopener noreferrer"&gt;InboxGreen's free DMARC checker&lt;/a&gt;. It will also flag any syntax issues and show you whether SPF and DKIM are passing alongside it.&lt;/p&gt;

&lt;p&gt;No login required.&lt;/p&gt;

</description>
      <category>email</category>
      <category>webdev</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>Why your emails go to spam (and how to check SPF, DKIM and DMARC in 60 seconds)</title>
      <dc:creator>InboxGreen</dc:creator>
      <pubDate>Fri, 22 May 2026 21:37:00 +0000</pubDate>
      <link>https://forem.com/inboxgreen/why-your-emails-go-to-spam-and-how-to-check-spf-dkim-and-dmarc-in-60-seconds-50hf</link>
      <guid>https://forem.com/inboxgreen/why-your-emails-go-to-spam-and-how-to-check-spf-dkim-and-dmarc-in-60-seconds-50hf</guid>
      <description>&lt;p&gt;Every developer has been there. You send a transactional email, a password reset, an invoice and it lands in spam. Or worse, it disappears completely.&lt;/p&gt;

&lt;p&gt;The reason is almost always one of three DNS records: SPF, DKIM, or DMARC. Here is what each one does and how to check them instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  SPF (Sender Policy Framework)
&lt;/h2&gt;

&lt;p&gt;SPF tells receiving mail servers which IP addresses are allowed to send email for your domain. If your email goes out through SendGrid, Mailgun, or Google Workspace but your SPF record does not include them, the receiving server has no way to verify the email is legitimate.&lt;/p&gt;

&lt;p&gt;A basic SPF record looks like this:&lt;/p&gt;

&lt;p&gt;v=spf1 include:sendgrid.net include:_spf.google.com ~all&lt;/p&gt;

&lt;p&gt;The ~all at the end means "soft fail" emails from unlisted sources are accepted but flagged. Use -all for a strict policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  DKIM (DomainKeys Identified Mail)
&lt;/h2&gt;

&lt;p&gt;DKIM adds a cryptographic signature to every email you send. The receiving server looks up your public key in DNS and verifies the signature matches. If it does, the email is confirmed as untampered.&lt;/p&gt;

&lt;p&gt;Without DKIM, Outlook in particular will silently move your emails to junk , even if SPF passes.&lt;/p&gt;

&lt;h2&gt;
  
  
  DMARC (Domain-based Message Authentication)
&lt;/h2&gt;

&lt;p&gt;DMARC ties SPF and DKIM together and tells receiving servers what to do when emails fail both checks. It also sends you reports so you can see who is sending email from your domain.&lt;/p&gt;

&lt;p&gt;A basic DMARC record:&lt;/p&gt;

&lt;p&gt;v=DMARC1; p=none; rua=mailto:&lt;a href="mailto:dmarc@yourdomain.com"&gt;dmarc@yourdomain.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Start with p=none to collect data, then move to p=quarantine and eventually p=reject once you are confident all your legitimate senders are covered.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check all three in 60 seconds
&lt;/h2&gt;

&lt;p&gt;You can look up each record manually with dig or nslookup, but the fastest way is to use a free checker that tests all three at once and explains what each result means.&lt;/p&gt;

&lt;p&gt;I built InboxGreen (&lt;a href="https://inboxgreen.email" rel="noopener noreferrer"&gt;https://inboxgreen.email&lt;/a&gt;) specifically for this. Paste your domain, hit check, and you get a plain-English breakdown of every pass, fail, and warning no account needed.&lt;/p&gt;

&lt;p&gt;It also checks major blacklists, analyzes email headers, and has 28 free DNS tools including a DMARC analyzer, SPF generator, DKIM generator, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  The order of operations
&lt;/h2&gt;

&lt;p&gt;If you are starting from scratch:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set up SPF first, add your sending providers&lt;/li&gt;
&lt;li&gt;Enable DKIM in your email provider dashboard, they generate the keys&lt;/li&gt;
&lt;li&gt;Add DMARC with p=none to start collecting reports&lt;/li&gt;
&lt;li&gt;Check your results and fix any failures&lt;/li&gt;
&lt;li&gt;Move DMARC to p=quarantine after 2-3 weeks of clean reports&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most deliverability problems are fixed at step 1 or 2. DMARC is the layer that protects your domain long term.&lt;/p&gt;

&lt;h2&gt;
  
  
  One more thing
&lt;/h2&gt;

&lt;p&gt;Check your domain now even if you think everything is fine. It is common to have a working SPF record that was set up years ago but no longer includes a sending service you added later. Silent failures are the worst kind.&lt;/p&gt;

</description>
      <category>email</category>
      <category>webdev</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
