Skip to content

docs(readme): document SMTP relay setup for e-mail alerts - #40

Merged
TimInTech merged 1 commit into
mainfrom
docs/readme-smtp-relay
Sep 20, 2026
Merged

TimInTech merged 1 commit into
mainfrom
docs/readme-smtp-relay

Conversation

@TimInTech

Copy link
Copy Markdown
Owner

Summary

The README explained HEALTH_MAIL_TO but not how to make a Proxmox host deliver mail at all — the part that actually blocks e-mail alerts at home. New subsection Relaying through an external SMTP provider under Health monitoring & alerts:

  • authentication with an app password, entered interactively so it never lands in a shell history (libsasl2-modules is not installed by default)
  • the full postconf -e block: SASL, smtp_tls_security_level = encrypt, envelope-sender rewriting, inet_protocols = ipv4
  • root: alias so Proxmox's own notifications take the same path
  • verification with pman --test-notify plus the journal line, including a screenshot of a real status=sent delivery (recipient redacted)
  • the three failures seen in practice: account password instead of app password (534 5.7.9), status=deferred / Network is unreachable without an IPv6 route, and the provider replacing the From header (use a plus address to filter)

Quick start step 1 links to the new section.

Verification

All steps were run on a PVE 9.2.20 node (Debian 13, postfix 3.10.13) before documenting them; pman --test-notify, a plain test mail and mail to root were each delivered with 250 2.0.0 OK.

  • markdownlint-cli2 README.md → 0 errors
  • screenshot contains no address, topic or credentials
  • CI green

🤖 Generated with Claude Code

Home servers usually cannot deliver mail directly. Adds a step-by-step
smarthost section: app-password authentication entered by the admin, the
postfix settings (SASL, TLS, envelope rewriting, IPv4), the root alias and a
verification with a real status=sent log line. Lists the failure modes seen in
practice: non-app password, deferred delivery without an IPv6 route, and the
provider rewriting the From header.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@TimInTech
TimInTech merged commit 770e679 into main Sep 20, 2026
5 checks passed
@TimInTech
TimInTech deleted the docs/readme-smtp-relay branch September 20, 2026 00:20

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a184084b79

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread README.md
"smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt" \
"sender_canonical_classes = envelope_sender" \
"sender_canonical_maps = regexp:/etc/postfix/sender_canonical" \
"inet_protocols = ipv4"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Apply the IPv4-only setting conditionally

On hosts with working IPv6, this recipe still sets inet_protocols = ipv4; after the subsequent restart, Postfix stops listening on IPv6 and no longer attempts IPv6 delivery, so existing clients configured to submit through ::1 or hosts receiving mail over IPv6 can break. Since the text identifies this only as a workaround for hosts without a usable IPv6 route, omit it from the baseline block and present it as a conditional troubleshooting step.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant