{
  "version": "5.40",
  "released": "2026-07-27",
  "notes": "Email fixes. If you use a filter to forward mail to another address, it no longer silently discards your local copy — a forward that the receiving provider rejects used to be lost for good. Enabling DKIM signing now actually works: a bad directive in the generated OpenDKIM config stopped the signer from starting at all, so mail left unsigned, and this update repairs configs already broken that way. Auto-created SPF records now name your server's IP explicitly, and a DMARC record is published alongside them.",
  "details": "Sieve redirect rules emit `keep;` (RFC 5228 cancels the implicit keep on redirect, so forwarding filters delivered nothing to the mailbox); new mail_filters.keep_copy column, default 1, with an opt-out in vPanel. dkim_setup wrote `On-KeyLoss`, which is not a valid OpenDKIM parameter — OpenDKIM rejects the entire config on an unknown directive and exits 78, so the service never started; corrected to On-KeyNotFound and existing broken configs are now repaired in place. Auto-provisioned SPF is `v=spf1 ip4:<server> a mx ~all` in all paths that write or recommend it: `a` only matches the address family the A/AAAA records hold, so a host sending over IPv6 failed SPF while the record looked correct. smtp_address_preference=ipv4 is set at mail setup (guarded on a global IPv4 address existing). The deliverability page now resolves SPF mechanisms instead of string-matching them, checks reverse DNS by forward-confirmation rather than against a customer domain, and has been redesigned around a single top-level verdict. The worker is installed 0700 rather than 0755. v5.40 additionally corrects an undefined variable in the Email page's DNS hint, which made the SPF example show a placeholder instead of the server's address.",
  "url": "https://get.vantapanel.com/packages/vantapanel-5.40.zip",
  "sha256": "2f5c29e16341c0e7efcb771c62c49ec79e2c5230f5c7ca956899aa21e33c3d4a",
  "sig": "wGBEVfXL3suzPldjNqGT0E+6TIQlbM10IznhN31yecDgXVlsoSg+eTdPYgep4uAYYGsyUMjFX4vMPn7E7PAfBQ=="
}