7.5. RCPT TO

The RCPT TO context allows verification of RCPT TO recipients.

7.5.1. Pre-defined variables

These are the read-only pre-defined variables available for RCPT TO command.

7.5.1.1. Connection

Variable Type Example Description
$senderip string “192.168.1.11” IP address of the connected client
$senderport number 41666 TCP port of connected client
$serverip string “10.0.0.1” IP address of the mailserver
$serverport number 25 TCP port of the mailserver
$serverid string “mailserver:1” ID of the mailserver profile
$senderhelo string “mail.example.com” HELO message of sender
$tlsstarted boolean false Whether or not the SMTP session is using TLS
$saslauthed boolean true Whether or not the SMTP session is authenticated (SASL)
$saslusername string “mailuser” SASL username

These are the writable pre-defined variables available.

Variable Type Description
$context any Connection-bound variable

7.5.1.2. Transaction

Variable Type Example Description
$messageid string “18c190a3-93f-47d7-bd...” ID of the message
$senderdomain string “example.org” Domain part of sender’s address (envelope)
$sender string “test@example.org” E-mail address of sender (envelope)
$senderparams array [“SIZE” => “2048”, ... ] Sender parameters to the envelope address
$recipientdomains array [“example.com”, ...] List of all accepted domain part of all recipient addresses (envelope)
$recipients array [“test@example.com”, ...] List of all accepted recipient addresses (envelope), in order of scanning

7.5.1.3. Arguments

Variable Type Example Description
$recipientdomain string “example.com” Domain part of recipient’s address (envelope)
$recipient string “test@example.com” E-mail address of recipient (envelope)
$recipientparams array [“NOTIFY” => “NEVER”, .. ] Recipient parameters to the envelope address
$transportid string “mailtransport:1” ID of the transport profile to be used

7.5.2. Functions

rcptto.Accept()

Accept the RCPT TO command (recipient).

Returns:doesn’t return, script is terminated
rcptto.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 array may contain code (number) and enhanced (array of three numbers). The default is pre-defined.
rcptto.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 array may contain code (number) and enhanced (array of three numbers). The default is pre-defined.
rcptto.SetSender(sender)

Change the sender of the message.

Parameters:sender (string) – an e-mail address
Returns:sender if successful
Return type:string or none
Updates:$sender and $senderdomain

Warning

This function changes the sender for all recipients. To change sender per recipient use SetSender() in the Pre-delivery context.

rcptto.SetRecipient(recipient)

Changes the recipient.

Parameters:recipient (string) – an e-mail address
Returns:recipient if successful
Return type:string or none
Updates:$recipient and $recipientdomain
rcptto.GetMailQueueMetric(options)

Return metric information about the mail queue, it can be used to enforce quotas.

Parameters:options (array) – options array
Return type:number

The following options are available in the options array.

  • metric (string) Metric to be returned; count or bytes. The default is count.
  • filter (array) Any of the available filters, see below. The default is no filters.

The following filters are available in the filters array.

Type Example
senderip $senderip
saslusername $saslusername
sender $sender
senderdomain $senderdomain
recipient $recipient
recipientdomain $recipientdomain
transportid $transportid
retry 1
metadata.x any metadata
$queuesize = GetMailQueueMetric(
        [
                "metric" => "bytes",
                "filter" => [
                        "senderdomain" => ["example.com" , "example.net"],
                        "transportid" => "mailtransport:2"
                ]
        ]
) / 1024 / 1024;
if ($queuesize > 500) {
        Defer("Current queue for mailtransport:2 exceeds 500 MiB");
}

Note

If multiple filters of the same type are given using array notation, any of them may match.

rcptto.GetTLS([options])

Get the TLS information for a connection.

Parameters:options (array) – options array
Return type:array

The following options are available in the options array.

  • fingerprint (string) Generate the fingerprint of the certificate using one of the following hash function (md5, sha1, sha256 or sha512). The default no hashing.

The following items are available in the result.

  • started (boolean) If STARTTLS was issued.
  • protocol (string) The protocol used (eg. TLSv1.2)
  • ciphers (string) The cipher used (eg. ECDHE-RSA-AES256-SHA384).
  • keysize (number) The keysize used (eg. 256).
  • peer_cert (array) The peer certificate (if provided by the client). Same format as TLSSocket.getpeercert().
  • peer_cert_error (number) The peer certificate validation error (see OpenSSLs SSL_get_verify_result(3)).

7.5.3. On script error

On script error Defer() is called.

7.5.4. On implicit termination

If not explicitly terminated then Reject() is called.