Email authentication · SPF · DKIM · DMARC · EU
Invoices not arriving, quotes unanswered, Gmail and Outlook quietly filing you under junk. The cause is usually SPF, DKIM or DMARC set up wrong — by a web person, on a Friday, from a paragraph in a handover document. Nobody checked it afterwards. We do, we fix it, and we keep checking.
Fix my domain — from €49 Check one domain, freeWritten reply, same day. Fix delivered within 24 hours. No calls, no demo, no signup.
The fix · fixed price · 24 hours
Every tier ends the same way: the records written out exactly as they must be published, a before/after check from the authoritative nameservers, and a written explanation of what was wrong. You paste the records, or your web person does, and we verify. We never ask for your DNS login.
| Tier | What you get | Price |
|---|---|---|
| Basic one domain · one sender |
SPF, DKIM and DMARC set up or repaired for one domain and one sending platform (Google Workspace, Microsoft 365, or one email service). Records delivered within 24 hours, verified after you publish them. Written explanation included. | €49one domain 24-hour delivery Order Basic |
| Standard one domain · every sender |
Everything in Basic, for every source that sends as your domain — mailbox, CRM,
newsletter tool, transactional service (SES, Resend, SendGrid…), website forms — all
aligned. DMARC moved from p=none to a policy that actually protects you,
with reporting switched on. One written report of what was wrong and what we changed. |
€119one domain 48-hour delivery Order Standard |
| Premium up to 5 domains · or an agency |
Standard, for up to five domains — yours, or your clients' under your name. Then 30 days of us reading the DMARC reports as they arrive, with one follow-up fix for whatever they reveal. Reports go to you, white-label if you want them that way. | €249up to 5 domains + 30 days of reading Order Premium |
After the fix, most people want someone to keep watching. That is the monitoring line in the price list: €29 per domain per month, and we read the reports — you do not.
Order Basic — €49 Order Standard — €119 Order Premium — €249Card or bank payment through Stripe; VAT handled at checkout (EU VAT ID → reverse charge). Work starts the moment it is paid — you type in the domain, we do the rest. Not sure which tier? Email the domain and we tell you.
Why it breaks
Odoo's own documentation tells the customer to add its include to the SPF record they already have, and warns them in writing:
"If the domain name already has an SPF record, the record must be updated. Do not create a new one, as a domain must have only one SPF record."
— Odoo 19.0 documentation, Configure DNS records to send emails
So the person doing it adds a second record instead of editing the first. Both records
now exist. Under RFC 7208
§4.5 the receiver does not pick the stricter one, or the first one — SPF is discarded
for the domain entirely, and reported as permerror.
Nothing bounces. Nobody gets an error. Mail keeps flowing on DKIM alone until a receiver somewhere decides it doesn't like the sender, and then a client rings you, because as far as they are concerned the ERP is the thing that changed.
The same mistake appears without an ERP anywhere near it — most often as a leftover from a domain migration, one record added beside another instead of replacing it. We find it on implementation partners' own domains, not only their clients': two records sitting there while the DMARC reports record it daily into a mailbox nobody opens.
A real one · 8 September 2026
This is a domain belonging to one of our own companies, so we can show it without asking anyone. Three mailboxes on Google Workspace. Every message they sent was landing in spam, including mail to our other company next door. The cause was not Google and not the content: the domain had lapsed at the registrar for a while, and when it came back the registrar had put its stock DNS template on it — no SPF, no DKIM, and a DMARC record that says quarantine anything that fails. Which was everything.
Here is what the receiving Gmail server wrote on a message sent the evening before the fix. Nothing here is our tool's opinion; it is Google's:
# Authentication-Results, mx.google.com — BEFORE
spf=none (kruno@… does not designate permitted sender hosts)
dkim=pass header.i=@mstv-ch.20251104.gappssmtp.com ← Google's fallback domain, not ours: unaligned
dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=QUARANTINE)
The fix was three records at the registrar — an SPF record naming Google, a DMARC record with a reporting address that is actually read, and a 2048-bit DKIM key generated in the Google Admin console — then waiting out the resolvers' negative cache and switching DKIM signing on. Same sender, same recipient, next morning:
# Authentication-Results, mx.google.com — AFTER
spf=pass (domain of kruno@… designates 209.85.220.41 as permitted sender)
dkim=pass header.i=@mstv.ch header.s=google ← signed as the domain itself: aligned
dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE)
Delivered to the inbox. This is the Basic tier, exactly as sold: one domain, one sending platform, fixed inside a day, verified from the receiving side rather than from a checker that would have said "looks fine" the moment the records were typed in. The one thing we would add for a paying client that we did not do here is monitoring — because a domain whose registration lapsed once will do it again, and the next lapse puts the template back.
What we actually check
No mailbox access. No credentials. No data processing agreement to negotiate before anyone can start. Everything below is readable from outside, which is exactly why it is also readable by whoever is deciding whether to trust your client's mail.
all mechanism ends itrua= points anywhere realodoo selector. It is the selector Odoo's documentation
tells customers to publish, and a generic checker has no reason to know that. On a
domain behind an ERP go-live it is the one that decides whether the thing worked.What we do not do
You can buy a DMARC platform for about $18 per domain per month. It is good software. It parses the XML, draws the graphs, and waits for you to log in.
The problem was never the parsing. It is that reading the reports, deciding which of
a client's four sending sources is a forgotten mailing tool and which is the invoicing
system, and judging when it is safe to move a live domain to p=reject — that
is an hour a week per client that an ERP consultant is never going to spend. So the login
goes unused and the domain sits at p=none forever, collecting evidence nobody
reads.
We are the hour. Not the dashboard.
If you need those, EasyDMARC and dmarcian both sell them properly and we will say so. If you already own one of them, better — you have paid for the data and are not using it. We will read yours.
How you can tell whether we are any good
Anyone can publish a list of checks. The thing worth knowing about a diagnostic is what it does when it is mistaken, so here are three occasions ours was — all caught before a word of it reached the domain's owner.
A domain published MX 0 . — a null MX record, which under
RFC 7505 is a deliberate
statement that the domain accepts no mail. Our tool reported it as critical: no mail
routing. It was the most correct configuration on the whole domain. Fixed, and it now
says so.
It probed selectors for TXT records only. Microsoft 365, SendGrid, Mailchimp and SES all have you publish a CNAME that points into their zone, so the key lives at the other end. Every domain using them was being reported as unsigned. That is a confident wrong answer about somebody else's mail, which is worse than saying nothing.
Following the CNAME, it found a selector with no key behind it and called the signatures broken. They were not. Providers publish selectors in pairs and populate whichever one they are currently signing with; an empty second selector is the normal resting state of a rotation. It is now reported as an observation, not a fault.
There is a fourth category, and it is the one that matters most: a lookup that fails is not a record that is absent. Timeouts, SERVFAILs and unreachable nameservers are reported as could not be determined and never as missing. A checker that collapses those two will eventually tell you a DMARC record is gone when it is merely unreachable — and the natural response, publishing a second copy, is how domains end up with exactly the duplicate-record problem at the top of this page.
Our reports carry a section headed What we could not determine. If it is empty we say so. It is usually not empty.
How it runs
For a single fix the sequence is short: you email the domain, we reply with a payment link and three questions (which platforms send as this domain, who can edit DNS, and where DMARC reports should go), the records arrive within the tier's delivery time, and we verify once they are published. For implementation partners it runs like this:
p=none
to p=reject over six to eight weeks — find every legitimate sender, authorise
them, move the policy in stages, and sign it off.Everything arrives as a written document. Reports go to you, in your name if you want them that way; whether your client ever hears our name is your decision, not ours.
Price
Euro, excluding VAT, invoiced from Croatia with an EU VAT ID. Payment by card through Stripe. No minimum term on monitoring and no setup fee.
| What | What you get | Price |
|---|---|---|
| First domain check | One domain, fully checked, written up. So you can judge the work before paying for any of it. The check only — the records to publish come with a tier below. | Freeonce per company |
| Basic fix | One domain, one sending platform. SPF, DKIM, DMARC written and verified. 24 hours. | €49per domain Order |
| Standard fix | One domain, every sender aligned, DMARC at a real policy with reporting on, written report. 48 hours. | €119per domain Order |
| Premium fix | Standard for up to five domains, plus 30 days of report reading and one follow-up fix. White-label on request. | €249up to 5 domains Order |
| What | What you get | Price |
|---|---|---|
| Monthly monitoring | The domain re-checked monthly, DMARC reports read, one findings-only document to you. If nothing changed, it says so in one line. Cancel any month. | €29per domain / month |
| Agency monitoring | The same, for up to ten client domains under your name, one document a month covering all of them. €9 per extra domain. | €99per month up to 10 domains |
| Enforcement project | One domain from p=none to p=reject. Fixed price, 6–8
weeks, signed off. |
€1,200per domain |
| What | What you get | Price |
|---|---|---|
| Go-live check | Before handover, and again 30 days later. Two checks, two documents, per client domain. | €150per domain |
| Estate audit | Your whole client list checked once and ranked by severity, worst first, in one document. | €40per domain minimum €400 |
| Something is on fire | "Our invoices are going to spam." Diagnosis from headers, bounce logs and DNS, with a written cause, when it is more than DNS. | €90per hour |
Yes, monitoring costs more per domain than a DMARC platform licence. A licence gives you the data. This gives you the reading of it, which is the part that was never the software's job.
Who you would be dealing with
HELO is a service of VSN j.d.o.o., a software company in Osijek, Croatia. It is small. The person who answers your email is the person who runs the checks and writes the reports, and on a larger piece of work a collaborator joins — named, and told to you in advance.
We have no certifications in this, no logos to show you, and no testimonials, because we
would have to invent them. What we have instead is a tool you can watch being wrong, a
method you can reproduce with dig, and reports that mark their own limits.
Judge it on the free domain.
Single SPF record. DKIM signing verified as aligned by two independent receivers — Google and Mimecast — in their own aggregate reports, not in a claim we made up. DMARC published with a reporting address that is read by a person.
This subdomain sends no mail at all, and says so properly:
# the site that sells email authentication, configured to prove it
helo.vsn.hr MX 0 . ← null MX, RFC 7505
helo.vsn.hr TXT "v=spf1 -all"
_dmarc.helo.vsn.hr TXT "v=DMARC1; p=reject; rua=mailto:office@vsn.hr"
Contact
Email office@vsn.hr with a domain name in it. That is the whole process. You will get a written reply the same working day, and the report within two. If you already know you want it fixed, say which tier — Basic, Standard or Premium — or order it directly from the fix section; work starts when it is paid.
We work in writing — email, or WhatsApp if you prefer. No discovery calls, no demos, no onboarding sequence. If a written answer is not enough for a decision, we have not written it well enough.
office@vsn.hr