<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.34 (Ruby 3.3.8) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-degennaro-mta-hooks-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="MTA Hooks">Mail Transfer Agent (MTA) Hooks: An HTTP-Based Protocol for External Mail Processing</title>

    <author initials="M." surname="De Gennaro" fullname="Mauro De Gennaro">
      <organization abbrev="Stalwart Labs">Stalwart Labs LLC</organization>
      <address>
        <postal>
          <street>1309 Coffeen Avenue, Suite 1200</street>
          <city>Sheridan</city>
          <region>WY</region>
          <code>82801</code>
          <country>United States of America</country>
        </postal>
        <email>mauro@stalw.art</email>
        <uri>https://stalw.art</uri>
      </address>
    </author>

    <date year="2026" month="October" day="28"/>

    
    
    <keyword>SMTP</keyword> <keyword>MTA</keyword> <keyword>mail filtering</keyword> <keyword>JSON Patch</keyword>

    <abstract>


<?line 112?>

<t>This document specifies MTA Hooks, an HTTP-based protocol that lets Mail Transfer Agents (MTAs) delegate message processing decisions to external services. The MTA sends a JSON or Concise Binary Object Representation (CBOR) description of the SMTP session, envelope, and message to a registered service at defined stages of reception and delivery. The service answers with a JSON Patch that changes the description, and the MTA acts on the resulting state. The same mechanism covers filtering at SMTP time, routing before delivery, and reacting to delivery outcomes, and the MTA controls exactly which changes each service may make.</t>



    </abstract>



  </front>

  <middle>


<?line 116?>

<section anchor="introduction"><name>Introduction</name>

<t>Mail Transfer Agents need extensible mechanisms to integrate external services for spam filtering, virus scanning, policy enforcement, routing, and compliance. Existing mechanisms each cover a part of the problem: content filter protocols such as Milter <xref target="MILTER"/> see only message reception, lookup tables receive a single key, and delivery outcomes are mostly recovered by parsing logs.</t>

<t>MTA Hooks covers the whole life of a message with one protocol. At each processing stage the MTA describes the current state as a single JavaScript Object Notation (JSON) <xref target="RFC8259"/> object: the SMTP session, the envelope with the status of every recipient, the message, and the delivery attempts. A scanner answers with a JSON Patch <xref target="RFC6902"/> against that object. Accepting, rejecting, adding a header, discarding a recipient, choosing a route, or suppressing a delivery status notification (DSN) <xref target="RFC3461"/> are all expressed the same way: as a change to the state.</t>

<t>The MTA decides which parts of the object each scanner may change, and by default a scanner may only make processing stricter. Making it more permissive, such as overriding a rejection or lowering a TLS requirement, has to be granted explicitly by the MTA operator.</t>

<t>The protocol uses ordinary HTTP <xref target="RFC9110"/>, so existing client and server libraries, load balancers, proxies, and monitoring systems work unchanged.</t>

<section anchor="notational-conventions"><name>Notational Conventions</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>MTA:</dt>
  <dd>
    <t>A Mail Transfer Agent as described in <xref target="RFC5321"/>.</t>
  </dd>
  <dt>Scanner:</dt>
  <dd>
    <t>An HTTP service that receives hook requests from an MTA and returns changes.</t>
  </dd>
  <dt>Registration:</dt>
  <dd>
    <t>The state, held by the scanner, that records which stages, properties, and changes an MTA has agreed to exchange with it.</t>
  </dd>
  <dt>Subscription:</dt>
  <dd>
    <t>A part of a registration that applies to the messages and stages matching its filter.</t>
  </dd>
  <dt>Stage:</dt>
  <dd>
    <t>A point in mail processing at which the MTA invokes scanners.</t>
  </dd>
  <dt>Hook request:</dt>
  <dd>
    <t>The object describing the current state that the MTA sends to a scanner.</t>
  </dd>
  <dt>Grant:</dt>
  <dd>
    <t>A permission, given by the MTA, to change a part of the hook request.</t>
  </dd>
  <dt>Property path:</dt>
  <dd>
    <t>A JSON Pointer <xref target="RFC6901"/> into the hook request, in which the reference token "*", used in place of an array index, matches any index.</t>
  </dd>
</dl>

</section>
<section anchor="data-types"><name>Data Types</name>

<dl>
  <dt>String:</dt>
  <dd>
    <t>A JSON string.</t>
  </dd>
  <dt>UnsignedInt:</dt>
  <dd>
    <t>An integer in the range 0 &lt;= value &lt;= 2^53-1.</t>
  </dd>
  <dt>Boolean:</dt>
  <dd>
    <t>A JSON boolean.</t>
  </dd>
  <dt>UTCDate:</dt>
  <dd>
    <t>A "date-time" string as defined in <xref target="RFC3339"/> whose time-offset is "Z".</t>
  </dd>
  <dt>Bytes:</dt>
  <dd>
    <t>Binary data. In JSON it is a base64 string (<xref section="4" sectionFormat="of" target="RFC4648"/>); in CBOR it is a byte string.</t>
  </dd>
</dl>

<t>A[] denotes an array of A, and String[A] denotes an object whose keys are strings and whose values are of type A. When sent, a property whose type includes null <bcp14>MAY</bcp14> be omitted, which is equivalent to null, and a property with a stated default <bcp14>MAY</bcp14> be omitted, which is equivalent to the default.</t>

</section>
</section>
<section anchor="protocol-overview"><name>Protocol Overview</name>

<section anchor="architecture"><name>Architecture</name>

<t>The MTA is always the HTTP client. It discovers a scanner, registers with it, and then sends it hook requests during mail processing. The MTA exposes no HTTP endpoint.</t>

<figure title="MTA Hooks Protocol Flow" anchor="fig-architecture"><artwork><![CDATA[
+-----+   GET /.well-known/mta-hooks          +---------+
|     |-------------------------------------->|         |
|     |   POST registration                   |         |
| MTA |-------------------------------------->| Scanner |
|     |   POST hook request                   |         |
|     |-------------------------------------->|         |
|     |<--------------------------------------|         |
+-----+   JSON Patch                          +---------+
]]></artwork></figure>

<t><list style="numbers" type="1">
  <t>Optionally, the MTA retrieves the scanner's discovery document (<xref target="discovery"/>).</t>
  <t>The MTA registers, stating the stages, properties, and grants for each subscription (<xref target="registration"/>).</t>
  <t>At each subscribed stage the MTA sends a hook request (<xref target="hook-request"/>).</t>
  <t>The scanner returns a JSON Patch, which the MTA validates against the grants and applies (<xref target="hook-response"/>).</t>
</list></t>

</section>
<section anchor="serialization"><name>Serialization</name>

<t>Discovery, registration, and error responses use JSON. Hook requests and responses use JSON or CBOR <xref target="RFC8949"/>, chosen at registration. In CBOR, the data model is that of JSON, with text strings as map keys, except that Bytes values are byte strings, which avoids the size increase of base64 for message content. JSON Pointer and JSON Patch apply unchanged, and a "test" operation compares byte strings octet for octet.</t>

</section>
<section anchor="stage-list"><name>Stages</name>

<texttable title="Stages" anchor="tab-stages">
      <ttcol align='left'>Stage</ttcol>
      <ttcol align='left'>Invoked</ttcol>
      <c>connect</c>
      <c>When a client connects, before the greeting is sent; on a port with implicit TLS <xref target="RFC8314"/>, after the TLS handshake.</c>
      <c>ehlo</c>
      <c>After each EHLO or HELO command, including the one that follows STARTTLS.</c>
      <c>mail</c>
      <c>After each MAIL command.</c>
      <c>rcpt</c>
      <c>After each RCPT command.</c>
      <c>data</c>
      <c>After the message content has been received, before the final reply.</c>
      <c>route</c>
      <c>Each time the MTA takes recipients from the queue for a delivery attempt, before resolving or connecting to the next hop.</c>
      <c>transmit</c>
      <c>Before each SMTP transaction of a delivery attempt, once its envelope is final and before the message is transmitted.</c>
      <c>delivery</c>
      <c>After the delivery attempts of a delivery job have completed.</c>
      <c>dsn</c>
      <c>Before the MTA sends a delivery status notification it generated.</c>
</texttable>

<t>The first five stages are inbound stages and the last four are outbound stages. Each inbound stage request carries the state accumulated so far in the session, subject to the subscription's properties, so a scanner that subscribes only to "data" receives the connection, TLS, authentication, envelope, and message in a single request and can still reject the message at SMTP time.</t>

<t>A delivery job is a set of recipients of one message that the MTA attempts in one processing cycle. How recipients are grouped into jobs is implementation-defined, except as constrained by routing (<xref target="routing"/>).</t>

</section>
<section anchor="chains"><name>Scanner Chains</name>

<t>When several registrations subscribe to the same stage, the MTA invokes them sequentially in a configured order. Each scanner receives the state as changed by the previous scanners, including the current action and which scanner set it. The chain ends early when a scanner sets a terminal action (<xref target="action-semantics"/>).</t>

<t>Each registration is identified in hook requests by a label that the MTA operator assigns to it, for example "spam" or "archive", and that the MTA sends in the registration request. The label is not chosen by the scanner, is stable across re-registration, and is unique within the MTA. It has the syntax of the registration identifier (<xref target="header-fields"/>), with at most 64 characters. The reserved label "mta" denotes the MTA itself.</t>

</section>
<section anchor="state-changes"><name>State Changes</name>

<t>A scanner changes processing by returning a JSON Patch <xref target="RFC6902"/> that is applied to the hook request. The MTA then acts on the resulting state. There is no other way to influence processing, so every effect a scanner can have corresponds to a path in the hook request, and every permission is a grant on a path.</t>

</section>
</section>
<section anchor="discovery"><name>Discovery</name>

<t>A scanner <bcp14>MAY</bcp14> publish a discovery document at "/.well-known/mta-hooks". The MTA retrieves it with GET. Discovery is optional: the MTA may instead be configured with the registration URL.</t>

<t>The discovery document has the following properties:</t>

<dl>
  <dt>version: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The protocol version, "1.0" for this specification. An MTA <bcp14>MUST NOT</bcp14> register with a scanner whose version it does not support.</t>
  </dd>
  <dt>registration: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>URL of the registration endpoint, an absolute URL or a relative reference resolved against the URL of the discovery document (<xref section="5" sectionFormat="of" target="RFC3986"/>).</t>
  </dd>
  <dt>serialization: <spanx style="verb">String[]</spanx></dt>
  <dd>
    <t>Media types of the supported serializations for hook requests: "application/json", "application/cbor", or both.</t>
  </dd>
  <dt>stages: <spanx style="verb">String[]</spanx></dt>
  <dd>
    <t>Stages the scanner can process.</t>
  </dd>
  <dt>properties: <spanx style="verb">String[]</spanx></dt>
  <dd>
    <t>Property paths the scanner wants to receive.</t>
  </dd>
  <dt>grants: <spanx style="verb">Grant[]</spanx></dt>
  <dd>
    <t>Changes the scanner may want to make (<xref target="grants"/>).</t>
  </dd>
  <dt>maxMessageSize: <spanx style="verb">UnsignedInt|null</spanx></dt>
  <dd>
    <t>Largest message, in octets, the scanner accepts. The MTA does not send a request for a larger message and instead treats the invocation as a failure of the scanner (<xref target="failure"/>).</t>
  </dd>
  <dt>timeoutMs: <spanx style="verb">UnsignedInt|null</spanx></dt>
  <dd>
    <t>Time, in milliseconds, the scanner needs to answer a typical request.</t>
  </dd>
</dl>

<figure><sourcecode type="json"><![CDATA[
{
  "version": "1.0",
  "registration": "/v1/registrations",
  "serialization": ["application/cbor", "application/json"],
  "stages": ["connect", "rcpt", "data", "route", "delivery"],
  "properties": ["/session", "/envelope", "/message",
                 "/senderAuth", "/queue", "/ext/org.example.av"],
  "grants": [
    {"path": "/action",
     "values": ["accept", "quarantine", "reject", "discard"]},
    {"path": "/response"},
    {"path": "/message/headers"},
    {"path": "/envelope/to/*/status"},
    {"path": "/envelope/to/*/route"},
    {"path": "/ext/org.example.spam"}
  ],
  "maxMessageSize": 52428800,
  "timeoutMs": 2000
}
]]></sourcecode></figure>

</section>
<section anchor="registration"><name>Registration</name>

<t>The MTA registers by POSTing a registration request to the registration endpoint. The MTA builds the request from its configuration; it states what the MTA will send and what it will allow. The scanner can accept it, narrow it, or refuse it, but never widen it.</t>

<section anchor="registration-request"><name>Registration Request</name>

<dl>
  <dt>name: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Human-readable name of the MTA instance.</t>
  </dd>
  <dt>label: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The label of this registration in hook requests (<xref target="chains"/>).</t>
  </dd>
  <dt>softwareVersion: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>MTA software version.</t>
  </dd>
  <dt>timeoutMs: <spanx style="verb">UnsignedInt</spanx></dt>
  <dd>
    <t>Longest time, in milliseconds, the MTA waits for a hook response.</t>
  </dd>
  <dt>expiresAt: <spanx style="verb">UTCDate|null</spanx></dt>
  <dd>
    <t>Requested expiration. The scanner <bcp14>MAY</bcp14> assign a different one.</t>
  </dd>
  <dt>serialization: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Media type of the serialization for hook requests and responses. A scanner that does not support it refuses the registration with 422 UNSUPPORTED_SERIALIZATION.</t>
  </dd>
  <dt>subscriptions: <spanx style="verb">Subscription[]</spanx></dt>
  <dd>
    <t>The subscriptions, in order. <bcp14>MUST NOT</bcp14> be empty.</t>
  </dd>
</dl>

<t>A <strong>Subscription</strong> object has the following properties:</t>

