Skip to content

Submission configuration

Yarilo runs two submission listeners. MX inbound (port 25) is handled by an external MTA (Postfix, Exim, etc.) which delivers to yarilo via LMTP (port 24).

Service keyPortRole
submission587Outbound submission — AUTH PLAIN required, STARTTLS.
submissions465Outbound submission — AUTH PLAIN required, implicit TLS.

See SERVICES.md for listener-level settings (port, ssl_mode, haproxy_protocol, auth_allow_cleartext).


protocol.submission

Protocol-level behaviour shared across both submission listeners.

KeyDefaultDescription
hostnamesystem hostnameEHLO/HELO banner and Message-ID domain.
submission_max_mail_size41943040Maximum accepted message size in bytes (default 40 MiB).
max_line_length4096Maximum SMTP command or DATA line length in bytes.
submission_max_recipients0Maximum recipients per message. 0 = unlimited.
recipient_delimiter+Subaddress separator: user+tag@domainuser@domain. Empty = disabled.
submission_add_received_headertruePrepend a Received: trace header to messages before forwarding. Set to false to suppress (the reference parity — protects sender identity).
yaml
protocol:
  submission:
    hostname: mail.example.com
    submission_max_mail_size: 41943040
    max_line_length: 4096
    submission_max_recipients: 100
    recipient_delimiter: "+"
    submission_add_received_header: true

Submission (port 587 / 465)

Accepts mail from MUAs. AUTH PLAIN is required (the only advertised mechanism). After successful authentication and DATA, the message is forwarded to the configured upstream MTA via protocol.submission.relay. If submission_relay_host is empty, submission returns 451.

auth_allow_cleartext: false in the service config blocks AUTH on unencrypted connections; pair it with ssl_mode: starttls (port 587) or ssl_mode: ssl (port 465).


Relay (protocol.submission.relay)

Configures the upstream MTA for submission. One TCP connection per message; any transport error returns 451 4.4.0 to the MUA.

KeyDefaultDescription
submission_relay_hostUpstream MTA hostname or IP. Empty = relay disabled, submission returns 451.
submission_relay_port25Upstream MTA port.
submission_relay_userSASL PLAIN username sent to upstream. Empty = no AUTH.
submission_relay_passwordSASL PLAIN password. Supports ${ENV_VAR}.
submission_relay_sslnoTransport security to upstream: no | starttls | smtps.
submission_relay_ssl_verifytrueVerify upstream TLS certificate.
submission_relay_trustedfalseSend XCLIENT to upstream with the MUA's real IP (requires upstream to advertise XCLIENT).
submission_relay_connect_timeout30TCP connect timeout in seconds.
submission_relay_command_timeout300Per-command timeout in seconds.
yaml
protocol:
  submission:
    relay:
      host: smtp.example.com
      port: 587
      user: relay-user
      password: "${RELAY_PASSWORD}"
      ssl: starttls
      ssl_verify: true
      trusted: false
      connect_timeout: 30
      command_timeout: 300