<a id="module-rcptto"></a>

<a id="rcpt-to"></a>

# RCPT TO

The `RCPT TO` script allows verification of recipients.

<a id="variables"></a>

## Variables

These are the pre-defined variables available.

| Variable                                                    | Type   | Read-only   | Description                                  |
|-------------------------------------------------------------|--------|-------------|----------------------------------------------|
| [$arguments](#v-a5)   | array  | yes         | Context/hook arguments                       |
| [$connection](#v-c5)  | array  | yes         | Connection/session bound                     |
| [$transaction](#v-t5) | array  | yes         | Transaction bound                            |
| $context                                                    | any    | no          | Connection bound user-defined (default none) |

<a id="v-a5"></a>

<a id="arguments"></a>

### Arguments

| Array item                                             | Type   | Example                      | Description                                                                     |
|--------------------------------------------------------|--------|------------------------------|---------------------------------------------------------------------------------|
| recipient                                              | string | `"test@example.com"`         | Recipient address (envelope), lowercase                                         |
| [address](#a5) | array  | `["localpart" => "test"...]` | Recipient address (envelope)                                                    |
| params                                                 | array  | `["NOTIFY" => "NEVER", .. ]` | Recipient parameters to the envelope address (keys will always be in uppercase) |
| transportid                                            | string | `"inbound"`                  | ID of the transport profile to be used                                          |

<a id="v-c5"></a>

<a id="connection"></a>

### Connection

| Array item                                          | Type   | Example                     | Description                                              |
|-----------------------------------------------------|--------|-----------------------------|----------------------------------------------------------|
| id                                                  | string | `"18c190a3-93f-47d7-bd..."` | ID of the connection                                     |
| priority                                            | number | `1`                         | The connection priority                                  |
| remoteip                                            | string | `"192.168.1.11"`            | IP address of the connected client                       |
| remoteport                                          | number | `41666`                     | TCP port of connected client                             |
| remoteptr                                           | string | `"mail.example.org"`        | Reverse DNS (FCrDNS) for remoteip (not always available) |
| remoteuid                                           | number | `106`                       | UNIX socket remote user id (not always available)        |
| localip                                             | string | `"10.0.0.1"`                | IP address of the server                                 |
| localport                                           | number | `25`                        | TCP port of the server                                   |
| serverid                                            | string | `"inbound"`                 | ID of the server                                         |
| [helo](#he5) | array  |                             | HELO information (not always available)                  |
| [tls](#tls5)  | array  |                             | TLS information (if TLS was started)                     |
| [auth](#au5) | array  |                             | AUTH information (not always available)                  |

<a id="he5"></a>

<a id="helo"></a>

#### HELO

| Array item   | Type   | Example              | Description          |
|--------------|--------|----------------------|----------------------|
| verb         | string | `"EHLO"`             | HELO or EHLO command |
| host         | string | `"mail.example.com"` | HELO hostname        |

<a id="tls5"></a>

<a id="tls"></a>

#### TLS

| Array item                                              | Type   | Example                     | Description                                      |
|---------------------------------------------------------|--------|-----------------------------|--------------------------------------------------|
| protocol                                                | string | `"TLSv1.3"`                 | The protocol                                     |
| cipher                                                  | string | `"ECDHE-RSA-AES256-SHA384"` | The cipher                                       |
| keysize                                                 | number | `256`                       | The keysize                                      |
| sni                                                     | string | `"example.com"`             | The SNI hostname (not always available)          |
| [peercert](#p5) | array  |                             | The peer certificate (if provided by the client) |

<a id="p5"></a>

<a id="peercert"></a>

##### Peercert

| Array item   | Type         | Example   | Description                                                                                          |
|--------------|--------------|-----------|------------------------------------------------------------------------------------------------------|
| x509         | X509Resource |           | An X509Resource to be used with the [`X509`](functions.html.md#X509) class |
| chain        | array        |           | An array of X509Resource (the chain)                                                                 |
| error        | number       | `18`      | The peer certificate validation error (see OpenSSLs SSL_get_verify_result(3))                        |

<a id="au5"></a>

<a id="auth"></a>

#### AUTH

| Array item   | Type   | Example      | Description                          |
|--------------|--------|--------------|--------------------------------------|
| mechanism    | string | `"PLAIN"`    | SASL mechanism (always in uppercase) |
| username     | string | `"mailuser"` | SASL username (not always available) |

<a id="v-t5"></a>

<a id="transaction"></a>

### Transaction

| Array item                                                   | Type   | Example                                           | Description                                                                                                     |
|--------------------------------------------------------------|--------|---------------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
| id                                                           | string | `"18c190a3-93f-47d7-bd..."`                       | ID of the transaction                                                                                           |
| sender                                                       | string | `"test@example.org"`                              | Sender address (envelope), lowercase                                                                            |
| [senderaddress](#a5) | array  | `["localpart" => "test"...]`                      | Sender address (envelope)                                                                                       |
| senderparams                                                 | array  | `["SIZE" => "2048", ... ]`                        | Sender parameters to the envelope address (keys will always be in uppercase)                                    |
| recipients                                                   | array  | `[["recipient" => "test@example.com", ...], ...]` | List of all accepted [recipients](#v-t-r5) (envelope), in order of scanning |

<a id="v-t-r5"></a>

<a id="recipient"></a>

#### Recipient

| Array item                                             | Type   | Example                      | Description                                                                     |
|--------------------------------------------------------|--------|------------------------------|---------------------------------------------------------------------------------|
| recipient                                              | string | `"test@example.com"`         | Recipient address (envelope), lowercase                                         |
| [address](#a5) | array  | `["localpart" => "test"...]` | Recipient address (envelope)                                                    |
| params                                                 | array  | `["NOTIFY" => "NEVER", .. ]` | Recipient parameters to the envelope address (keys will always be in uppercase) |
| transportid                                            | string | `"inbound"`                  | Transport ID for recipient                                                      |

<a id="a5"></a>

<a id="address"></a>

#### Address

| Array item   | Type   | Example         | Description            |
|--------------|--------|-----------------|------------------------|
| localpart    | string | `"test"`        | Local part of address  |
| domain       | string | `"example.org"` | Domain part of address |

<a id="functions"></a>

## Functions

<a id="Accept"></a>

<a id="rcptto.Accept"></a>

### Accept([options])

Accept the *RCPT TO* command (recipient).
Optionally change the recipient accepted and its transport, which is written back to `$transaction` for subsequent executions.

* **Parameters:**
  **options** (*array*) – an options array
* **Returns:**
  doesn’t return, script is terminated

The following options are available in the options array.

> * **recipient** (string or array) Change the recipient email address, either as a string or an associative array with a `localpart` and `domain`. The default is the `address` argument.
> * **params** (array) Change the recipient parameters. The default is the `params` argument.
> * **transportid** (string) Change the transport ID. The default is the `transportid` argument.
> * **reason** (string or array) The reason to report. The default is a system generated message.
> * **reply_codes** (array) The associative array may contain the properties *code* (number) and *enhanced* (array of three numbers). To remove the *enhanced* code set it to `[0,0,0]`. The default *code* is `250` and *enhanced* is `[2,1,5]`.
> * **priority** (number) Change the connection priority (0 normal, 1 high).

<a id="Reject"></a>

<a id="rcptto.Reject"></a>

### Reject([reason[, options]])

Reject the *RCPT TO* command (recipient) with a permanent (554) error.

* **Parameters:**
  * **reason** (*string* *or* *array*) – reject message with reason
  * **options** (*array*) – an options array
* **Returns:**
  doesn’t return, script is terminated

The following options are available in the options array.

> * **disconnect** (boolean) Disconnect the client. The default is `false`.
> * **reply_codes** (array) The associative array may contain the properties *code* (number) and *enhanced* (array of three numbers). To remove the *enhanced* code set it to `[0,0,0]`. The default *code* is `554` and *enhanced* is `[5,7,1]`.
> * **priority** (number) Change the connection priority (0 normal, 1 high).

<a id="Defer"></a>

<a id="rcptto.Defer"></a>

### Defer([reason[, options]])

Defer the *RCPT TO* command (recipient) with a temporary (450) error.

* **Parameters:**
  * **reason** (*string* *or* *array*) – defer message with reason
  * **options** (*array*) – an options array
* **Returns:**
  doesn’t return, script is terminated

The following options are available in the options array.

> * **disconnect** (boolean) Disconnect the client. The default is `false`.
> * **reply_codes** (array) The associative array may contain the properties *code* (number) and *enhanced* (array of three numbers). To remove the *enhanced* code set it to `[0,0,0]`. The default *code* is `450` and *enhanced* is `[4,7,1]`.
> * **priority** (number) Change the connection priority (0 normal, 1 high).

<a id="on-script-error"></a>

## On script error

On script error [`Defer()`](#rcptto.Defer) is called.

<a id="on-implicit-termination"></a>

## On implicit termination

If not explicitly terminated then [`Accept()`](#rcptto.Accept) is called.