<dl>
  <dt>stages: <spanx style="verb">String[]</spanx></dt>
  <dd>
    <t>Stages this subscription applies to.</t>
  </dd>
  <dt>filter: <spanx style="verb">FilterOperator|FilterCondition|null</spanx></dt>
  <dd>
    <t>Which messages and connections this subscription applies to (<xref target="filters"/>). Null matches everything.</t>
  </dd>
  <dt>properties: <spanx style="verb">String[]</spanx></dt>
  <dd>
    <t>Property paths the MTA will send. A path includes everything below it.</t>
  </dd>
  <dt>grants: <spanx style="verb">Grant[]</spanx></dt>
  <dd>
    <t>Changes the scanner may make (<xref target="grants"/>).</t>
  </dd>
  <dt>onFailure: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>What the MTA does when the scanner fails (<xref target="failure"/>): "continue" or "tempfail". Default "continue".</t>
  </dd>
</dl>

<t>For each stage, the MTA uses the first subscription, in order, that lists the stage and whose filter matches. If none matches, the scanner is not invoked. Different parts of the mail stream can therefore receive different properties, permissions, and failure handling.</t>

<t>At the "route" and "delivery" stages, subscriptions are matched per recipient, with envelopeTo evaluated against that recipient alone. When recipients of a job match different subscriptions of the same registration, the MTA invokes the scanner once for each of those subscriptions, in subscription order, with only the recipients it matches, so each subscription's grants and onFailure apply only to its own recipients. At the "transmit" and "dsn" stages the transaction or DSN is matched as a whole, because its changes apply to a single copy.</t>

<section anchor="filters"><name>Filters</name>

<t>A filter uses the FilterOperator and FilterCondition syntax of <xref section="5.5" sectionFormat="of" target="RFC8620"/> with the Email filter conditions of <xref section="4.4.1" sectionFormat="of" target="RFC8621"/>, except those that depend on mailbox or thread state: inMailbox, inMailboxOtherThan, before, after, hasKeyword, notKeyword, allInThreadHaveKeyword, someInThreadHaveKeyword, and noneInThreadHaveKeyword.</t>

<t>The following conditions are added. Their String values <bcp14>MAY</bcp14> contain "*", which matches zero or more characters. Domains are compared case-insensitively; local parts and logins are compared exactly.</t>

<dl>
  <dt>envelopeFrom: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The MAIL FROM address matches.</t>
  </dd>
  <dt>envelopeTo: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The address of any recipient whose status is not "failed", "deferred", or "discarded" matches.</t>
  </dd>
  <dt>clientIp: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The client IP address is within the given address or Classless Inter-Domain Routing (CIDR) prefix (<xref target="RFC4632"/>, <xref section="2.3" sectionFormat="of" target="RFC4291"/>).</t>
  </dd>
  <dt>serverPort: <spanx style="verb">UnsignedInt</spanx></dt>
  <dd>
    <t>The client connected to this port.</t>
  </dd>
  <dt>tls: <spanx style="verb">Boolean</spanx></dt>
  <dd>
    <t>Whether the session uses TLS.</t>
  </dd>
  <dt>authenticated: <spanx style="verb">Boolean</spanx></dt>
  <dd>
    <t>Whether the client authenticated.</t>
  </dd>
  <dt>authLogin: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The authenticated login matches.</t>
  </dd>
</dl>

<t>A condition that refers to information not available at the stage being evaluated, such as the subject at the "rcpt" stage or the client address of a locally submitted message, evaluates to false, so its negation evaluates to true.</t>

<t>The filter is evaluated by the MTA. It is included in the registration so the scanner knows which traffic it will see.</t>

</section>
<section anchor="grants"><name>Grants</name>

<t>A <strong>Grant</strong> object has the following properties:</t>

<dl>
  <dt>path: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>A property path. The grant covers the locations it matches and everything below them.</t>
  </dd>
  <dt>values: <spanx style="verb">String[]|null</spanx></dt>
  <dd>
    <t>If not null, every String value at or below the path that differs after the patch <bcp14>MUST</bcp14> match one of these values, which <bcp14>MAY</bcp14> contain the "*" wildcard of <xref target="filters"/>.</t>
  </dd>
  <dt>max: <spanx style="verb">UnsignedInt|null</spanx></dt>
  <dd>
    <t>If not null, a number at the path <bcp14>MUST NOT</bcp14> exceed it after the patch; any other value at the path <bcp14>MUST NOT</bcp14> exceed it in size, in octets, in the negotiated serialization.</t>
  </dd>
  <dt>relax: <spanx style="verb">Boolean</spanx></dt>
  <dd>
    <t>Whether the scanner may change ordered properties in the permissive direction (<xref target="ordering"/>). Default false.</t>
  </dd>
</dl>

<t>A change to a location not covered by a grant is not permitted. When several grants cover a location, the most specific one applies: the one whose path has the most reference tokens and, among those, the one with a literal token where the others have "*". A narrower grant can thus restrict part of a broader one. Examples:</t>

<figure><sourcecode type="json"><![CDATA[
[
  {"path": "/message/headers"},
  {"path": "/action", "relax": true},
  {"path": "/envelope/to/*/route/name",
   "values": ["default", "vpn-*"]},
  {"path": "/response/delayMs", "max": 30000},
  {"path": "/ext/org.example.spam", "max": 4096}
]
]]></sourcecode></figure>

</section>
</section>
<section anchor="registration-response"><name>Registration Response</name>

<t>On success the scanner returns 201 Created with a Location header field giving the registration URL, and a Registration object:</t>

<dl>
  <dt>id: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Registration identifier, with the syntax of <xref target="header-fields"/>.</t>
  </dd>
  <dt>expiresAt: <spanx style="verb">UTCDate|null</spanx></dt>
  <dd>
    <t>Expiration time, or null for none.</t>
  </dd>
  <dt>hookEndpoint: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>URL to which hook requests are sent, an absolute URL or a relative reference resolved against the registration URL.</t>
  </dd>
</dl>

<t>An absolute URL in "registration" or "hookEndpoint" <bcp14>MUST</bcp14> have the same origin as the URL it is resolved against, unless the MTA's configuration allows the other origin. The MTA <bcp14>MUST NOT</bcp14> follow redirects for registration and hook requests; a 3xx status is a failure.</t>

<dl>
  <dt>serialization: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Confirmed serialization media type.</t>
  </dd>
  <dt>subscriptions: <spanx style="verb">Subscription[]</spanx></dt>
  <dd>
    <t>The subscriptions as accepted. The scanner <bcp14>MAY</bcp14> remove properties and grants it does not need, but <bcp14>MUST NOT</bcp14> otherwise change the subscriptions, because removing a stage or a subscription would let traffic fall through to a later subscription. A scanner that cannot serve a subscription refuses the registration with 422. The MTA <bcp14>MUST NOT</bcp14> send properties or honor changes beyond what is confirmed here.</t>
  </dd>
</dl>

<figure><artwork><![CDATA[
POST /v1/registrations HTTP/1.1
Host: scanner.example.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

{
  "name": "mx1.example.com",
  "label": "spam",
  "softwareVersion": "2.1.0",
  "timeoutMs": 5000,
  "serialization": "application/json",
  "subscriptions": [
    {
      "stages": ["data"],
      "filter": {"authenticated": false},
      "properties": ["/session", "/envelope", "/message",
                     "/senderAuth"],
      "grants": [
        {"path": "/action"},
        {"path": "/response"},
        {"path": "/message/headers"},
        {"path": "/ext/org.example.spam", "max": 4096}
      ],
      "onFailure": "continue"
    },
    {
      "stages": ["route"],
      "filter": {"envelopeTo": "*@partner.example"},
      "properties": ["/envelope", "/queue",
                     "/ext/org.example.spam"],
      "grants": [
        {"path": "/envelope/to/*/route/name",
         "values": ["vpn-partner"]}
      ],
      "onFailure": "tempfail"
    }
  ]
}
]]></artwork></figure>

<figure><artwork><![CDATA[
HTTP/1.1 201 Created
Content-Type: application/json
Location: /v1/registrations/reg-7a3b9c2e

{
  "id": "reg-7a3b9c2e",
  "expiresAt": "2027-10-28T10:00:00Z",
  "hookEndpoint": "/v1/hooks/reg-7a3b9c2e",
  "serialization": "application/json",
  "subscriptions": [ ... ]
}
]]></artwork></figure>

<t>In this response, which echoes the two requested subscriptions unchanged, they are abbreviated. The HTTP examples in this document omit Content-Length.</t>

</section>
<section anchor="registration-authentication"><name>Authentication</name>

<t>The MTA <bcp14>MUST</bcp14> authenticate every request it makes to the scanner other than retrieval of the discovery document. Implementations <bcp14>MUST</bcp14> support bearer tokens <xref target="RFC6750"/> in the Authorization header field, and <bcp14>MAY</bcp14> support TLS client certificates instead. Credentials are issued by the scanner operator to each MTA through an out-of-band channel. The scanner <bcp14>MUST</bcp14> reject unauthenticated requests with 401, including a WWW-Authenticate header field as <xref target="RFC6750"/> requires, and requests from an MTA not authorized for the registration with 403.</t>

</section>
<section anchor="registration-lifecycle"><name>Registration Lifecycle</name>

<t>The MTA <bcp14>MAY</bcp14> retrieve the current Registration object with GET on the registration URL. It deregisters with DELETE on that URL, to which the scanner answers 204 (No Content). After deregistration the MTA <bcp14>MUST NOT</bcp14> start new hook requests for the registration. Hook requests already in flight <bcp14>MAY</bcp14> complete.</t>

<t>A registration that expires or is terminated by the scanner causes subsequent requests to fail with 404 REGISTRATION_NOT_FOUND. The MTA <bcp14>MUST</bcp14> treat that response on a previously active registration as a signal to register again. The MTA <bcp14>SHOULD</bcp14> register again before expiresAt, and when its configuration for the scanner changes. Each registration has a new identifier; once the new registration is active, the MTA <bcp14>SHOULD</bcp14> delete the one it replaces. A scanner <bcp14>SHOULD</bcp14> continue to accept hook requests for a replaced registration for a short grace period.</t>

<t>Scanner instances behind a load balancer <bcp14>MUST</bcp14> share registration state or partition it by registration identifier.</t>

</section>
</section>
<section anchor="hook-request"><name>Hook Request</name>

<section anchor="header-fields"><name>HTTP Request</name>

<t>The MTA sends each hook request with POST to the hookEndpoint, with a Content-Type of "application/json" or "application/cbor" and the following header fields:</t>

<dl>
  <dt>MTA-Hooks-Registration:</dt>
  <dd>
    <t><bcp14>REQUIRED</bcp14>. The registration identifier.</t>
  </dd>
  <dt>MTA-Hooks-Request-Id:</dt>
  <dd>
    <t><bcp14>REQUIRED</bcp14>. Identifies the logical invocation. It <bcp14>MUST</bcp14> be the same on every retry of an invocation. Scanners <bcp14>SHOULD</bcp14> use it to deduplicate.</t>
  </dd>
  <dt>MTA-Hooks-Context:</dt>
  <dd>
    <t><bcp14>OPTIONAL</bcp14>. An opaque value that is the same for all requests about the same session at inbound stages, and about the same message at outbound stages, so that load balancers can route related requests to the same scanner instance without parsing the body. Scanners <bcp14>MUST NOT</bcp14> depend on such affinity.</t>
  </dd>
</dl>

<t>Their values have the following syntax, using ABNF <xref target="RFC5234"/> and the "unreserved" rule of <xref section="2.3" sectionFormat="of" target="RFC3986"/>:</t>

<figure><sourcecode type="abnf"><![CDATA[
MTA-Hooks-Registration = 1*255( ALPHA / DIGIT / "-" / "_" / ":" )
MTA-Hooks-Request-Id   = 1*128unreserved
MTA-Hooks-Context      = 1*128unreserved
]]></sourcecode></figure>

</section>
<section anchor="properties"><name>Properties</name>

<t>The hook request is an object whose properties are listed below. "stage", "timestamp", and "timeoutMs" are always sent, and "action", "decidedBy", and "response" are always sent at inbound stages. The others are sent when they are covered by the subscription's properties and available at the stage.</t>

<dl>
  <dt>stage: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The current stage.</t>
  </dd>
  <dt>action: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Inbound stages only: what the MTA will do unless changed (<xref target="action-semantics"/>).</t>
  </dd>
  <dt>decidedBy: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Inbound stages only: label of the registration that last changed the action, or "mta".</t>
  </dd>
  <dt>response: <spanx style="verb">SmtpResponse</spanx></dt>
  <dd>
    <t>Inbound stages only: the SMTP reply the MTA will send for the current command.</t>
  </dd>
  <dt>timestamp: <spanx style="verb">UTCDate</spanx></dt>
  <dd>
    <t>When the stage began.</t>
  </dd>
  <dt>timeoutMs: <spanx style="verb">UnsignedInt</spanx></dt>
  <dd>
    <t>Milliseconds the scanner has to answer this request: the registration's timeoutMs, reduced by any budget the MTA's configuration assigns to the stage or the chain and by time already spent on earlier attempts of this invocation. Answers arriving later are discarded.</t>
  </dd>
  <dt>traceId: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Opaque identifier that correlates the message across the MTAs of an administrative domain. How it is obtained and propagated between MTAs is outside the scope of this document. It <bcp14>SHOULD</bcp14> be globally unique, for example a version 7 Universally Unique Identifier (UUIDv7) <xref target="RFC9562"/>. A scanner with a grant <bcp14>MAY</bcp14> set it while it is null; once set, it cannot be changed.</t>
  </dd>
  <dt>session: <spanx style="verb">Session|null</spanx></dt>
  <dd>
    <t>The session in which the message was received (<xref target="session"/>).</t>
  </dd>
  <dt>capabilities: <spanx style="verb">String[String|null]</spanx></dt>
  <dd>
    <t>At the "ehlo" stage, the SMTP service extensions the MTA will announce, keyed by upper-case keyword, with the parameters as a space-separated string or null (<xref target="ehlo"/>).</t>
  </dd>
  <dt>envelope: <spanx style="verb">Envelope</spanx></dt>
  <dd>
    <t>Sender and recipients (<xref target="envelope"/>).</t>
  </dd>
  <dt>message: <spanx style="verb">Email</spanx></dt>
  <dd>
    <t>The parsed message (<xref target="message"/>).</t>
  </dd>
  <dt>rawMessage: <spanx style="verb">Bytes</spanx></dt>
  <dd>
    <t>The message in Internet Message Format <xref target="RFC5322"/>.</t>
  </dd>
  <dt>senderAuth: <spanx style="verb">SenderAuth</spanx></dt>
  <dd>
    <t>Sender authentication results (<xref target="sender-auth"/>).</t>
  </dd>
  <dt>queue: <spanx style="verb">Queue</spanx></dt>
  <dd>
    <t>The queued message (<xref target="queue"/>).</t>
  </dd>
  <dt>ext: <spanx style="verb">String[Object]</spanx></dt>
  <dd>
    <t>Extension data (<xref target="ext"/>).</t>
  </dd>
