NetSendo
Platform Updates

NetSendo v2.8.0: Smarter Deliverability & Free GOLD

NetSendo Team7 min read

Mail that never reaches the inbox earns nothing. Often the cause is a DNS record that is almost right: a DKIM selector the checker never tried, an SPF record that dropped your CRM, or a DMARC policy so strict that it rejects your own subdomains. Send times can drift in a similar way when the message, the list and the account each use a different timezone.

NetSendo v2.8.0 fixes these problems. This release reworks the Deliverability Shield, applies one timezone order to every message, translates the rest of the panel and opens a new contributor programme. If you contribute code or report a security issue, you can earn a free NetSendo GOLD licence.

TL;DR: v2.8.0 has five main changes:
  • Contributor programme: merged contributions earn points, and points earn a free GOLD licence.
  • DKIM selectors: you can enter a custom selector, which Amazon SES needs.
  • Safer generators: the SPF generator keeps your current record, and the DMARC generator starts at p=none.
  • One timezone rule: every send time follows Message โ†’ List โ†’ Group โ†’ User Account.
  • Fixes: many bugs are fixed, including sales funnel thank-you pages, webhook URLs and Reverb security.

๐Ÿš€ What's New in v2.8.0

GOLD for Contributors

NetSendo now gives something back to the people who improve it. Maintainers label a merged pull request reward (1 point) or reward-large (3 points). A confirmed vulnerability reported through SECURITY.md also counts as 3 points.

  • โœ… 1st point: 12 months of GOLD
  • โœ… 2nd point: 12 more months
  • โœ… 3rd point: GOLD with no end date

Contributions merged before the programme started count too. To claim your licence:

  1. Email contact@netsendo.com. You'll get a one-time code within minutes.
  2. Post the code as a comment on GitHub to confirm your account.
  3. You'll then receive your licence key. Any points you earn later extend the licence automatically.

A new Contributor reward workflow comments on rewarded pull requests. It runs safely on pull_request_target and never checks out the pull request's code. The EULA has a new ยง5.7, "Complimentary GOLD Licence", which sets the terms. The licence covers one installation and is personal. It is a thank-you, not payment, and it does not include the GOLD support described in ยง12.3 unless the grant says otherwise.

Deliverability Shield, Rebuilt

๐Ÿ”‘

Custom DKIM Selector

Amazon SES Easy DKIM uses token selectors that the check cannot guess. You can now enter the token, or paste the full token._domainkey.example.com name, and the check looks it up first.

๐Ÿ›ก๏ธ

Safer DMARC

The generator starts with p=none and suggests quarantine and then reject as next steps. It uses relaxed alignment and keeps your existing rua address.

๐Ÿ“œ

SPF That Keeps Your Senders

The generator now adds the includes your providers need to your current record instead of replacing it.

๐ŸŸข

Badges That Turn Green

Status badges now show the real result. Before this release, they compared against a value the check never stored.

A typical record from the new DMARC generator looks like this:

_dmarc.example.com  TXT  "v=DMARC1; p=none; rua=mailto:dmarc@example.com"

The old generator used strict alignment (adkim=s; aspf=s). That broke mail sent from subdomains and through relays that sign with a parent domain.

The SPF generator now recognises SMTP relays by their host: Amazon SES, SendGrid, Google Workspace, Microsoft 365 and Mailgun. If it doesn't recognise the server and the domain has no SPF record, it asks you for the provider's include instead of guessing one.

Several other Deliverability Shield bugs are fixed:

  • The published DMARC policy is now stored. Before, a domain with p=reject was shown and scored as p=none.
  • DKIM records without the optional v=DKIM1 tag are now recognised.
  • The common selectors of Microsoft 365, Google, Mailchimp and SendGrid are now tried automatically.

One Timezone Rule for Every Message

Every time in a message now follows the same order: Message โ†’ List โ†’ Group โ†’ User Account. Think of it as a chain of command: the most specific setting wins.

Before this release, the Pick a time option of queue messages was read in UTC, and scheduled broadcasts ignored list and group timezones. Both now use Message::resolveTimezone(). If a message has several lists, the list with the lowest ID decides.

Gmail Reply Detection Help

If your reply inbox is on Gmail, the panel now shows the settings Gmail needs: imap.gmail.com, port 993, SSL and your full email address as the user. It also reminds you that Gmail needs an app password here, not your Google account password. A Fill in Gmail settings button enters these values for you.

