Beta . Ortha CMS is in public beta. Every plan is free until it ends.
Features Ortha CMS on GitHub

Console

Mail plugin @orthacms/mail-server

Messages printed to the log, for reading an invite link on your own machine.

Documents 0.13.1 Updated Edit this page Report a problem

On this page

Prints every message to the log instead of sending it. The queue, worker, retries and the API’s changed responses all behave as in a deployment.

  • Identifies itself as console.
  • Capabilities { messageId: false, verifiable: false }: no boot check.

Turn it on

Reference server (the Ortha CMS monorepo):

# .env
MAIL_PROVIDER=console
APP_URL=http://localhost:4200
MAIL_FROM="Ortha CMS <dev@localhost>"

Generated app — its config/mail.ts accepts smtp only, so register it by hand for local work:

npm install @orthacms/mail-provider-console
// apps/server/src/plugins.ts — development only
import { createConsoleMailProvider } from '@orthacms/mail-provider-console';

MailServerPlugin({
    provider: createConsoleMailProvider(),
    config: {
        appUrl: 'http://localhost:4200',
        from: 'Ortha CMS <dev@localhost>'
    }
});

Options: { sink?, includeBody? }. sink defaults to console.info; includeBody defaults to true.

createConsoleMailProvider({ sink: (line) => logger.debug(line), includeBody: true });

Verify

Boot log:

LOG [MailProviderCheck] Mail is enabled through the "console" provider, which declares no boot check.

Invite someone (curl example). Within deliveryIntervalMs (2 s) the log shows:

--- mail (console provider) ---
To:      editor@example.com
Subject: You have been invited to Ortha CMS
X-Orthacms-Mail-Kind: invite

Hello,
Ada Lovelace has invited you to Ortha CMS.
Follow the link below to accept the invitation and choose a password.
The link expires on 7 October 2026 at 09:14 (UTC).
If you were not expecting this invitation you can ignore this message.

http://localhost:4200/identity/accept-invite?token=…
---

Never in a deployment

With a backend configured the API stops returning the link. A deployment on this adapter reports invitations as sent and delivers them to nobody. No picker offers it and no template registers it.

Console, or no mail at all?

  • Unset MAIL_PROVIDER is simpler for everyday development: the invite response carries inviteToken.
  • Console is for working on the mail path itself: template copy, the token-less responses, reveal-link.
  • For automated tests use testkit.