1. Missing or Incorrect SPF, DKIM, DMARC
These are the biggest causes.
InformedCare360 editorial team
3 min read
1. Missing or Incorrect SPF, DKIM, DMARC
These are the biggest causes.
SPF
SPF tells receiving mail servers which servers are allowed to send email for your domain.
Example DNS TXT record:
v=spf1 include:sendgrid.net ~all(or Mailgun, SES, Postmark, etc. depending on your provider)
Check SPF
Use:
DKIM
DKIM signs outgoing emails cryptographically.
Without DKIM:
Gmail heavily penalizes
Outlook often sends to junk
Microsoft 365 distrusts mail
Your provider usually gives CNAME/TXT records to add.
Example:
selector._domainkey.marketing.incDMARC
DMARC tells recipients what to do if SPF/DKIM fail.
Example starter policy:
v=DMARC1; p=none; rua=mailto:dmarc@marketing.incLater move to:
p=quarantinethen eventually:
p=rejectCheck:
2. Your Domain Is New
If marketing.inc is newly purchased:
Gmail distrusts it initially
Microsoft especially distrusts new domains
Low sending reputation
Fix
Warm up the domain gradually.
Do NOT:
send bulk emails immediately
send hundreds at once
send identical messages
Instead:
start with 10–20/day
slowly increase
ensure recipients open/reply
3. Using Shared SMTP Providers With Poor Reputation
If using:
cheap SMTP relays
shared cPanel mail
unknown VPS mail servers
their IP reputation may already be bad.
Better Providers
Use reputable transactional providers:
For app/system emails, Postmark and SES are especially good.
4. Your Server IP Has Bad Reputation
If you self-host SMTP:
VPS IP may be blacklisted
reverse DNS may be missing
HELO hostname mismatch
Check:
5. No Reverse DNS (PTR Record)
Huge issue for self-hosted mail.
Your mail server IP must resolve back to a hostname.
Example:
IP -> mail.marketing.incand:
mail.marketing.inc -> same IPWithout this:
Microsoft junk filters trigger instantly
Gmail distrust increases
6. Content Looks Spammy
Common triggers:
ALL CAPS
too many links
URL shorteners
“Click here urgently”
too many images
no plain-text version
attachment-heavy emails
7. Sending HTML-Only Emails
Always send:
HTML version
plain-text alternative
Most email libraries support multipart emails.
Example in NodeMailer:
await transporter.sendMail({
from: 'support@marketing.inc',
to: user.email,
subject: 'Welcome',
text: 'Welcome to our platform',
html: '<h1>Welcome</h1>'
});8. Missing List-Unsubscribe Header
For bulk/system emails, Gmail likes this.
Example:
List-Unsubscribe: <mailto:unsubscribe@marketing.inc>9. Low Engagement
If users:
never open
delete immediately
mark spam
your reputation worsens.
Especially bad if:
you imported old email lists
users didn’t opt in
10. Your .inc TLD Could Be Treated More Strictly
Some newer TLDs (.xyz, .online, .inc, etc.) get more scrutiny than:
.com.org.net
Not necessarily bad, but authentication becomes even more important.
What I Recommend for Your Case
Since you’re building production apps and sending transactional emails:
Best Setup
Use:
Configure:
SPF
DKIM
DMARC
custom tracking domain
Verify:
reverse DNS
domain reputation
Test Deliverability
Use:
This gives:
spam score
SPF status
DKIM status
blacklist checks
HTML issues
Fastest Way To Diagnose
Send a test email to:
Gmail
Outlook
Yahoo
Then inspect:
“Show original” in Gmail
Authentication results
You want:
SPF: PASS
DKIM: PASS
DMARC: PASSIf even one fails, that’s usually the issue.
For Your Node.js Apps
If you tell me:
which email provider you use
whether SMTP is self-hosted or third-party
your DNS provider (Cloudflare, GoDaddy, Route53, etc.)
I can tell you exactly:
which DNS records to add
how to verify them
how to improve inbox delivery
how to set up production-grade transactional email properly.