A/B Test Update API

PUT/PATCH /api/v1/ab-tests/{id} now works for draft tests. Before this release, every call returned a 500 error. A running or finished test returns 409.

curl -X PATCH https://your-netsendo.com/api/v1/ab-tests/42 \
  -H "Authorization: Bearer $NETSENDO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Subject line test โ€“ v2"}'

๐Ÿ’ผ Benefits & Use Cases

๐Ÿ›’

E-commerce: Paid Funnels That Finish

After paying through Stripe, Polar or Tpay, buyers in a sales funnel used to see a 404 page instead of your thank-you page. Now they reach the right page, so your post-purchase sequences start as planned.

๐Ÿš€

SaaS: Onboarding at the Right Hour

Onboarding emails set to 09:00 now arrive at 09:00 in the list's or account's timezone, not in UTC. If you send through Amazon SES, you can enter your token selector and finally see DKIM pass.

๐Ÿข

Agencies: Multi-Language, Multi-Client

Validation errors, login messages and about 140 backend messages now appear in English, Polish, German or Spanish. Your clients no longer see raw keys like polar.settings_saved. Each new account's default lead scoring rules are also named in the owner's language.

๐Ÿ› ๏ธ Step-by-Step Upgrade Guide

  1. Back up and pull

    Run docker compose pull && docker compose up -d. Three migrations run automatically: dkim_selector, webhooks.url widened to 2,048 characters, and the renaming of the lead scoring rules.

  2. Review queue send times

    Subscribers who sign up after the update get the Pick a time hour in the message's timezone. For example, with an account in Europe/Warsaw, 09:00 now means 09:00 Warsaw time. If you had set the hour in UTC on purpose, set it again in your timezone or give the message the UTC timezone.

  3. Add DKIM selectors

    Open Deliverability Shield โ†’ domain, paste your provider's selector and run the check again.

  4. Secure Reverb

    Installations from 2.7.2 or older still use the public example keys. Replace them:

    openssl rand -hex 16   # use for REVERB_APP_KEY
    openssl rand -hex 16   # use for REVERB_APP_SECRET
    docker compose up -d

    If a reverse proxy forwards /app/ to Reverb, also set REVERB_BIND_ADDRESS=127.0.0.1 using the new docker-compose.yml.

โš ๏ธ Important: Broadcasts that are already scheduled keep their stored time. But if you open and save one, its date is read in the new timezone, so check it before you save.

๐Ÿ”ง Other Fixes

  • You can now enter a GOLD licence key while SILVER is active.
  • Upgrade to GOLD no longer stays locked for 72 hours after you close the order tab, and you can cancel a started purchase.
  • The public activation webhook can no longer downgrade GOLD to SILVER; such a request now returns 409.
  • A GOLD licence changed on the server to have no end date no longer expires locally on the old date.
  • The default mailbox you choose when creating a list is now saved, and only mailboxes from your own account are accepted.
  • Webhook URLs can be up to 2,048 characters. Before, longer URLs caused a 500 error on MySQL. Switching a webhook back on resets its failure count.
  • DOCKER_INSTALL.md has corrected backup commands, and README.md now gives the right install port, 5029.

๐ŸŽฏ Expert Tips

1
Move up the DMARC policy one step at a time

Stay on p=none for 2โ€“4 weeks and read your rua reports. Move to quarantine only when every legitimate sender passes.

2
Set timezones on lists

Set a timezone on each list or group, especially for regional lists, so that every message inherits the right one.

3
Keep Reverb off the public interface

Bind Reverb to 127.0.0.1 behind your proxy and use REVERB_HOST_PORT if its default port conflicts with another service.

4
Report vulnerabilities responsibly

A confirmed report through SECURITY.md is worth 3 points, which is enough for GOLD with no end date.

โœ… Conclusion

v2.8.0 brings more reliable deliverability checks, predictable send times and a fully translated panel. The full test suite (729 tests) passes. The new contributor programme also lets you earn a free GOLD licence by improving the self-hosted platform you already rely on. You keep your data and your sending infrastructure, with no vendor lock-in.

Ready to Upgrade?

Update your Docker installation today, or contribute and earn GOLD.

Check out our integrations to connect Stripe, Polar, Tpay and more.

#release#deliverability#dkim#dmarc#spf#timezones#open-source
Share