Skip to content

Per-domain SMTP gateway tab in the domain details - #25

Open
gott-alexander wants to merge 11 commits into
grommunio:masterfrom
gott-alexander:feature/per-domain-smtp-gateway
Open

gott-alexander wants to merge 11 commits into
grommunio:masterfrom
gott-alexander:feature/per-domain-smtp-gateway

Conversation

@gott-alexander

Copy link
Copy Markdown

Summary

Adds an "SMTP gateway" tab to the domain details view, allowing
administrators to configure a per-domain outbound relay (smart-host):
host, port, encryption mode, credentials, description and an
enable/disable toggle.

Changes

  • src/containers/SmtpGateway.tsx (new): the gateway form. It is a
    controlled component that exposes its data buffer to the parent via an
    imperative handle (forwardRef/useImperativeHandle) — the same
    pattern as the "Disabled plugins" tab, so the domain details' existing
    Save button drives persistence and no separate save flow is introduced.
    The password field follows the common password-field UX: it is sent
    only when edited; leaving it empty keeps the stored password, and a
    passwordSet flag from the API indicates whether one is stored.
  • src/containers/DomainDetails.tsx: register the fourth tab and route
    the Save button to a PUT /api/v1/domains/<ID>/smtpGateway request
    when the tab is active; errors from the backend are surfaced through
    the existing snackbar.

Verification

Built and verified the production bundle contains the gateway tab; form
round-trip against the API (save, reload, password-keep behaviour,
backend validation errors shown on invalid input).

image

I deleted the wrong one while testing.

Alexander and others added 11 commits September 3, 2026 13:21
Adds a new 'SMTP gateway' tab to the domain details view that lets
admins configure the per-domain outbound SMTP server (smart-host)
without leaving the web UI.

Changes:

  * `src/containers/SmtpGateway.tsx` — new component that renders
    the form (host, port, encryption, username, password, from
    address, description) and uses the `useAPI` hook to talk to
    the new REST endpoint mounted by grommunio-admin-api. Password
    field is masked and only sent on save when populated.
  * `src/containers/DomainDetails.tsx` — fourth tab is rendered
    conditionally and a ref-based handle lets the parent page
    invoke `saveSmtpGateway` from the toolbar Save button, so the
    existing save flow keeps working.

Companion changes: grommunio/gromox#<PR> and
grommunio/admin-api#<PR>.
from_address is no longer consumed anywhere (smart-host routing is
handled by the MTA); the form field had no effect.
Fix the header comment that still described an onSave prop from an
earlier iteration (the component uses an imperative handle), and drop
the unused isValid() handle export.
@jengelh

jengelh commented Sep 15, 2026

Copy link
Copy Markdown
Member

That commit list needs clean-up. There should be no self-reverts and no merge objects.

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.

2 participants