Skip to content

v1.2.0 — Tools, not just a relay

Choose a tag to compare

@msgwing msgwing released this 11 Aug 20:37
· 216 commits to main since this release
71de0d0

Microsoft disables Basic authentication for SMTP AUTH by default at the end of December 2026. This release is about the parts of that problem which are not "point the device somewhere else".

New tools

Find-SmtpAuthExposure.ps1 — read-only audit of your own tenant. Reports every mailbox that can still authenticate with SMTP AUTH.

It exists because the advice everyone repeats is wrong. SmtpClientAuthenticationDisabled is tri-state, and $null means inherit the tenant setting. Filtering on -eq $false, which is what the usual one-liner does, silently misses every inherited mailbox — so on a tenant nobody has locked down it can report zero while every mailbox is exposed. This counts all three states and reports the inherited ones separately.

Read-only by design: it changes nothing, so it can be run against production before any decision is made. Exit code carries the finding for scheduled use, and -CsvPath exports the list.

OAuth compatibility list — machine-readable, backed by data/devices.json. Vendors publish their advisories one at a time, as prose and PDFs; there was no single place to look up a model. Fourteen entries, and every one carries a link to the vendor's own statement — the build refuses an entry without evidence, because a compatibility list is only worth citing if each row can be checked. CI rejects the table drifting from its data.

Devices that will never get OAuth firmware — Konica Minolta marks a set of ineo models "N/A" in their own OAuth column, and points those owners at a different mail service rather than an update. That fact was buried in one table cell. If your model is on a list here, firmware is not a step you skipped; it does not exist.

SMTP AUTH error messages — what 535 5.7.139, SmtpClientAuthentication is disabled for the Tenant or for the Mailbox, 535 5.7.3 and Kyocera's send error 1102 actually mean, plus the four different causes and which are still reversible. Three of the four are, until the end of December 2026.

Decision guide

Every recommendation in the quick decision guide now has its own link, so you can send someone straight to the answer for their case. It also finally asks the question that matters most — whether your vendor shipped firmware for your exact model — and if the answer is yes, it tells you to apply it and stop reading.

Five new language examples — twenty in total, eighteen languages

Perl, C (libcurl), Dart, Elixir and Lua.

Thanks to @slegarraga for the Elixir, Lua and Dart examples, and to @kevinbytnar for the Canon Maxify MB2755 report — a hardware-confirmed certificate quirk that no datasheet would have told us about.

Also

Documentation moved to docs.msgwing.com with a live countdown, a printer brand picker, and per-brand setup for ten manufacturers.

Want to help?

There are five open issues tagged good first issue — an Ansible playbook, a Docker Compose example, Zig, a German translation, and device reports from people holding the actual hardware. That last one is the most valuable and the least glamorous.