</dl>

<t>A property is not sent when the MTA does not have its information, such as the envelope before MAIL, the message before the end of DATA, the queue before the MTA assigns an identifier, or the session and senderAuth at outbound stages when the MTA did not retain them. At the "transmit" stage, envelope and message describe the transaction about to be performed. At the "dsn" stage, envelope, message, and rawMessage describe the DSN about to be sent; queue identifies the message the DSN reports on.</t>

</section>
<section anchor="session"><name>Session</name>

<t>A <strong>Session</strong> object describes an SMTP session. For a message submitted by other means, such as the JSON Meta Application Protocol (JMAP) <xref target="RFC8621"/> or a local submission program, it describes that submission as far as applicable; for example, "auth" identifies the submitting account and "client" is null for local submission.</t>

<dl>
  <dt>id: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Unique identifier of the session, stable across its stages and transactions.</t>
  </dd>
  <dt>startedAt: <spanx style="verb">UTCDate</spanx></dt>
  <dd>
    <t>When the connection was accepted.</t>
  </dd>
  <dt>client: <spanx style="verb">ClientInfo|null</spanx></dt>
  <dd>
    <t>The client.</t>
  </dd>
  <dt>server: <spanx style="verb">ServerInfo|null</spanx></dt>
  <dd>
    <t>The address the client connected to.</t>
  </dd>
  <dt>tls: <spanx style="verb">TlsInfo|null</spanx></dt>
  <dd>
    <t>TLS negotiated or attempted on the session, or null.</t>
  </dd>
  <dt>auth: <spanx style="verb">SmtpAuth|null</spanx></dt>
  <dd>
    <t>Authentication of the client, or null.</t>
  </dd>
  <dt>counters: <spanx style="verb">String[UnsignedInt]</spanx></dt>
  <dd>
    <t>Session counters and measurements, keyed by names from the registry in <xref target="iana-counters"/>. The MTA includes those it maintains.</t>
  </dd>
</dl>

<t>A <strong>ClientInfo</strong> object has the following properties:</t>

<dl>
  <dt>ip: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Client IP address.</t>
  </dd>
  <dt>port: <spanx style="verb">UnsignedInt</spanx></dt>
  <dd>
    <t>Client port.</t>
  </dd>
  <dt>ptr: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Host name from the PTR record of the IP address.</t>
  </dd>
  <dt>ehlo: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Argument of the most recent EHLO or HELO command.</t>
  </dd>
  <dt>asn: <spanx style="verb">UnsignedInt|null</spanx></dt>
  <dd>
    <t>Autonomous System Number (ASN) of the IP address.</t>
  </dd>
  <dt>country: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Alpha-2 country code <xref target="ISO3166-1"/> of the IP address.</t>
  </dd>
  <dt>activeConnections: <spanx style="verb">UnsignedInt|null</spanx></dt>
  <dd>
    <t>Concurrent connections from this IP address.</t>
  </dd>
  <dt>proxy: <spanx style="verb">ProxyInfo|null</spanx></dt>
  <dd>
    <t>How the client identity was conveyed, if not taken from the socket.</t>
  </dd>
</dl>

<t>The client properties carry the effective client identity. When it was conveyed by a proxy mechanism that the MTA trusts, "proxy" describes that mechanism; when the mechanism is not trusted, the MTA ignores it and the request contains the socket identity without a "proxy" property.</t>

<t>A <strong>ProxyInfo</strong> object has the following properties:</t>

<dl>
  <dt>protocol: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>"proxy-v1" or "proxy-v2" for the PROXY protocol <xref target="PROXY"/>, "xclient" for XCLIENT <xref target="XCLIENT"/>, or "xforward" for XFORWARD <xref target="XFORWARD"/>.</t>
  </dd>
  <dt>ip: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>IP address of the proxy, the socket peer.</t>
  </dd>
  <dt>port: <spanx style="verb">UnsignedInt</spanx></dt>
  <dd>
    <t>Port of the proxy.</t>
  </dd>
  <dt>overridden: <spanx style="verb">String[]</spanx></dt>
  <dd>
    <t>Property paths of the session values that came from the proxy, for example "/session/client/ip" or "/session/server/port".</t>
  </dd>
</dl>

<t>A <strong>ServerInfo</strong> object has the following properties:</t>

<dl>
  <dt>name: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Host name the MTA uses on this connection.</t>
  </dd>
  <dt>ip: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>IP address the client connected to.</t>
  </dd>
  <dt>port: <spanx style="verb">UnsignedInt</spanx></dt>
  <dd>
    <t>Port the client connected to.</t>
  </dd>
</dl>

<t>A <strong>TlsInfo</strong> object has the following properties:</t>

<dl>
  <dt>version: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>TLS version: "TLSv1.2" or "TLSv1.3", or null if no handshake completed.</t>
  </dd>
  <dt>cipher: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Name of the cipher suite as listed in the IANA "TLS Cipher Suites" registry, or null if no handshake completed.</t>
  </dd>
  <dt>peerCertificate: <spanx style="verb">Certificate|null</spanx></dt>
  <dd>
    <t>The certificate presented by the peer: the client certificate at inbound stages, the server certificate at outbound stages. Null if none was presented.</t>
  </dd>
  <dt>policy: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Outbound only: the policy type applied, as defined for "policy-type" in <xref target="RFC8460"/>.</t>
  </dd>
  <dt>failure: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Outbound only: why TLS failed, as a "result-type" value of <xref target="RFC8460"/>, or null.</t>
  </dd>
</dl>

<t>A <strong>Certificate</strong> object has the following properties:</t>

<dl>
  <dt>chain: <spanx style="verb">Bytes[]</spanx></dt>
  <dd>
    <t>The certificates as presented, encoded with the Distinguished Encoding Rules (DER) <xref target="X.690"/>, end-entity certificate first.</t>
  </dd>
  <dt>verification: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>"pass" if the MTA verified the certificate, using PKIX <xref target="RFC5280"/> or DNS-Based Authentication of Named Entities (DANE) <xref target="RFC7672"/>; "none" if it did not attempt verification; otherwise why verification failed, as one of the "result-type" values "certificate-expired", "certificate-not-trusted", "certificate-host-mismatch", or "validation-failure" of <xref target="RFC8460"/>.</t>
  </dd>
</dl>

<t>The certificate is reported whether or not it could be verified. A certificate that did not verify is an unauthenticated assertion by the peer; it is useful for recognizing a peer, but not as proof of its identity.</t>

<t>An <strong>SmtpAuth</strong> object has the following properties:</t>

<dl>
  <dt>login: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Authenticated identity.</t>
  </dd>
  <dt>method: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Name of the Simple Authentication and Security Layer (SASL) <xref target="RFC4422"/> mechanism used with SMTP AUTH <xref target="RFC4954"/>, or null for authentication by other means.</t>
  </dd>
</dl>

</section>
<section anchor="envelope"><name>Envelope and Recipients</name>

<t>An <strong>Envelope</strong> object has the following properties:</t>

<dl>
  <dt>from: <spanx style="verb">Address</spanx></dt>
  <dd>
    <t>The reverse-path.</t>
  </dd>
  <dt>to: <spanx style="verb">Recipient[]</spanx></dt>
  <dd>
    <t>The recipients.</t>
  </dd>
</dl>

<t>An <strong>Address</strong> object has the following properties:</t>

<dl>
  <dt>address: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>The address, or null for the null reverse-path.</t>
  </dd>
  <dt>parameters: <spanx style="verb">String[String|null]</spanx></dt>
  <dd>
    <t>All Extended SMTP (ESMTP) parameters given with the address, keyed by upper-case name, with null for a parameter without a value. Values that their extension encodes as xtext, such as ENVID and the address in ORCPT <xref target="RFC3461"/>, are decoded. Examples are SIZE, BODY, SMTPUTF8, REQUIRETLS, RET, ENVID, NOTIFY, and ORCPT.</t>
  </dd>
</dl>

<t>A <strong>Recipient</strong> object has the properties of Address, where address is not null, and the following:</t>

<dl>
  <dt>status: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>See below.</t>
  </dd>
  <dt>response: <spanx style="verb">SmtpResponse|null</spanx></dt>
  <dd>
    <t>The reply that determined the status: the reply given to the RCPT command at inbound stages, or the reply of the next hop at outbound stages.</t>
  </dd>
  <dt>decidedBy: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Label of the registration that last changed the status, or "mta".</t>
  </dd>
  <dt>expansion: <spanx style="verb">String[]|null</spanx></dt>
  <dd>
    <t>Inbound only: the addresses this recipient resolves to after alias expansion and rewriting, when the MTA has already resolved it.</t>
  </dd>
  <dt>originalRecipient: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Outbound only: the address as given in RCPT TO, when this recipient resulted from expansion or rewriting.</t>
  </dd>
  <dt>attempts: <spanx style="verb">UnsignedInt</spanx></dt>
  <dd>
    <t>Outbound only: delivery attempts made for this recipient.</t>
  </dd>
  <dt>nextAttemptAt: <spanx style="verb">UTCDate|null</spanx></dt>
  <dd>
    <t>Outbound only: when the next attempt is scheduled.</t>
  </dd>
  <dt>nextDsnAt: <spanx style="verb">UTCDate|null</spanx></dt>
  <dd>
    <t>Outbound only: when the next delay DSN is scheduled.</t>
  </dd>
  <dt>route: <spanx style="verb">Route</spanx></dt>
  <dd>
    <t>Outbound only: the route used for the next attempt (<xref target="routing"/>). Its null properties take the MTA's defaults.</t>
  </dd>
  <dt>lastAttempt: <spanx style="verb">Attempt|null</spanx></dt>
  <dd>
    <t>Outbound only: the most recent delivery attempt.</t>
  </dd>
</dl>

<t>The status of a recipient is one of:</t>

<texttable title="Recipient Status" anchor="tab-status">
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>pending</c>
      <c>The recipient of the RCPT command being processed.</c>
      <c>accepted</c>
      <c>Accepted at RCPT and not yet attempted.</c>
      <c>deferred</c>
      <c>Temporarily failed: a 4xx reply at RCPT, or an outbound attempt to be retried.</c>
      <c>failed</c>
      <c>Permanently failed: a 5xx reply at RCPT, or an outbound failure for which a DSN is due.</c>
      <c>delivered</c>
      <c>Delivered to the next hop.</c>
      <c>discarded</c>
      <c>Dropped without delivery and without a DSN.</c>
</texttable>

<t>At inbound stages, recipients appear in the order of their RCPT commands, including those rejected or deferred. At the "rcpt" stage the last recipient is the one of the current command, with status "pending". At outbound stages, the array contains the recipients that the invocation covers: those of the delivery job matched by the subscription, those of the transaction at the "transmit" stage, or the recipient of the DSN at the "dsn" stage.</t>

<t>An <strong>Attempt</strong> object has the following properties:</t>

<dl>
  <dt>at: <spanx style="verb">UTCDate</spanx></dt>
  <dd>
    <t>When the attempt was made.</t>
  </dd>
  <dt>remote: <spanx style="verb">RemoteHost|null</spanx></dt>
  <dd>
    <t>The host the MTA connected to, or null if no connection was made.</t>
  </dd>
  <dt>sourceIp: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>The local IP address used.</t>
  </dd>
  <dt>tls: <spanx style="verb">TlsInfo|null</spanx></dt>
  <dd>
    <t>TLS on the connection, or null if TLS was not attempted.</t>
  </dd>
</dl>

<t>A <strong>RemoteHost</strong> object has the following properties:</t>

<dl>
  <dt>host: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Host name of the next hop, such as the MX name.</t>
  </dd>
  <dt>ip: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>IP address connected to.</t>
  </dd>
  <dt>port: <spanx style="verb">UnsignedInt</spanx></dt>
  <dd>
    <t>Port connected to.</t>
  </dd>
</dl>

</section>
<section anchor="message"><name>Message</name>

<t>The "message" property is the Email object of <xref section="4" sectionFormat="of" target="RFC8621"/>, without the metadata properties of <xref section="4.1.1" sectionFormat="of" target="RFC8621"/> other than "size", and with the "blobId" of each EmailBodyPart replaced by a "blob" property of type Bytes holding the part's content after decoding its Content-Transfer-Encoding <xref target="RFC2045"/>. The "rawMessage" property is the message octet for octet, which signature verification and archiving require.</t>

<t>A scanner can request either or both. Header changes are made through "/message/headers"; the convenience properties derived from headers, such as "subject" and "from", cannot be changed. Body changes are made through "bodyValues" and "bodyStructure", or by replacing "rawMessage" with a complete new message. A patch that changes both "message" and "rawMessage" is invalid. After a change, the MTA presents both consistently to the following scanners.</t>

</section>
<section anchor="sender-auth"><name>Sender Authentication</name>

<t>A <strong>SenderAuth</strong> object has the following properties, each holding a result value of the corresponding Authentication-Results method <xref target="RFC8601"/>, or null if not evaluated:</t>

