github nicholas-fedor/shoutrrr v0.24.0

one hour ago

What's Changed

Shoutrrr v0.24.0 adds Pushover emergency priority, OAuth2 client credentials for SMTP, and Jira Service Management support for OpsGenie URLs. It also checks service URLs and configs more strictly, so more mistakes fail before anything is sent.

Pushover

  • A URL with priority=2 now sends an emergency notification. Pushover repeats it every 15 minutes for an hour until someone acknowledges it. The new retry and expire keys change those durations. Earlier releases sent priority 2 at normal priority.
  • A priority outside -2 to 2 is rejected, and a send with an empty message fails before the request.

SMTP

  • The new scopes key gets access tokens with the OAuth2 client credentials grant, using clientid, clientsecret, and tokenurl without a refresh token. This is the app-only sign-in Microsoft 365 offers before Exchange Online turns off Basic auth for SMTP AUTH at the end of December 2026. The new Microsoft 365 email guide walks through both OAuth2 methods.
  • A config built in code that leaves Auth or Encryption unset now infers the auth method and uses Auto encryption, as a URL without those keys does. The Auth* and Enc* constants keep their names but have new numeric values, which matters only to code that stores the numbers.

OpsGenie

  • A URL with the host api.atlassian.com sends to Jira Service Management's alert API. Atlassian ends OpsGenie support on April 5, 2027, and the OpsGenie page explains the move. Every other host keeps sending to OpsGenie.
  • A priority outside P1 to P5 is rejected, and a lower-case priority is sent in upper case.
  • A visibleTo entry that is not a team or a user fails when the URL is read.
  • A send with neither a title nor a message fails before the request.

Teams

  • The webhook URL is checked when the service URL is read, so shoutrrr verify reports a bad one.
  • The webhook URL must be an https Power Automate or Azure Logic Apps workflow URL with a sig signature. Retired webhook.office.com connector URLs, unsigned URLs, and logic.azure.de URLs are rejected.
  • Unknown query keys are rejected. A webhook URL that is not percent-encoded in host now fails instead of losing its signature.

MQTT

  • disabletls alone decides TLS, and the URL scheme only sets its default. mqtt://...?disabletls=no connects with TLS, and mqtts://...?disabletls=yes connects in plaintext, to port 1883 when the URL has no port.
  • A config built in code uses TLS on port 8883 unless DisableTLS is set.

Matrix

  • A rooms send param without # or ! gets the # prefix, as a room in the URL does.
  • A room ID without the ! prefix fails its send.
  • A homeserver given as an IPv6 address with port 443 or 80 written out registers one new device on its next login.

URL Validation

Service URLs that break these rules are now rejected when they are read.

  • Bark, Generic, Google Chat, Gotify, Matrix, and Mattermost reject an unbracketed IPv6 host, a port without a host, and a port outside 1 to 65535.
  • ntfy, PagerDuty, Rocket.Chat, Signal, and XMPP reject a port outside 1 to 65535, including :0.
  • A token or ID that is sent as one path segment can't be . or .. or contain /. This covers the Discord token, the Rocket.Chat tokens, the IFTTT webhook ID and event names, the Notifiarr API key, and the Mattermost token.
  • The server paths of Bark, Gotify, Google Chat, and Home Assistant and the ntfy topic can't contain a . or .. segment.
  • Notifiarr rejects query keys that are not Notifiarr settings, in service URLs and custom webhook URLs.

Lists

  • Empty elements are dropped from every list setting, so a, reads as a. Twilio no longer texts an empty number, and a Pushbullet URL ending in / no longer pushes to every device as well.

Send Checks

  • A config built in code with an undefined enum value fails before any request. This covers the ntfy priority, the Telegram parse mode, the Signalgrid type, the Signal text mode, the SMTP auth method and encryption, and the MQTT QoS.

Commits

Features

Fixes

Dependency Updates

  • fix(deps): update module github.com/spf13/pflag to v1.1.0 by @renovate[bot] in #2083
  • chore(deps): update module golang.org/x/sync to v0.25.0 by @renovate[bot] in #2095
  • fix(deps): update module golang.org/x/oauth2 to v0.38.0 by @renovate[bot] in #2096
  • chore(deps): update module golang.org/x/mod to v0.43.0 by @renovate[bot] in #2103
  • chore(deps): update module golang.org/x/text to v0.44.0 by @renovate[bot] in #2104
  • fix(deps): update module golang.org/x/sys to v0.50.0 by @renovate[bot] in #2108
  • fix(deps): update module golang.org/x/term to v0.48.0 by @renovate[bot] in #2109
  • chore(deps): update go toolchain directive to v1.27.4 by @renovate[bot] in #2149
  • chore(deps): update module golang.org/x/crypto to v0.59.0 by @renovate[bot] in #2167

Full Changelog: v0.23.0...v0.24.0

Don't miss a new shoutrrr release

NewReleases is sending notifications on new releases.