Skip to content

v0.28.0

Choose a tag to compare

@heliocosta-dev heliocosta-dev released this 28 Oct 23:25
· 18 commits to main since this release
ac1d548

MillionSend v0.28.0 dates every complaint by the day its email was sent, as SES dates its own complaint rate (#214).

Until now a complaint counted on the day it arrived, but it was divided by that day's sends. Recipients often report mail days later, so a late complaint about an earlier campaign could land on a quiet day. When it did:

  • the Metrics card read "0.00% · 1 of 0";
  • the 7-day rate read far above the rate of the mail it was about;
  • a team sending cleanly could be warned, have its broadcasts slowed or, at worst, be paused.

There is one database migration; see "Upgrading a self-hosted instance".

Complaint rates (#214)

These apply to self-hosted instances too.

  • Dated by send day. A complaint counts on the UTC day its email was sent. That covers the sending guardrail (warning and pause), the account score, GET /deliverability, the Metrics page and the console. Hard bounces keep the day they arrive.
  • The pause acts on fresh mail. Thresholds and windows are unchanged.
    • The pause (today and yesterday, UTC) now weighs complaints about those two days' mail.
    • The 7-day warning weighs complaints about the last seven days' mail.
    • A late complaint about older mail no longer starts or extends a pause.
  • The regional breaker counts the same way. Its 24-hour window and its 7-day estimate count complaints about mail sent in the window, as its per-team holds already did.
  • Free plan. A complaint counts in the shared Free record its email was sent under, even if the team has changed plan since.
  • Wording.
    • The banners, the sending_paused refusal (API 403, SMTP 451), the warning and paused emails, and the console say "on mail sent over the last N days".
    • The paused banner now says "Sending is paused", since a pause refuses every send, not only broadcasts.

Metrics page (#214)

  • No rate without sends. On the hard-bounce and complaint cards, a day with no sends shows its count with no rate, such as "1 complaint · nothing sent to inboxes that report spam", instead of "0.00% · 1 of 0".
  • Still arriving. Complaints keep coming for days after a send. So the complaint card draws its newest three days with sends lighter and marks them "complaints still arriving".
  • The main chart stays a timeline. Its Complained line still counts complaints on the day they arrive, and its tooltip now says "by arrival date".

Upgrading a self-hosted instance

This release has a database migration, unlike v0.27.0.

  • Upgrade: docker compose pull, then docker compose run --rm --no-deps millionsend migrate, then docker compose up -d. On Kubernetes, upgrade with --version 0.28.0. The migration also runs on start if you skip the separate step. It only reads the last 31 days of complaints, so it is quick even on a large instance.
  • Migration 0066 moves each complaint recorded in the last 31 days from the day it arrived to its email's send day.
    • A team's total stays the same and a complaint only moves earlier, so a team's standing can only improve.
    • A complaint keeps its day if its stored payload was already stripped or its email already purged.
    • The shared Free records are not moved. Their older entries age out of the 7-day window within a week.
  • Rolling back to v0.27.0 needs no extra step. v0.27.0 ignores the new event field, and moved complaints stay on their send day.
  • MX on a separate host (deploy/mx/docker-compose.yml): nothing it does changes in this release. To keep it on the app's version, set MILLIONSEND_TAG=0.28.0 there once the app runs this release, then pull and restart it.

Coming from v0.26.x? Also read the v0.27.0 notes for its content-monitor change. It has no migrations and no configuration changes.

Coming from v0.24.x or earlier? Read the v0.25.0 notes first. That release adds migrations 0063–0065; run them before up -d with docker compose run --rm --no-deps millionsend migrate.