<dl>
  <dt>iprev: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Reverse DNS check of the client address (forward-confirmed reverse DNS).</t>
  </dd>
  <dt>spfHelo: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Sender Policy Framework (SPF) <xref target="RFC7208"/> for the HELO identity.</t>
  </dd>
  <dt>spfMailFrom: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>SPF for the MAIL FROM identity.</t>
  </dd>
  <dt>dkim: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>DomainKeys Identified Mail (DKIM) <xref target="RFC6376"/>.</t>
  </dd>
  <dt>dkim2: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>DKIM2 <xref target="I-D.ietf-dkim-dkim2-spec"/>, with the result values of <xref target="I-D.gondwana-dkim2-authres"/>.</t>
  </dd>
  <dt>dmarc: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Domain-based Message Authentication, Reporting, and Conformance (DMARC) <xref target="RFC9989"/>.</t>
  </dd>
</dl>

</section>
<section anchor="queue"><name>Queue</name>

<t>A <strong>Queue</strong> object has the following properties:</t>

<dl>
  <dt>id: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>Identifier of the message in the MTA's queue.</t>
  </dd>
  <dt>expiresAt: <spanx style="verb">UTCDate|null</spanx></dt>
  <dd>
    <t>When the MTA gives up delivering the message. Present at outbound stages.</t>
  </dd>
</dl>

<t>The queue identifier <bcp14>MUST</bcp14> be the same at every stage and every delivery job of the message, from "data" to the last "delivery" or "dsn", and <bcp14>MUST</bcp14> be unique within the MTA for the lifetime of the message. Scanners can therefore keep the state they collected at inbound stages until expiresAt.</t>

</section>
<section anchor="ext"><name>Extension Data</name>

<t>The "ext" object holds data outside this specification. Each key is a namespace named by a reverse domain name controlled by its definer, for example "org.example.spam", and its value is an object whose content that definer specifies.</t>

<t>Extension data is written by the MTA and by scanners, and exchanged like any other property: the subscription's properties decide which namespaces a scanner receives, and its grants decide which it can write. A namespace written by one scanner and sent to another is how scanners pass results along a chain without adding header fields to the message. Recipients of a request <bcp14>MUST</bcp14> ignore namespaces they do not understand.</t>

<t>Extension data is kept with the message for as long as the message is in the MTA, so data written at the "data" stage is available again at the "route", "delivery", and "dsn" stages. Data written before the MAIL command is kept with the session and copied to each of its transactions. The MTA <bcp14>SHOULD</bcp14> limit the size of each namespace through the "max" of the grant.</t>

</section>
<section anchor="smtp-response"><name>SMTP Response</name>

<t>An <strong>SmtpResponse</strong> object has the following properties:</t>

<dl>
  <dt>code: <spanx style="verb">UnsignedInt</spanx></dt>
  <dd>
    <t>The reply code.</t>
  </dd>
  <dt>enhancedCode: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>The enhanced status code <xref target="RFC3463"/>.</t>
  </dd>
  <dt>message: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The reply text.</t>
  </dd>
  <dt>delayMs: <spanx style="verb">UnsignedInt|null</spanx></dt>
  <dd>
    <t>Milliseconds the MTA waits before sending the reply. At the "connect" stage this delays the greeting, which reveals clients that send commands before it. The MTA <bcp14>MUST</bcp14> cap it, normally through the "max" of the grant, below the 5-minute timeouts that SMTP clients apply (<xref section="4.5.3.2" sectionFormat="of" target="RFC5321"/>).</t>
  </dd>
</dl>

</section>
<section anchor="ehlo"><name>EHLO Capabilities</name>

<t>At the "ehlo" stage, a scanner can only withhold what the MTA offers: it may remove keywords, remove space-separated parameters from a value, or lower a numeric value such as that of SIZE. Other changes to "capabilities" are invalid regardless of grants. This allows, for example, offering AUTH only on some networks or withholding PIPELINING and CHUNKING from suspicious clients.</t>

</section>
<section anchor="examples"><name>Examples</name>

<t>An inbound request at the "data" stage, with the message abbreviated:</t>

<figure><artwork><![CDATA[
POST /v1/hooks/reg-7a3b9c2e HTTP/1.1
Host: scanner.example.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
MTA-Hooks-Registration: reg-7a3b9c2e
MTA-Hooks-Request-Id: 01JBDX3X7F4Y5N6Q9R2S3T4U5V
MTA-Hooks-Context: 01JBDX3TQ8V0D6H1E2F3G4H5J6

{
  "stage": "data",
  "action": "accept",
  "decidedBy": "mta",
  "response": {"code": 250, "enhancedCode": "2.0.0",
               "message": "Queued as 4F2A31B0C9"},
  "timestamp": "2026-10-28T16:30:00Z",
  "timeoutMs": 4200,
  "session": {
    "id": "01JBDX3TQ8V0D6H1E2F3G4H5J6",
    "startedAt": "2026-10-28T16:29:58Z",
    "client": {"ip": "192.0.2.100", "port": 54321,
               "ptr": "mail.example.org",
               "ehlo": "mail.example.org", "asn": 64496},
    "server": {"name": "mx1.example.com",
               "ip": "198.51.100.25", "port": 25},
    "tls": {"version": "TLSv1.3",
            "cipher": "TLS_AES_256_GCM_SHA384",
            "peerCertificate": null},
    "auth": null,
    "counters": {"commands": 5, "transactions": 1,
                 "pregreetBytes": 0}
  },
  "envelope": {
    "from": {"address": "sender@example.org",
             "parameters": {"SIZE": "2048", "BODY": "8BITMIME"}},
    "to": [
      {"address": "bob@example.com", "parameters": {},
       "status": "accepted", "decidedBy": "mta",
       "response": {"code": 250, "message": "OK"}},
      {"address": "nobody@example.com", "parameters": {},
       "status": "failed", "decidedBy": "mta",
       "response": {"code": 550, "enhancedCode": "5.1.1",
                    "message": "User unknown"}}
    ]
  },
  "message": {
    "size": 2048,
    "subject": "Meeting Tomorrow",
    "headers": [
      {"name": "From", "value": " Sender <sender@example.org>"},
      {"name": "To", "value": " bob@example.com"},
      {"name": "Subject", "value": " Meeting Tomorrow"}
    ],
    "bodyValues": {
      "1": {"value": "Let's meet tomorrow at 10am.",
            "isEncodingProblem": false, "isTruncated": false}
    }
  },
  "senderAuth": {"iprev": "pass", "spfMailFrom": "pass",
                 "dkim": "pass", "dkim2": "none", "dmarc": "pass"}
}
]]></artwork></figure>

<t>An outbound request at the "route" stage:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "stage": "route",
  "timestamp": "2026-10-28T17:00:00Z",
  "timeoutMs": 2000,
  "queue": {"id": "4F2A31B0C9", "expiresAt": "2026-11-02T16:30:00Z"},
  "envelope": {
    "from": {"address": "sales@example.com", "parameters": {}},
    "to": [
      {"address": "a@partner.example", "parameters": {},
       "status": "deferred", "decidedBy": "mta",
       "response": {"code": 451, "enhancedCode": "4.4.1",
                    "message": "Connection timed out"},
       "attempts": 1, "nextAttemptAt": "2026-10-28T17:00:00Z",
       "nextDsnAt": "2026-10-29T16:30:00Z",
       "route": {"name": null},
       "lastAttempt": {
         "at": "2026-10-28T16:45:00Z",
         "remote": {"host": "mx.partner.example",
                    "ip": "203.0.113.7", "port": 25},
         "sourceIp": "198.51.100.25", "tls": null}}
    ]
  },
  "ext": {"org.example.spam": {"score": 0.4}}
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="hook-response"><name>Hook Response</name>

<section anchor="structure"><name>Structure</name>

<t>A scanner answers with 200 and a JSON Patch <xref target="RFC6902"/> in the negotiated serialization, or with 204 and no body when it has no changes. An empty patch also means no changes. In JSON the Content-Type is "application/json-patch+json"; in CBOR it is "application/cbor" and the patch is the CBOR encoding of the same array.</t>

<t>The patch is applied to the hook request as held by the MTA, which can include properties that were not sent. A scanner can, for example, add a header field with "add" at "/message/headers/0" without receiving the message, or append a recipient at "/envelope/to/-". In that state, every property defined for an object that exists at the stage is present, with the value null when it has none, so "replace" and "test" behave the same whether or not a null property was sent. The "/envelope/to" array is the one the request carries, in the same order.</t>

</section>
<section anchor="validation"><name>Validation and Application</name>

<t>The MTA applies the patch to a copy of the state. The patch is valid only if:</t>

<t><list style="numbers" type="1">
  <t>it applies successfully according to <xref target="RFC6902"/>, including all "test" operations;</t>
  <t>the "from" of every "copy" and "move" operation, and the "path" of every "test" operation, is covered by the subscription's properties;</t>
  <t>every location whose value differs between the original and the resulting state is covered by a grant of the subscription, and satisfies the "values" and "max" of the grant that applies (<xref target="grants"/>);</t>
  <t>it does not change "stage", "timestamp", "timeoutMs", any "decidedBy", or a non-null "traceId", which no grant covers;</t>
  <t>the resulting state respects the ordering of <xref target="ordering"/> unless that grant relaxes it; and</t>
  <t>the resulting state is otherwise valid: values have the types defined in this document, actions and statuses are permitted at the stage (<xref target="action-semantics"/>, <xref target="recipient-changes"/>), at most one of "message" and "rawMessage" changed, and header fields, addresses, and message content are well formed (<xref target="injection"/>).</t>
</list></t>

<t>Because validation compares states, it does not depend on which operations produced the result. A valid patch replaces the state, after which the MTA sets "decidedBy" of the action and of each changed recipient to the label of the registration. An invalid patch is discarded as a whole, is logged with the request identifier, and counts as a failure of the scanner (<xref target="failure"/>).</t>

</section>
<section anchor="ordering"><name>Ordering</name>

<t>Some properties are ordered from permissive to strict. Without "relax", a scanner may only keep them, move them in the strict direction, or move them between equally strict values:</t>

