Stalwart closes a connection that exceeds its per-IP connection budget without a greeting. msmtp reports that as "the server sent an empty reply" with exit 76, and the mail health check treated exit 76 as permanent. One such drop, in a second in which Alertmanager flushed its notifications, failed a deploy although the same path accepted a mail one second later. The health check now retries exit 76 when msmtp names the empty reply, within the ten attempts it already gives to exit 69, 75 and 124. Every other protocol error still ends the check at once. The alarm mail was sent once, so the alarm about a failed unit was lost to the same drop. It now makes three attempts ten seconds apart for the transient cases of the health check and still reports the last error. The limit on the server is left alone. Exempting the node's own senders by source address would also exempt Tor clients and, in swarm, every external client. That question is tracked in #793. Closes #790 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
sys-ctl-hlth-msmtp
Description
This Ansible role sends periodic health check emails using msmtp to verify that your mail transport agent is operational. It deploys a simple script and hooks it into a systemd service and timer, with failure notifications sent via Telegram.
Overview
Optimized for Archlinux, this role creates the required directory structure, installs and configures the sys-ctl-hlth-check script, and integrates with the sys-ctl-alm-telegram role. It uses the sys-timer role to schedule regular checks based on your customizable OnCalendar setting.
Cosmos
The diagram places sys-ctl-hlth-msmtp in the Infinito.Nexus cosmos: the components it deploys (capabilities), the central services it consumes (dependencies), and its outward reach (federation and bridged external networks).
flowchart LR
subgraph role [sys-ctl-hlth-msmtp 💻]
svc_msmtp["msmtp"]
end
Solid 1:1 edges are fixed relationships; dashed 0..1 edges are conditional (enabled only in matching deployments); red 0..0 edges are turned off in this role. Node markers show the role's deploy modes (💻 host, 🐳 compose, 🐝 swarm); ❌ marks a service that is explicitly turned off, and ⚙️ an Ansible role dependency declared in meta/main.yml.
Purpose
The sys-ctl-hlth-msmtp role ensures that your mail transport system stays available by sending a test email at defined intervals. If the email fails, a Telegram alert is triggered, allowing you to detect and address issues before they impact users.
Features
- Directory & Script Deployment: Sets up
sys-ctl-hlth-msmtp/and deploys a templated Bash script to send test emails via msmtp. - Systemd Service & Timer: Provides
.serviceand.timerunits to run the check and schedule it automatically. - Failure Notifications: Leverages sys-ctl-alm-telegram to push alerts when the script exits with an error.
- Configurable Schedule: Define your desired check frequency using the
on_calendar_health_msmtpvariable. - Email Destination: Specify the recipient via the
lookup('users', 'administrator').emailvariable.
Credits
Implemented by Kevin Veen-Birkenbach. Part of the Infinito.Nexus Project and maintained by Kevin Veen-Birkenbach. Licensed under the Infinito.Nexus Community License (Non-Commercial).