Files
kumomta/docs/reference/events/smtp_server_message_received.md
T
Wez Furlong 5f19f7ce04 add deferred_queue option to the smtp listener
This option should be used with caution, and ideally only
for trusted networks.

The purpose is to absorb the latency of post-DATA processing
and hide it from the trust injector.

It defers processing that would normally happen in smtp_server_message_received
and instead will, at some (ideally) near-future time trigger an
smtp_server_message_deferred_inject event instead.

This will marginally increase your average injection latency but should
clamp your worst case injection latency much lower because the outliers
will not happen inline with the injecting client.
2024-12-16 11:27:40 -07:00

1.5 KiB

kumo.on('smtp_server_message_received', function(message, conn_meta))

Called by the ESMTP server after receiving the message data, but before responding to the client in the live SMTP session.

If the client issued multiple "RCPT TO" commands in the same transaction, each one will result in a separate message being created, and this event will be triggered for each of them.

The event handler will be passed a Message object. The Message will always have a Received header prepended that captures trace information about the sender.

{{since('2023.08.22-4d895015', indent=True)}} The conn_meta parameter represents the connection metadata and can be used to share state between the various SMTP listener event handlers. See Connection Metadata for more information.

This event is the best place to carry out a number of important policy decisions:

-- Called once the body has been received.
-- For multi-recipient mail, this is called for each recipient.
kumo.on('smtp_server_message_received', function(msg)
  local signer = kumo.dkim.rsa_sha256_signer {
    domain = msg:from_header().domain,
    selector = 'default',
    headers = { 'From', 'To', 'Subject' },
    key = 'example-private-dkim-key.pem',
  }
  msg:dkim_sign(signer)
end)