<texttable title="Ordered Properties" anchor="tab-ordering">
      <ttcol align='left'>Property</ttcol>
      <ttcol align='left'>Permissive to strict</ttcol>
      <c>/action</c>
      <c>accept, quarantine, then reject, discard, and disconnect (all equally strict)</c>
      <c>/envelope/to/*/route/tls</c>
      <c>none, opportunistic, required, verified</c>
</texttable>

<t>A null "tls" ranks as the requirement the MTA would otherwise apply. With "relax", the scanner may, for example, accept a message that the MTA's own policy rejected or that an earlier scanner quarantined. Such a grant makes the scanner the final authority for the property (<xref target="authority"/>). When several scanners with "relax" change the same property, the last one in the chain prevails.</t>

</section>
<section anchor="action-semantics"><name>Actions</name>

<t>At inbound stages, the action applies to the command being processed:</t>

<texttable title="Actions" anchor="tab-actions">
      <ttcol align='left'>Action</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>accept</c>
      <c>Continue normally.</c>
      <c>quarantine</c>
      <c>Accept the message and quarantine it instead of delivering it. Not permitted at the "connect" and "ehlo" stages.</c>
      <c>reject</c>
      <c>Send "/response", a 4xx or 5xx reply. At the "connect" stage it replaces the greeting and <bcp14>MUST</bcp14> be a 554 reply (<xref section="3.1" sectionFormat="of" target="RFC5321"/>); a temporary refusal of the connection is expressed with "disconnect". At the "rcpt" stage it rejects the recipient.</c>
      <c>discard</c>
      <c>At the "mail" and "data" stages: accept the message and drop it. At the "rcpt" stage: accept the recipient and set it to "discarded". Not permitted at the "connect" and "ehlo" stages.</c>
      <c>disconnect</c>
      <c>Send "/response", a 421 reply (<xref section="3.8" sectionFormat="of" target="RFC5321"/>), and close the connection.</c>
</texttable>

<t>The terminal actions are "reject", "discard", and "disconnect": after a scanner sets one, the MTA invokes no further scanners for that stage. At the "rcpt" stage, "reject" and "discard" apply only to the current recipient, and processing of the transaction continues.</t>

<t>At the start of each inbound stage, the action is the one the MTA's own policy assigns to the command, except that a "quarantine" set at the "mail" or "rcpt" stage, or a "discard" set at the "mail" stage, applies to the message and is kept for the later stages of the transaction. The chain runs even if that initial action is terminal, so that a scanner with "relax" can override it.</t>

<t>Outbound stages have no action: their outcome is the status of each recipient (<xref target="recipient-changes"/>). The chain ends early when every recipient of the invocation has been discarded.</t>

<t>"accept", "quarantine", and "discard" require a 2xx reply, or the intermediate reply SMTP requires for the command; "reject" requires a 4xx or 5xx reply; and "disconnect" requires a 421 reply. If "/response" does not satisfy this, the MTA uses its default reply for the action.</t>

</section>
<section anchor="recipient-changes"><name>Recipient Changes</name>

<t>Recipients cannot be removed from "/envelope/to"; a recipient is dropped by setting its status to "discarded". Recipients can be added at the "data" stage, with status "accepted". The status of a recipient can be changed as follows:</t>

<texttable title="Recipient Status Changes" anchor="tab-transitions">
      <ttcol align='left'>Stage</ttcol>
      <ttcol align='left'>From</ttcol>
      <ttcol align='left'>To</ttcol>
      <c>data</c>
      <c>accepted</c>
      <c>discarded</c>
      <c>route, transmit, delivery</c>
      <c>accepted, deferred</c>
      <c>deferred, failed, discarded</c>
      <c>delivery</c>
      <c>failed</c>
      <c>discarded</c>
      <c>dsn</c>
      <c>accepted</c>
      <c>discarded</c>
</texttable>

<t>Setting a failed recipient to "discarded" suppresses its DSN, and discarding the recipient of a DSN at the "dsn" stage suppresses that DSN. A scanner that sets a recipient to "failed" or "deferred" <bcp14>MAY</bcp14> also set its "response", which the MTA reports in the DSN; otherwise the MTA uses a default reply. At the "route" and "delivery" stages, "nextAttemptAt" and "nextDsnAt" can be changed for recipients that remain deferred.</t>

<t>Discarding a message or a recipient after accepting it, and suppressing a DSN, depart from <xref section="6.1" sectionFormat="of" target="RFC5321"/> and are subject to the cautions of <xref section="6.2" sectionFormat="of" target="RFC5321"/>. MTAs <bcp14>SHOULD</bcp14> log them, and operators <bcp14>SHOULD</bcp14> grant them only for unwanted mail or where the sender is notified by other means.</t>

<t>At the "rcpt" stage the outcome of the current recipient is set through "/action" and "/response", and the MTA records it in the recipient's status. Per-recipient outcomes after the DATA command are limited to "discarded" because SMTP gives a single reply to the message.</t>

</section>
<section anchor="routing"><name>Routing</name>

<t>At the "route" stage, a scanner can choose how each recipient of the job is delivered by changing its "route". A <strong>Route</strong> object has the following properties:</t>

<dl>
  <dt>name: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>A route the MTA has configured, such as a queue or transport name, carrying its own next hop, TLS, source address, credential, and throttling settings. The names a scanner may use are given by the "values" of its grant.</t>
  </dd>
  <dt>nextHop: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Host name or IP address to deliver to, overriding the route's next hop.</t>
  </dd>
  <dt>port: <spanx style="verb">UnsignedInt|null</spanx></dt>
  <dd>
    <t>Port to connect to.</t>
  </dd>
  <dt>mxLookup: <spanx style="verb">Boolean|null</spanx></dt>
  <dd>
    <t>Whether "nextHop" is a domain whose MX records are resolved (true) or a host to connect to directly (false).</t>
  </dd>
  <dt>sourceIp: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Local IP address to connect from.</t>
  </dd>
  <dt>tls: <spanx style="verb">String|null</spanx></dt>
  <dd>
    <t>Minimum TLS requirement: "none", "opportunistic", "required" (TLS without authentication of the server), or "verified" (TLS with the server authenticated by DANE <xref target="RFC7672"/>, SMTP MTA Strict Transport Security (MTA-STS) <xref target="RFC8461"/>, or PKIX <xref target="RFC5280"/>).</t>
  </dd>
</dl>

<t>A null property takes its value from the named route, or from the MTA's default routing when "name" is null as well. Two routes are different when any of their properties differ after null properties have been resolved. Because each property can be granted separately, an MTA can let a scanner choose only among predefined routes, or give it complete control over next hops, source addresses, and TLS. Credentials are never carried in a route; they belong to the named route.</t>

<t>The MTA <bcp14>MUST NOT</bcp14> deliver recipients with different routes in the same SMTP transaction. Otherwise, how recipients are batched remains implementation-defined. A route change persists for the recipient until changed again, and the "route" stage runs before every attempt, so a scanner can fail over based on "attempts" and "lastAttempt". The "delivery" stage runs once for the job, after all of its partial deliveries.</t>

<t>A grant that relaxes "tls" lets the scanner lower the requirement below the policy published by the destination, as a "TLS-Required: No" header field does (<xref section="4.2.2" sectionFormat="of" target="RFC8689"/>), for example to deliver a TLS report to a domain whose TLS is broken; lowering it to "none" also skips STARTTLS. Like that header field, it does not apply to a message sent with the REQUIRETLS parameter (<xref section="4.1" sectionFormat="of" target="RFC8689"/>). The MTA <bcp14>SHOULD</bcp14> log every route change together with the registration label and the recipient, and <bcp14>MUST</bcp14> apply its loop detection to scanner-chosen next hops.</t>

</section>
<section anchor="transmission"><name>Transmission</name>

<t>The "transmit" stage runs once for each SMTP transaction, after the MTA has grouped the recipients of the job into transactions, so the request carries the exact reverse-path and recipients that will be sent. A scanner can change the message for this transaction only, for example to add signatures that cover the envelope of each hop, such as DKIM2 signatures <xref target="I-D.ietf-dkim-dkim2-spec"/>. Within the envelope, only recipient status can be changed. Status changes are kept; changes to the message apply to this transaction only and are not kept in the queue. The stage runs again for every attempt, so signatures carry the time and envelope of the attempt that uses them. A DSN is changed the same way at the "dsn" stage.</t>

</section>
<section anchor="examples-1"><name>Examples</name>

<t>Add header fields and pass a score to later scanners:</t>

<figure><sourcecode type="json"><![CDATA[
[
  {"op": "add", "path": "/message/headers/0",
   "value": {"name": "X-Spam-Status", "value": " No, score=0.4"}},
  {"op": "add", "path": "/ext/org.example.spam",
   "value": {"score": 0.4, "symbols": ["DKIM_VALID"]}}
]
]]></sourcecode></figure>

<t>Reject a message:</t>

<figure><sourcecode type="json"><![CDATA[
[
  {"op": "replace", "path": "/action", "value": "reject"},
  {"op": "replace", "path": "/response",
   "value": {"code": 550, "enhancedCode": "5.7.1",
             "message": "Message rejected: virus detected"}}
]
]]></sourcecode></figure>

<t>Slow down a suspicious client at the "connect" stage:</t>

<figure><sourcecode type="json"><![CDATA[
[
  {"op": "add", "path": "/response/delayMs", "value": 15000}
]
]]></sourcecode></figure>

<t>Route the first recipient through a virtual private network (VPN), but only if no other scanner has already routed it:</t>

<figure><sourcecode type="json"><![CDATA[
[
  {"op": "test", "path": "/envelope/to/0/route/name",
   "value": null},
  {"op": "replace", "path": "/envelope/to/0/route/name",
   "value": "vpn-partner"}
]
]]></sourcecode></figure>

<t>Drop a failed recipient without a DSN at the "delivery" stage:</t>

<figure><sourcecode type="json"><![CDATA[
[
  {"op": "replace", "path": "/envelope/to/2/status",
   "value": "discarded"}
]
]]></sourcecode></figure>

</section>
<section anchor="hook-error-responses"><name>Error Responses</name>

<t>A scanner that cannot process a request returns a 4xx or 5xx status with the error body of <xref target="error-list"/>:</t>

<t><list style="symbols">
  <t>401: Credentials missing or invalid. The MTA <bcp14>MUST NOT</bcp14> retry with the same credentials.</t>
  <t>403: Credentials not authorized for the registration. The MTA <bcp14>MUST NOT</bcp14> retry.</t>
  <t>404: Registration unknown. The MTA registers again.</t>
  <t>413: Request body larger than the scanner accepts. The MTA <bcp14>MUST NOT</bcp14> retry it.</t>
  <t>422: The request uses unsupported properties or values. The MTA <bcp14>MUST NOT</bcp14> retry it.</t>
  <t>429: Rate limited. The MTA <bcp14>SHOULD NOT</bcp14> send further requests under the registration until the time given by Retry-After, if any, and applies onFailure to invocations meanwhile.</t>
  <t>5xx: Transient error. The MTA <bcp14>MAY</bcp14> retry (<xref target="retry"/>).</t>
</list></t>

<t>Any other status is a failure that the MTA <bcp14>MUST NOT</bcp14> retry. MTAs <bcp14>SHOULD</bcp14> alert their operators to 401, 403, 413, and 422, which persist until the configuration changes; with "tempfail" they can hold mail until the message expires.</t>

</section>
</section>
<section anchor="transport"><name>Transport</name>

<section anchor="http-and-tls"><name>HTTP and TLS</name>

<t>Implementations <bcp14>MUST</bcp14> support HTTP/1.1 <xref target="RFC9112"/> and <bcp14>SHOULD</bcp14> support HTTP/2 <xref target="RFC9113"/>; they <bcp14>MAY</bcp14> support HTTP/3 <xref target="RFC9114"/>. MTAs <bcp14>SHOULD</bcp14> reuse connections to a scanner.</t>

<t>All MTA Hooks traffic <bcp14>MUST</bcp14> use TLS 1.2 or later and follow the recommendations of <xref target="RFC9325"/>; implementations <bcp14>SHOULD</bcp14> support TLS 1.3 <xref target="RFC9846"/>. The MTA <bcp14>MUST</bcp14> validate the scanner's certificate; private certificate authorities may be configured, but validation <bcp14>SHOULD NOT</bcp14> be disabled.</t>

</section>
<section anchor="retry"><name>Retries</name>

<t>On a network error or a 5xx status, the MTA <bcp14>MAY</bcp14> retry within the request's timeoutMs, with exponential backoff and jitter.</t>

</section>
<section anchor="failure"><name>Failure Handling</name>

<t>A scanner fails when it does not answer within timeoutMs, when all retries fail, when it returns a status other than 200 or 204, or when its patch is invalid (<xref target="validation"/>). The MTA then leaves the state unchanged and acts according to the subscription's onFailure:</t>

<dl>
  <dt>continue:</dt>
  <dd>
    <t>Proceed with the next scanner, as if the scanner had made no changes.</t>
  </dd>
  <dt>tempfail:</dt>
  <dd>
    <t>At the "connect" and "ehlo" stages, answer with a 421 4.3.0 reply and close the connection; at the other inbound stages, answer the current command with a 451 4.3.0 reply (<xref section="4.3.2" sectionFormat="of" target="RFC5321"/>). At the "route" and "transmit" stages, leave the invocation's accepted and deferred recipients deferred and retry them later; a transaction skipped this way does not count as an attempt. At the "dsn" stage, keep the DSN queued and retry it later. At the "delivery" stage, outcomes are already final, so the failure only means the scanner's changes are lost; a scanner that must reliably suppress DSNs does so at the "dsn" stage.</t>
  </dd>
</dl>

<t>"tempfail" is appropriate where a missing decision must not let mail through, such as mandatory routing or mandatory archiving. It can stop the affected mail flow while the scanner is unavailable, so scanners used this way <bcp14>SHOULD</bcp14> be deployed redundantly, and subscription filters <bcp14>SHOULD</bcp14> limit it to the mail that requires it. MTAs <bcp14>SHOULD</bcp14> temporarily stop calling a scanner that fails repeatedly, and apply its onFailure in the meantime.</t>

</section>
</section>
<section anchor="implementation-status"><name>Implementation Status</name>

<t>Note to the RFC Editor: please remove this section, and the reference to <xref target="RFC7942"/>, before publication.</t>

<t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>. The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs. Please note that the listing of any individual implementation here does not imply endorsement by the IETF. Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors. This is not intended as, and must not be construed to be, a catalog of available implementations or their features. Readers are advised to note that other implementations may exist.</t>

<dl>
  <dt>Stalwart Mail Server:</dt>
  <dd>
    <t>Organization: Stalwart Labs LLC, with which the author is affiliated. Role: MTA. Coverage: an earlier revision of this specification (-01). Licensing: AGPL-3.0 for the open-source edition. Contact: mauro@stalw.art.</t>
  </dd>
</dl>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="trust-model"><name>Trust Model</name>

<t>The MTA acts only as an HTTP client and exposes no endpoint to scanners. This removes attacks such as registration floods against the MTA and request forgery through callbacks. The scanner operator decides which MTAs may register and issues credentials; the MTA operator decides which scanners to call and what each may change.</t>

</section>
<section anchor="authority"><name>Authority of Scanners</name>

<t>A scanner can only change what its grants cover, and by default only toward stricter processing. Grants that relax ordered properties, change routes, or rewrite content make the scanner part of the trusted base for those decisions: a compromised scanner with full routing authority can redirect or exfiltrate mail, and one with "relax" on "/action" can let malicious mail through. Operators <bcp14>SHOULD</bcp14> give such grants only to scanners they trust accordingly, limit them with subscription filters, and log their use. The MTA <bcp14>MUST</bcp14> enforce grants itself and <bcp14>MUST NOT</bcp14> rely on scanners respecting them.</t>

<t>Scanner-chosen next hops and ports can also direct the MTA's connections at internal services. An MTA <bcp14>SHOULD</bcp14> restrict them by configuration, for example through the "values" of the grant on "nextHop", and <bcp14>MUST</bcp14> apply to them the same address restrictions it applies to next hops found in the DNS.</t>

</section>
<section anchor="credentials"><name>Credentials</name>

<t>Credentials <bcp14>SHOULD</bcp14> be issued per MTA instance, rotated, revoked when an instance is decommissioned, and kept out of logs and diagnostics. Bearer tokens <bcp14>MUST</bcp14> have at least 128 bits of entropy, and the security considerations of <xref target="RFC6750"/> apply. Scanners <bcp14>SHOULD</bcp14> apply authorization per MTA identity at registration and <bcp14>SHOULD</bcp14> rate limit registrations per identity. The discovery document is unauthenticated and <bcp14>SHOULD</bcp14> be rate limited.</t>

</section>
<section anchor="denial-of-service"><name>Denial of Service</name>

<t>Slow or failing scanners can tie up MTA resources. MTAs <bcp14>MUST</bcp14> enforce timeouts and <bcp14>SHOULD</bcp14> limit concurrent requests per scanner. Delayed replies hold SMTP connections open; besides capping delayMs (<xref target="smtp-response"/>), the MTA <bcp14>SHOULD</bcp14> limit how many delayed replies it serves at once. Recipients added at the "data" stage can amplify a message, so MTAs <bcp14>SHOULD</bcp14> limit how many a patch may add. Scanners <bcp14>SHOULD</bcp14> limit request rate, concurrency, and body size per registration.</t>

</section>
<section anchor="injection"><name>Injection</name>

<t>The MTA <bcp14>MUST</bcp14> validate everything a patch writes: header field names and values <bcp14>MUST NOT</bcp14> allow injection of a carriage return (CR) or line feed (LF), or malformed encoded words <xref target="RFC2047"/>; added or changed addresses <bcp14>MUST</bcp14> be syntactically valid and subject to the MTA's relay and recipient policy; and body changes <bcp14>MUST</bcp14> produce well-formed MIME <xref target="RFC2045"/>.</t>

</section>
<section anchor="unverified-data"><name>Unverified Data</name>

<t>Certificates that did not verify, proxy information, and client-supplied values such as the EHLO argument are assertions by the peer. Scanners <bcp14>MUST NOT</bcp14> treat them as authenticated identities. A trace identifier received from outside the MTA's administrative domain can be chosen by an attacker to link unrelated mail, so MTAs <bcp14>MUST NOT</bcp14> accept one from untrusted sources.</t>

</section>
</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>Hook requests can contain message content, addresses, client IP addresses, and authentication identities. MTAs <bcp14>SHOULD</bcp14> send only the properties a scanner needs, and the subscription mechanism makes this possible per stage and per part of the mail stream. Scanner operators <bcp14>SHOULD</bcp14> avoid logging content and personal data, and <bcp14>SHOULD</bcp14> limit retention to what their function requires.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="well-known-uri"><name>Well-Known URI</name>

<t>IANA is requested to register the following well-known URI <xref target="RFC8615"/>:</t>

<t><list style="symbols">
  <t>URI suffix: mta-hooks</t>
  <t>Change controller: IETF</t>
  <t>Specification document: this document</t>
  <t>Status: permanent</t>
</list></t>

</section>
<section anchor="http-field-names"><name>HTTP Field Names</name>

<t>IANA is requested to register the following field names in the "Hypertext Transfer Protocol (HTTP) Field Name Registry" (<xref section="16.3.1" sectionFormat="of" target="RFC9110"/>), with status "permanent", no structured type, and this document as the reference: MTA-Hooks-Registration, MTA-Hooks-Request-Id, MTA-Hooks-Context.</t>

</section>
<section anchor="mta-hooks-registries"><name>MTA Hooks Registries</name>

<t>IANA is requested to create a new registry group named "MTA Hooks" containing the four registries below. For all of them, new registrations require Specification Required <xref target="RFC8126"/>, and the change controller of the initial entries is the IETF.</t>

<t>The designated experts <bcp14>SHOULD</bcp14> check that a name is a short identifier in the style of the existing entries and does not duplicate the semantics of an existing entry. For a stage, they <bcp14>SHOULD</bcp14> check that the specification defines when it is invoked, what the request contains, and which changes are permitted. For an action, they <bcp14>SHOULD</bcp14> check that its meaning is defined at every stage where it is permitted, and its place in the ordering of <xref target="ordering"/>.</t>

<section anchor="mta-hooks-stages"><name>MTA Hooks Stages</name>

<t>Each entry gives the name, the direction (inbound or outbound), when the stage is invoked, the reference, and the change controller.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Direction</ttcol>
      <ttcol align='left'>Invoked</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>connect</c>
      <c>inbound</c>
      <c>Client connected, before the greeting</c>
      <c>RFC XXXX</c>
      <c>ehlo</c>
      <c>inbound</c>
      <c>After each EHLO or HELO command</c>
      <c>RFC XXXX</c>
      <c>mail</c>
      <c>inbound</c>
      <c>After each MAIL command</c>
      <c>RFC XXXX</c>
      <c>rcpt</c>
      <c>inbound</c>
      <c>After each RCPT command</c>
      <c>RFC XXXX</c>
      <c>data</c>
      <c>inbound</c>
      <c>After the message content</c>
      <c>RFC XXXX</c>
      <c>route</c>
      <c>outbound</c>
      <c>Before each delivery attempt of a job</c>
      <c>RFC XXXX</c>
      <c>transmit</c>
      <c>outbound</c>
      <c>Before each SMTP transaction</c>
      <c>RFC XXXX</c>
      <c>delivery</c>
      <c>outbound</c>
      <c>After the attempts of a job</c>
      <c>RFC XXXX</c>
      <c>dsn</c>
      <c>outbound</c>
      <c>Before sending a generated DSN</c>
      <c>RFC XXXX</c>
</texttable>

</section>
<section anchor="mta-hooks-actions"><name>MTA Hooks Actions</name>

<t>Each entry gives the name, whether the action is terminal, its rank in the ordering of <xref target="ordering"/> (higher is stricter), the reference, and the change controller. The meaning of each initial entry at each stage is given in <xref target="tab-actions"/>.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Terminal</ttcol>
      <ttcol align='left'>Rank</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>accept</c>
      <c>no</c>
      <c>0</c>
      <c>RFC XXXX</c>
      <c>quarantine</c>
      <c>no</c>
      <c>1</c>
      <c>RFC XXXX</c>
      <c>reject</c>
      <c>yes</c>
      <c>2</c>
      <c>RFC XXXX</c>
      <c>discard</c>
      <c>yes</c>
      <c>2</c>
      <c>RFC XXXX</c>
      <c>disconnect</c>
      <c>yes</c>
      <c>2</c>
      <c>RFC XXXX</c>
</texttable>

</section>
<section anchor="iana-counters"><name>MTA Hooks Session Counters</name>

<t>Each entry gives the name, its meaning, the reference, and the change controller. The reference of every initial entry is RFC XXXX.</t>

<texttable title="Initial Session Counters" anchor="tab-counters">
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>commands</c>
      <c>SMTP commands received</c>
      <c>errors</c>
      <c>Commands answered with a 4xx or 5xx reply</c>
      <c>invalidCommands</c>
      <c>Commands that were unknown or syntactically invalid</c>
      <c>rsets</c>
      <c>RSET commands</c>
      <c>transactions</c>
      <c>MAIL commands accepted, including the current transaction</c>
      <c>messagesAccepted</c>
      <c>Messages accepted for delivery</c>
      <c>messagesRejected</c>
      <c>Messages rejected after DATA</c>
      <c>pregreetBytes</c>
      <c>Octets the client sent before the greeting</c>
      <c>pipeliningViolations</c>
      <c>Commands sent ahead of a reply without PIPELINING, or across a synchronization point</c>
      <c>bareLineEnds</c>
      <c>Lines ended by a bare LF or bare CR</c>
      <c>firstCommandDelayMs</c>
      <c>Milliseconds between the greeting and the first command</c>
</texttable>

</section>
<section anchor="mta-hooks-error-codes"><name>MTA Hooks Error Codes</name>

<t>Each entry gives the code, the HTTP status it is used with, its meaning, the reference, and the change controller. The initial entries are those of <xref target="tab-errors"/>, each with the reference RFC XXXX.</t>

</section>
</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2045">
  <front>
    <title>Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</title>
    <author fullname="N. Freed" initials="N." surname="Freed"/>
    <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
    <date month="November" year="1996"/>
    <abstract>
      <t>This initial document specifies the various headers used to describe the structure of MIME messages. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2045"/>
  <seriesInfo name="DOI" value="10.17487/RFC2045"/>
</reference>
<reference anchor="RFC2047">
  <front>
    <title>MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text</title>
    <author fullname="K. Moore" initials="K." surname="Moore"/>
    <date month="November" year="1996"/>
    <abstract>
      <t>This particular document is the third document in the series. It describes extensions to RFC 822 to allow non-US-ASCII text data in Internet mail header fields. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2047"/>
  <seriesInfo name="DOI" value="10.17487/RFC2047"/>
</reference>
<reference anchor="RFC3339">
  <front>
    <title>Date and Time on the Internet: Timestamps</title>
    <author fullname="G. Klyne" initials="G." surname="Klyne"/>
    <author fullname="C. Newman" initials="C." surname="Newman"/>
    <date month="July" year="2002"/>
    <abstract>
      <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3339"/>
  <seriesInfo name="DOI" value="10.17487/RFC3339"/>
</reference>
<reference anchor="RFC3461">
  <front>
    <title>Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs)</title>
    <author fullname="K. Moore" initials="K." surname="Moore"/>
    <date month="January" year="2003"/>
    <abstract>
      <t>This memo defines an extension to the Simple Mail Transfer Protocol (SMTP) service, which allows an SMTP client to specify (a) that Delivery Status Notifications (DSNs) should be generated under certain conditions, (b) whether such notifications should return the contents of the message, and (c) additional information, to be returned with a DSN, that allows the sender to identify both the recipient(s) for which the DSN was issued, and the transaction in which the original message was sent. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3461"/>
  <seriesInfo name="DOI" value="10.17487/RFC3461"/>
</reference>
<reference anchor="RFC3463">
  <front>
    <title>Enhanced Mail System Status Codes</title>
    <author fullname="G. Vaudreuil" initials="G." surname="Vaudreuil"/>
    <date month="January" year="2003"/>
    <abstract>
      <t>This document defines a set of extended status codes for use within the mail system for delivery status reports, tracking, and improved diagnostics. In combination with other information provided in the Delivery Status Notification (DSN) delivery report, these codes facilitate media and language independent rendering of message delivery status. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3463"/>
  <seriesInfo name="DOI" value="10.17487/RFC3463"/>
</reference>
<reference anchor="RFC3986">
  <front>
    <title>Uniform Resource Identifier (URI): Generic Syntax</title>
    <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
    <author fullname="R. Fielding" initials="R." surname="Fielding"/>
    <author fullname="L. Masinter" initials="L." surname="Masinter"/>
    <date month="January" year="2005"/>
    <abstract>
      <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="66"/>
  <seriesInfo name="RFC" value="3986"/>
  <seriesInfo name="DOI" value="10.17487/RFC3986"/>
</reference>
<reference anchor="RFC4291">
  <front>
    <title>IP Version 6 Addressing Architecture</title>
    <author fullname="R. Hinden" initials="R." surname="Hinden"/>
    <author fullname="S. Deering" initials="S." surname="Deering"/>
    <date month="February" year="2006"/>
    <abstract>
      <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol. The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
      <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture". [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4291"/>
  <seriesInfo name="DOI" value="10.17487/RFC4291"/>
</reference>
<reference anchor="RFC4422">
  <front>
    <title>Simple Authentication and Security Layer (SASL)</title>
    <author fullname="A. Melnikov" initials="A." role="editor" surname="Melnikov"/>
    <author fullname="K. Zeilenga" initials="K." role="editor" surname="Zeilenga"/>
    <date month="June" year="2006"/>
    <abstract>
      <t>The Simple Authentication and Security Layer (SASL) is a framework for providing authentication and data security services in connection-oriented protocols via replaceable mechanisms. It provides a structured interface between protocols and mechanisms. The resulting framework allows new protocols to reuse existing mechanisms and allows old protocols to make use of new mechanisms. The framework also provides a protocol for securing subsequent protocol exchanges within a data security layer.</t>
      <t>This document describes how a SASL mechanism is structured, describes how protocols include support for SASL, and defines the protocol for carrying a data security layer over a connection. In addition, this document defines one SASL mechanism, the EXTERNAL mechanism.</t>
      <t>This document obsoletes RFC 2222. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4422"/>
  <seriesInfo name="DOI" value="10.17487/RFC4422"/>
</reference>
<reference anchor="RFC4632">
  <front>
    <title>Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan</title>
    <author fullname="V. Fuller" initials="V." surname="Fuller"/>
    <author fullname="T. Li" initials="T." surname="Li"/>
    <date month="August" year="2006"/>
    <abstract>
      <t>This memo discusses the strategy for address assignment of the existing 32-bit IPv4 address space with a view toward conserving the address space and limiting the growth rate of global routing state. This document obsoletes the original Classless Inter-domain Routing (CIDR) spec in RFC 1519, with changes made both to clarify the concepts it introduced and, after more than twelve years, to update the Internet community on the results of deploying the technology described. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="122"/>
  <seriesInfo name="RFC" value="4632"/>
  <seriesInfo name="DOI" value="10.17487/RFC4632"/>
</reference>
<reference anchor="RFC4648">
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <date month="October" year="2006"/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4648"/>
  <seriesInfo name="DOI" value="10.17487/RFC4648"/>
</reference>
<reference anchor="RFC4954">
  <front>
    <title>SMTP Service Extension for Authentication</title>
    <author fullname="R. Siemborski" initials="R." role="editor" surname="Siemborski"/>
    <author fullname="A. Melnikov" initials="A." role="editor" surname="Melnikov"/>
    <date month="July" year="2007"/>
    <abstract>
      <t>This document defines a Simple Mail Transport Protocol (SMTP) extension whereby an SMTP client may indicate an authentication mechanism to the server, perform an authentication protocol exchange, and optionally negotiate a security layer for subsequent protocol interactions during this session. This extension includes a profile of the Simple Authentication and Security Layer (SASL) for SMTP.</t>
      <t>This document obsoletes RFC 2554. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4954"/>
  <seriesInfo name="DOI" value="10.17487/RFC4954"/>
</reference>
<reference anchor="RFC5234">
  <front>
    <title>Augmented BNF for Syntax Specifications: ABNF</title>
    <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
    <author fullname="P. Overell" initials="P." surname="Overell"/>
    <date month="January" year="2008"/>
    <abstract>
      <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="68"/>
  <seriesInfo name="RFC" value="5234"/>
  <seriesInfo name="DOI" value="10.17487/RFC5234"/>
</reference>
<reference anchor="RFC5280">
  <front>
    <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
    <author fullname="D. Cooper" initials="D." surname="Cooper"/>
    <author fullname="S. Santesson" initials="S." surname="Santesson"/>
    <author fullname="S. Farrell" initials="S." surname="Farrell"/>
    <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <author fullname="W. Polk" initials="W." surname="Polk"/>
    <date month="May" year="2008"/>
    <abstract>
      <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5280"/>
  <seriesInfo name="DOI" value="10.17487/RFC5280"/>
</reference>
<reference anchor="RFC5321">
  <front>
    <title>Simple Mail Transfer Protocol</title>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <date month="October" year="2008"/>
    <abstract>
      <t>This document is a specification of the basic protocol for Internet electronic mail transport. It consolidates, updates, and clarifies several previous documents, making all or parts of most of them obsolete. It covers the SMTP extension mechanisms and best practices for the contemporary Internet, but does not provide details about particular extensions. Although SMTP was designed as a mail transport and delivery protocol, this specification also contains information that is important to its use as a "mail submission" protocol for "split-UA" (User Agent) mail reading systems and mobile environments. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5321"/>
  <seriesInfo name="DOI" value="10.17487/RFC5321"/>
</reference>
<reference anchor="RFC5322">
  <front>
    <title>Internet Message Format</title>
    <author fullname="P. Resnick" initials="P." role="editor" surname="Resnick"/>
    <date month="October" year="2008"/>
    <abstract>
      <t>This document specifies the Internet Message Format (IMF), a syntax for text messages that are sent between computer users, within the framework of "electronic mail" messages. This specification is a revision of Request For Comments (RFC) 2822, which itself superseded Request For Comments (RFC) 822, "Standard for the Format of ARPA Internet Text Messages", updating it to reflect current practice and incorporating incremental changes that were specified in other RFCs. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5322"/>
  <seriesInfo name="DOI" value="10.17487/RFC5322"/>
</reference>
<reference anchor="RFC6750">
  <front>
    <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
    <author fullname="M. Jones" initials="M." surname="Jones"/>
    <author fullname="D. Hardt" initials="D." surname="Hardt"/>
    <date month="October" year="2012"/>
    <abstract>
      <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6750"/>
  <seriesInfo name="DOI" value="10.17487/RFC6750"/>
</reference>
<reference anchor="RFC6901">
  <front>
    <title>JavaScript Object Notation (JSON) Pointer</title>
    <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan"/>
    <author fullname="K. Zyp" initials="K." surname="Zyp"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <date month="April" year="2013"/>
    <abstract>
      <t>JSON Pointer defines a string syntax for identifying a specific value within a JavaScript Object Notation (JSON) document.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6901"/>
  <seriesInfo name="DOI" value="10.17487/RFC6901"/>
</reference>
<reference anchor="RFC6902">
  <front>
    <title>JavaScript Object Notation (JSON) Patch</title>
    <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <date month="April" year="2013"/>
    <abstract>
      <t>JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JavaScript Object Notation (JSON) document; it is suitable for use with the HTTP PATCH method. The "application/json-patch+json" media type is used to identify such patch documents.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6902"/>
  <seriesInfo name="DOI" value="10.17487/RFC6902"/>
</reference>
<reference anchor="RFC7672">
  <front>
    <title>SMTP Security via Opportunistic DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS)</title>
    <author fullname="V. Dukhovni" initials="V." surname="Dukhovni"/>
    <author fullname="W. Hardaker" initials="W." surname="Hardaker"/>
    <date month="October" year="2015"/>
    <abstract>
      <t>This memo describes a downgrade-resistant protocol for SMTP transport security between Message Transfer Agents (MTAs), based on the DNS-Based Authentication of Named Entities (DANE) TLSA DNS record. Adoption of this protocol enables an incremental transition of the Internet email backbone to one using encrypted and authenticated Transport Layer Security (TLS).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7672"/>
  <seriesInfo name="DOI" value="10.17487/RFC7672"/>
</reference>
<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</reference>
<reference anchor="RFC8460">
  <front>
    <title>SMTP TLS Reporting</title>
    <author fullname="D. Margolis" initials="D." surname="Margolis"/>
    <author fullname="A. Brotman" initials="A." surname="Brotman"/>
    <author fullname="B. Ramakrishnan" initials="B." surname="Ramakrishnan"/>
    <author fullname="J. Jones" initials="J." surname="Jones"/>
    <author fullname="M. Risher" initials="M." surname="Risher"/>
    <date month="September" year="2018"/>
    <abstract>
      <t>A number of protocols exist for establishing encrypted channels between SMTP Mail Transfer Agents (MTAs), including STARTTLS, DNS- Based Authentication of Named Entities (DANE) TLSA, and MTA Strict Transport Security (MTA-STS). These protocols can fail due to misconfiguration or active attack, leading to undelivered messages or delivery over unencrypted or unauthenticated channels. This document describes a reporting mechanism and format by which sending systems can share statistics and specific information about potential failures with recipient domains. Recipient domains can then use this information to both detect potential attacks and diagnose unintentional misconfigurations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8460"/>
  <seriesInfo name="DOI" value="10.17487/RFC8460"/>
</reference>
<reference anchor="RFC8461">
  <front>
    <title>SMTP MTA Strict Transport Security (MTA-STS)</title>
    <author fullname="D. Margolis" initials="D." surname="Margolis"/>
    <author fullname="M. Risher" initials="M." surname="Risher"/>
    <author fullname="B. Ramakrishnan" initials="B." surname="Ramakrishnan"/>
    <author fullname="A. Brotman" initials="A." surname="Brotman"/>
    <author fullname="J. Jones" initials="J." surname="Jones"/>
    <date month="September" year="2018"/>
    <abstract>
      <t>SMTP MTA Strict Transport Security (MTA-STS) is a mechanism enabling mail service providers (SPs) to declare their ability to receive Transport Layer Security (TLS) secure SMTP connections and to specify whether sending SMTP servers should refuse to deliver to MX hosts that do not offer TLS with a trusted server certificate.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8461"/>
  <seriesInfo name="DOI" value="10.17487/RFC8461"/>
</reference>
<reference anchor="RFC8601">
  <front>
    <title>Message Header Field for Indicating Message Authentication Status</title>
    <author fullname="M. Kucherawy" initials="M." surname="Kucherawy"/>
    <date month="May" year="2019"/>
    <abstract>
      <t>This document specifies a message header field called "Authentication-Results" for use with electronic mail messages to indicate the results of message authentication efforts. Any receiver-side software, such as mail filters or Mail User Agents (MUAs), can use this header field to relay that information in a convenient and meaningful way to users or to make sorting and filtering decisions.</t>
      <t>This document obsoletes RFC 7601.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8601"/>
  <seriesInfo name="DOI" value="10.17487/RFC8601"/>
</reference>
<reference anchor="RFC8620">
  <front>
    <title>The JSON Meta Application Protocol (JMAP)</title>
    <author fullname="N. Jenkins" initials="N." surname="Jenkins"/>
    <author fullname="C. Newman" initials="C." surname="Newman"/>
    <date month="July" year="2019"/>
    <abstract>
      <t>This document specifies a protocol for clients to efficiently query, fetch, and modify JSON-based data objects, with support for push notification of changes and fast resynchronisation and for out-of- band binary data upload/download.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8620"/>
  <seriesInfo name="DOI" value="10.17487/RFC8620"/>
</reference>
<reference anchor="RFC8621">
  <front>
    <title>The JSON Meta Application Protocol (JMAP) for Mail</title>
    <author fullname="N. Jenkins" initials="N." surname="Jenkins"/>
    <author fullname="C. Newman" initials="C." surname="Newman"/>
    <date month="August" year="2019"/>
    <abstract>
      <t>This document specifies a data model for synchronising email data with a server using the JSON Meta Application Protocol (JMAP). Clients can use this to efficiently search, access, organise, and send messages, and to get push notifications for fast resynchronisation when new messages are delivered or a change is made in another client.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8621"/>
  <seriesInfo name="DOI" value="10.17487/RFC8621"/>
</reference>
<reference anchor="RFC8689">
  <front>
    <title>SMTP Require TLS Option</title>
    <author fullname="J. Fenton" initials="J." surname="Fenton"/>
    <date month="November" year="2019"/>
    <abstract>
      <t>The SMTP STARTTLS option, used in negotiating transport-level encryption of SMTP connections, is not as useful from a security standpoint as it might be because of its opportunistic nature; message delivery is, by default, prioritized over security. This document describes an SMTP service extension, REQUIRETLS, and a message header field, TLS-Required. If the REQUIRETLS option or TLS-Required message header field is used when sending a message, it asserts a request on the part of the message sender to override the default negotiation of TLS, either by requiring that TLS be negotiated when the message is relayed or by requesting that recipient-side policy mechanisms such as MTA-STS and DNS-Based Authentication of Named Entities (DANE) be ignored when relaying a message for which security is unimportant.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8689"/>
  <seriesInfo name="DOI" value="10.17487/RFC8689"/>
</reference>
<reference anchor="RFC8949">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <date month="December" year="2020"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>
<reference anchor="RFC9110">
  <front>
    <title>HTTP Semantics</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
      <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="97"/>
  <seriesInfo name="RFC" value="9110"/>
  <seriesInfo name="DOI" value="10.17487/RFC9110"/>
</reference>
<reference anchor="RFC9112">
  <front>
    <title>HTTP/1.1</title>
    <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
      <t>This document obsoletes portions of RFC 7230.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="99"/>
  <seriesInfo name="RFC" value="9112"/>
  <seriesInfo name="DOI" value="10.17487/RFC9112"/>
</reference>
<reference anchor="RFC9113">
  <front>
    <title>HTTP/2</title>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
      <t>This document obsoletes RFCs 7540 and 8740.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9113"/>
  <seriesInfo name="DOI" value="10.17487/RFC9113"/>
</reference>
<reference anchor="RFC9325">
  <front>
    <title>Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
    <author fullname="T. Fossati" initials="T." surname="Fossati"/>
    <date month="November" year="2022"/>
    <abstract>
      <t>Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) are used to protect data exchanged over a wide range of application protocols and can also form the basis for secure transport protocols. Over the years, the industry has witnessed several serious attacks on TLS and DTLS, including attacks on the most commonly used cipher suites and their modes of operation. This document provides the latest recommendations for ensuring the security of deployed services that use TLS and DTLS. These recommendations are applicable to the majority of use cases.</t>
      <t>RFC 7525, an earlier version of the TLS recommendations, was published when the industry was transitioning to TLS 1.2. Years later, this transition is largely complete, and TLS 1.3 is widely available. This document updates the guidance given the new environment and obsoletes RFC 7525. In addition, this document updates RFCs 5288 and 6066 in view of recent attacks.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="195"/>
  <seriesInfo name="RFC" value="9325"/>
  <seriesInfo name="DOI" value="10.17487/RFC9325"/>
</reference>
<reference anchor="RFC9457">
  <front>
    <title>Problem Details for HTTP APIs</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <author fullname="E. Wilde" initials="E." surname="Wilde"/>
    <author fullname="S. Dalal" initials="S." surname="Dalal"/>
    <date month="July" year="2023"/>
    <abstract>
      <t>This document defines a "problem detail" to carry machine-readable details of errors in HTTP response content to avoid the need to define new error response formats for HTTP APIs.</t>
      <t>This document obsoletes RFC 7807.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9457"/>
  <seriesInfo name="DOI" value="10.17487/RFC9457"/>
</reference>
<reference anchor="RFC9846">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="July" year="2026"/>
    <abstract>
      <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t>This document obsoletes RFC 8446, which specified TLS 1.3. This document obsoletes RFC 5246 (specifying TLS 1.2) and RFCs 5077, 6961, 7627, and 8422, all of which pertain to TLS 1.2 or earlier, and updates RFCs 5705 and 6066. This document also specifies new requirements for TLS 1.2 implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9846"/>
  <seriesInfo name="DOI" value="10.17487/RFC9846"/>
</reference>

<reference anchor="ISO3166-1" >
  <front>
    <title>Codes for the representation of names of countries and their subdivisions -- Part 1: Country code</title>
    <author >
      <organization>ISO</organization>
    </author>
    <date year="2020"/>
  </front>
  <seriesInfo name="ISO" value="3166-1:2020"/>
</reference>
<reference anchor="X.690" >
  <front>
    <title>Information technology - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
    <author >
      <organization>ITU-T</organization>
    </author>
    <date year="2021"/>
  </front>
  <seriesInfo name="ITU-T Recommendation" value="X.690"/>
</reference>


<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC8615">
  <front>
    <title>Well-Known Uniform Resource Identifiers (URIs)</title>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <date month="May" year="2019"/>
    <abstract>
      <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
      <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8615"/>
  <seriesInfo name="DOI" value="10.17487/RFC8615"/>
</reference>
<reference anchor="RFC8126">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC6376">
  <front>
    <title>DomainKeys Identified Mail (DKIM) Signatures</title>
    <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
    <author fullname="T. Hansen" initials="T." role="editor" surname="Hansen"/>
    <author fullname="M. Kucherawy" initials="M." role="editor" surname="Kucherawy"/>
    <date month="September" year="2011"/>
    <abstract>
      <t>DomainKeys Identified Mail (DKIM) permits a person, role, or organization that owns the signing domain to claim some responsibility for a message by associating the domain with the message. This can be an author's organization, an operational relay, or one of their agents. DKIM separates the question of the identity of the Signer of the message from the purported author of the message. Assertion of responsibility is validated through a cryptographic signature and by querying the Signer's domain directly to retrieve the appropriate public key. Message transit from author to recipient is through relays that typically make no substantive change to the message content and thus preserve the DKIM signature.</t>
      <t>This memo obsoletes RFC 4871 and RFC 5672. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="76"/>
  <seriesInfo name="RFC" value="6376"/>
  <seriesInfo name="DOI" value="10.17487/RFC6376"/>
</reference>
<reference anchor="RFC7208">
  <front>
    <title>Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1</title>
    <author fullname="S. Kitterman" initials="S." surname="Kitterman"/>
    <date month="April" year="2014"/>
    <abstract>
      <t>Email on the Internet can be forged in a number of ways. In particular, existing protocols place no restriction on what a sending host can use as the "MAIL FROM" of a message or the domain given on the SMTP HELO/EHLO commands. This document describes version 1 of the Sender Policy Framework (SPF) protocol, whereby ADministrative Management Domains (ADMDs) can explicitly authorize the hosts that are allowed to use their domain names, and a receiving host can check such authorization.</t>
      <t>This document obsoletes RFC 4408.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7208"/>
  <seriesInfo name="DOI" value="10.17487/RFC7208"/>
</reference>
<reference anchor="RFC7942">
  <front>
    <title>Improving Awareness of Running Code: The Implementation Status Section</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <date month="July" year="2016"/>
    <abstract>
      <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
      <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="205"/>
  <seriesInfo name="RFC" value="7942"/>
  <seriesInfo name="DOI" value="10.17487/RFC7942"/>
</reference>
<reference anchor="RFC8314">
  <front>
    <title>Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access</title>
    <author fullname="K. Moore" initials="K." surname="Moore"/>
    <author fullname="C. Newman" initials="C." surname="Newman"/>
    <date month="January" year="2018"/>
    <abstract>
      <t>This specification outlines current recommendations for the use of Transport Layer Security (TLS) to provide confidentiality of email traffic between a Mail User Agent (MUA) and a Mail Submission Server or Mail Access Server. This document updates RFCs 1939, 2595, 3501, 5068, 6186, and 6409.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8314"/>
  <seriesInfo name="DOI" value="10.17487/RFC8314"/>
</reference>
<reference anchor="RFC9114">
  <front>
    <title>HTTP/3</title>
    <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
    <date month="June" year="2022"/>
    <abstract>
      <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9114"/>
  <seriesInfo name="DOI" value="10.17487/RFC9114"/>
</reference>
<reference anchor="RFC9562">
  <front>
    <title>Universally Unique IDentifiers (UUIDs)</title>
    <author fullname="K. Davis" initials="K." surname="Davis"/>
    <author fullname="B. Peabody" initials="B." surname="Peabody"/>
    <author fullname="P. Leach" initials="P." surname="Leach"/>
    <date month="May" year="2024"/>
    <abstract>
      <t>This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
      <t>This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9562"/>
  <seriesInfo name="DOI" value="10.17487/RFC9562"/>
</reference>
<reference anchor="RFC9989">
  <front>
    <title>Domain-Based Message Authentication, Reporting, and Conformance (DMARC)</title>
    <author fullname="T. Herr" initials="T." role="editor" surname="Herr"/>
    <author fullname="J. Levine" initials="J." role="editor" surname="Levine"/>
    <date month="May" year="2026"/>
    <abstract>
      <t>This document describes the Domain-based Message Authentication, Reporting, and Conformance (DMARC) protocol.</t>
      <t>DMARC permits the owner of an email's Author Domain to enable validation of the domain's use to indicate the Domain Owner's or Public Suffix Operator's message handling preference regarding failed validation and to request reports about the use of the domain name. Mail-receiving organizations can use this information when evaluating handling choices for incoming mail.</t>
      <t>This document obsoletes RFCs 7489 and 9091.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9989"/>
  <seriesInfo name="DOI" value="10.17487/RFC9989"/>
</reference>

<reference anchor="I-D.ietf-dkim-dkim2-spec">
   <front>
      <title>DomainKeys Identified Mail Signatures v2 (DKIM2)</title>
      <author fullname="Richard Clayton" initials="R." surname="Clayton">
         <organization>Yahoo</organization>
      </author>
      <author fullname="Wei Chuang" initials="W." surname="Chuang">
         <organization>Google</organization>
      </author>
      <author fullname="Bron Gondwana" initials="B." surname="Gondwana">
         <organization>Fastmail Pty Ltd</organization>
      </author>
      <date day="27" month="October" year="2026"/>
      <abstract>
	 <t>   DomainKeys Identified Mail v2 (DKIM2) permits a person, role, or
   organization that owns a signing domain to document that it has
   handled an email message by associating their domain with the
   message.  This is achieved by providing a hash value that has been
   calculated on the current contents of the message and then applying a
   cryptographic signature that covers the hash values and other details
   about the transmission of the message.  Verification is performed by
   querying an entry within the signing domain&#x27;s DNS space to retrieve
   an appropriate public key.  As a message is transferred from author
   to recipient, systems that alter the body or header fields will
   provide details of their changes and calculate new hash values.
   Further signatures will be added to provide a &quot;chain&quot; that receivers
   can validate.  This permits verifiers to identify the nature of
   changes made by intermediaries and apply a reputation to the systems
   that made changes.  DKIM2 also allows recipients to detect when
   messages have been unexpectedly &quot;replayed&quot; and will ensure that
   Delivery Status Notifications are only sent to entities that were
   involved in the transmission of a message.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-dkim-dkim2-spec-08"/>
   
</reference>

<reference anchor="I-D.gondwana-dkim2-authres">
   <front>
      <title>Reporting DKIM2 Verification Results in Authentication-Results</title>
      <author fullname="Bron Gondwana" initials="B." surname="Gondwana">
         <organization>Fastmail Pty Ltd</organization>
      </author>
      <date day="28" month="October" year="2026"/>
      <abstract>
	 <t>   DomainKeys Identified Mail Signatures v2 (DKIM2) produces a
   verification result for an email message.  This document defines how
   that result is reported in the Authentication-Results header field,
   registering the &quot;dkim2&quot; authentication method, the result values it
   can take, and two properties which identify the signing domain and
   the point in the chain at which verification failed.  Diagnostic
   detail about each hop is carried in a human-readable comment.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-gondwana-dkim2-authres-01"/>
   
</reference>

<reference anchor="MILTER" target="https://www.sendmail.org/doc/sendmail-current/libmilter/docs/">
  <front>
    <title>Sendmail Mail Filter API (Milter)</title>
    <author >
      <organization>Proofpoint, Inc.</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="PROXY" target="https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt">
  <front>
    <title>The PROXY protocol, Versions 1 and 2</title>
    <author initials="W." surname="Tarreau" fullname="W. Tarreau">
      <organization>HAProxy Technologies</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="XCLIENT" target="https://www.postfix.org/XCLIENT_README.html">
  <front>
    <title>Postfix XCLIENT Howto</title>
    <author >
      <organization>The Postfix Project</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="XFORWARD" target="https://www.postfix.org/XFORWARD_README.html">
  <front>
    <title>Postfix XFORWARD Howto</title>
    <author >
      <organization>The Postfix Project</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

</references>


<?line 1248?>

<section anchor="error-list"><name>Error Codes</name>

<t>Error responses are Problem Details <xref target="RFC9457"/> with the media type "application/problem+json", whatever serialization the registration uses, and an extension member "code" holding one of the codes below:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "type": "about:blank",
  "status": 404,
  "title": "Not Found",
  "code": "REGISTRATION_NOT_FOUND",
  "detail": "No registration reg-7a3b9c2e"
}
]]></sourcecode></figure>

<texttable title="Error Codes" anchor="tab-errors">
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c>400</c>
      <c>INVALID_REQUEST</c>
      <c>Malformed body or missing required fields</c>
      <c>400</c>
      <c>INVALID_FILTER</c>
      <c>Filter is syntactically invalid</c>
      <c>400</c>
      <c>MISSING_REQUEST_ID</c>
      <c>MTA-Hooks-Request-Id is missing</c>
      <c>401</c>
      <c>AUTHENTICATION_REQUIRED</c>
      <c>No credentials were provided</c>
      <c>401</c>
      <c>INVALID_CREDENTIALS</c>
      <c>Credentials are invalid or expired</c>
      <c>403</c>
      <c>REGISTRATION_DENIED</c>
      <c>The MTA may not register</c>
      <c>403</c>
      <c>REGISTRATION_MISMATCH</c>
      <c>Credentials are not bound to the registration</c>
      <c>404</c>
      <c>REGISTRATION_NOT_FOUND</c>
      <c>No such registration</c>
      <c>409</c>
      <c>REGISTRATION_LIMIT_REACHED</c>
      <c>Too many registrations for this MTA</c>
      <c>413</c>
      <c>REQUEST_TOO_LARGE</c>
      <c>Request body larger than the scanner accepts</c>
      <c>422</c>
      <c>UNSUPPORTED_SERIALIZATION</c>
      <c>The serialization is not supported</c>
      <c>422</c>
      <c>UNSUPPORTED_STAGE</c>
      <c>A stage is not supported</c>
      <c>422</c>
      <c>UNSUPPORTED_PROPERTY</c>
      <c>A property is not supported</c>
      <c>422</c>
      <c>UNSUPPORTED_FILTER</c>
      <c>A filter condition is not supported</c>
      <c>429</c>
      <c>RATE_LIMITED</c>
      <c>Too many requests</c>
      <c>500</c>
      <c>INTERNAL_ERROR</c>
      <c>Unexpected error</c>
      <c>503</c>
      <c>UNAVAILABLE</c>
      <c>Temporarily unable to process requests</c>
</texttable>

</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>The author thanks the operators of mailbox.org for their detailed proposals on routing, observability, and inbound signals, and the developers and operators of existing mail filtering systems whose experience informed this design.</t>

</section>
<section anchor="changes"><name>Changes</name>

<t>[[This section to be removed by RFC Editor]]</t>

<t><strong>draft-degennaro-mta-hooks-02</strong></t>

<t><list style="symbols">
  <t>Responses are JSON Patch documents (RFC 6902), applied atomically; the custom set/add/delete format and its ordering rules are removed.</t>
  <t>Registrations consist of ordered subscriptions, each with its own filter, properties, grants, and failure policy. Filters gain connection conditions.</t>
  <t>Replaced updateProperties with grants that can restrict values and sizes. Ordered properties can only become stricter unless a grant relaxes them, which replaces the downgrade rule. The discovery document lists the changes a scanner wants as grants, replacing its actions and updates lists.</t>
  <t>Actions apply to inbound stages only. Outbound outcomes, including DSN suppression, are expressed through recipient status, replacing "continue" and "cancel". Removed the "defer" stage, which duplicated "delivery".</t>
  <t>At the "route" and "delivery" stages subscriptions are matched per recipient, so grants and failure handling apply only to the recipients a subscription matches.</t>
  <t>Added the "route" stage with per-recipient routes, and the "transmit" stage, which runs per SMTP transaction so scanners can sign each copy with its final envelope, as DKIM2 requires.</t>
  <t>Removed ARC, which the DMARC working group proposes to move to Historic, from sender authentication and added DKIM2.</t>
  <t>Bearer tokens (RFC 6750) are mandatory to implement. Error responses use Problem Details (RFC 9457). Header field values have a defined syntax.</t>
  <t>Serializations are named by media type; removed the serialization registry. The registration request carries the registration's label, and no longer carries metadata. A scanner can only narrow a registration by removing properties and grants.</t>
  <t>Certificates report a verification failure using RFC 8460 result types. Sessions also describe non-SMTP submissions.</t>
  <t>One Recipient object across all stages with a common status set and a decidedBy attribution; rejected recipients remain in the array; "failed-silent" became "discarded".</t>
  <t>Properties are no longer split by direction. Client, TLS, and authentication data are grouped into a Session object, which is available at outbound stages when the MTA knows it.</t>
  <t>Added session identifier and counters, proxy information, EHLO capabilities, certificate chains with verification result, per-attempt remote host and TLS details using RFC 8460 values, delayMs, a per-request timeoutMs, traceId, and extension data with message lifetime.</t>
  <t>Clarified ESMTP parameters and queue identifier stability. Added iprev to sender authentication.</t>
  <t>Dropped the "X-" prefix from header fields (RFC 6648) and added MTA-Hooks-Context.</t>
  <t>Simplified the registration lifecycle to GET and DELETE on the registration URL; removed the status endpoint, its statistics, the registration status and creation time, and the maxRegistrations limit.</t>
</list></t>

<t><strong>draft-degennaro-mta-hooks-01</strong></t>

<t><list style="symbols">
  <t>Inverted the registration model: the MTA is now exclusively the HTTP client.</t>
  <t>Required a registration identifier and request identifier on every hook request.</t>
  <t>Specified authentication, error responses, and action precedence.</t>
</list></t>

<t><strong>draft-degennaro-mta-hooks-00</strong></t>

<t><list style="symbols">
  <t>Initial version</t>
</list></t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA729+Xob17Un+j+eohr6w5IPAHHUQOWcDkRSFhNOISnbiePr
LgJFsiKgCl1VIMVIyrPcZ7lP1uu3hj1UgZKc09/1l9ggULWHtdde8zAcDntN
3syynaR/lOaz5KJKi/oqq5LxdVY0yeOji/GT5G1Zvq93knGRvL24OB2+Tuts
mpxWZVNOyllyVVbJ/ocmq4p0lvAg9NMkq+u8uO730svLKrvdSWggGac3LSdF
OqcZp1V61QynGc1UpFU5nDfp8AaPDNc2evXycp7TGGVxcb+ghw/2L970JmmT
XZfV/U5SN9Nevqh2kqZa1s3G2tpLeud9dn9XVtOdXpIMk/Oji1P+QDPzf+dY
2lU+o5XSyvirP52fHCenaTO56dVNWkx/S2dlQZPdZ3Vvke8kv9AOB0ldVk2V
XdX06X6OD7/2eumyuSkrmmlIAyVJXhB8jkbJXpb8ILvhr2WfR+myKts/ldX1
TnLepLO7tGqSw/SyTg4Pd/knA1n0K/9S0zqyZidZ31x7meyWV1dZViTj26xY
ZoPkfJk3WbJOsOBnJ3lDcDq/od1O04K/qrJrgudO8tNf5YlySqt7sfFibV3/
XhYNgPuuoJGmmL/J6qS8SsZzGmWS8lMZ4LhD0KRN/bHGEke0Rv5pWRHMbppm
Ue88fep/6hVlNU+b/DbDyZy92d1Y29r2H5/rx83NzZf2cevZuv+4aR9fvnim
H7c2XtoDW1sbG/bx2ab/uPXCPr7c3tKP2xub/uOLNfu4ubHuP9oIz55v2wPP
Xq6t+4/2wPNnz+3ji41tW/qLrWdr/qO99uLZmv+4seY/+m9fuBFebtnHl+vr
a/7jhv9oIHm5uWGQfLm1bZB8STPj48H5yeb6s2dDniRJ7KLv0rnXfG2bm4yQ
YlFlNV12OqGywGkDa/nYBSFy+oPuBh7Oq4Tu5TS/zXEx62Q4pNtDCLq+Q9jI
yMNI1Rc0tiuSOHynBQkeZxg1L65K+5l+2Ul0sRtrG4LCU8K/nUT//HlEsI83
ckADMGbRuptsclOUs/L6nu71+Px4tJ5kBS2GrnpSLWcZ3c/zRTbJrwiPbaNE
yPJJsm+PneGx5PHr/bMng2Q3LcqCnp11ft+l3xkge3nd0PfLvL6h29J+bI8e
exgQF++GFw+BAr8lZ9mknM+zYsqr3ZHtx1BZ7/Vyg4C7W882n9sleb6xZnfg
+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
PyC8KbPXCQEA

-->

</rfc>

