<a id="halon-scripting-language"></a>

# Halon Scripting Language

[Halon](http://halon.io/) is a fast, flexible and powerful email infrastructure software;
designed for demanding uses such as large-scale email services.
The Halon scripting language is a domain-specific language ([DSL](http://en.wikipedia.org/wiki/Domain-specific_language)).
It enables configuration of the behavior of email processing and delivery in a scriptable fashion.

This script language documentation references many other resources, such as:

* [Manual](https://docs.halon.io/manual/)
* [Script library](https://docs.halon.io/go/scriptlibrary)
* [Knowledge base](https://docs.halon.io/go/knowledgebase)

<a id="table-of-contents"></a>

## Table of contents

* [About](about.html.md)
  * [Design](about.html.md#design)
* [Introduction](introduction.html.md)
  * [Variables](introduction.html.md#variables)
  * [Functions](introduction.html.md#functions)
  * [Comments](introduction.html.md#comments)
* [Data types and literals](literals.html.md)
  * [Boolean](literals.html.md#boolean)
  * [Number](literals.html.md#number)
    * [Hexadecimal](literals.html.md#hexadecimal)
    * [Octal](literals.html.md#octal)
    * [Binary](literals.html.md#binary)
  * [String](literals.html.md#string)
    * [Double-quoted string](literals.html.md#double-quoted-string)
    * [Raw string](literals.html.md#raw-string)
  * [Regex](literals.html.md#regex)
    * [Pattern modifiers](literals.html.md#pattern-modifiers)
  * [Array](literals.html.md#arraytype)
  * [Function](literals.html.md#function)
    * [Anonymous functions](literals.html.md#anonymous-functions)
    * [Named function pointers](literals.html.md#named-function-pointers)
  * [Object](literals.html.md#object)
    * [`Iterator`](literals.html.md#Iterator)
      * [`Iterator.next()`](literals.html.md#Iterator.next)
  * [None](literals.html.md#id12)
* [Operators](operators.html.md)
  * [Assignment](operators.html.md#assignment)
    * [Augmented assignment](operators.html.md#augmented-assignment)
    * [Nullish Coalescing assignment](operators.html.md#nullish-coalescing-assignment)
    * [Destructuring assignment](operators.html.md#destructuring-assignment)
    * [Slice assignment](operators.html.md#slice-assignment)
  * [Arithmetic](operators.html.md#arithmetic)
  * [String](operators.html.md#string)
    * [Concatenation](operators.html.md#concatenation)
    * [Format](operators.html.md#format)
    * [Repeat](operators.html.md#repeat)
  * [Array](operators.html.md#array)
    * [Subscript](operators.html.md#subscript)
    * [Slicing](operators.html.md#slicing)
    * [Push and pop](operators.html.md#push-and-pop)
    * [Removing](operators.html.md#removing)
    * [Repeat](operators.html.md#id3)
    * [Spread](operators.html.md#spread)
  * [Logic (boolean)](operators.html.md#logic-boolean)
    * [Short-circuit evaluation](operators.html.md#short-circuit-evaluation)
  * [Bitwise](operators.html.md#bitwise)
  * [Comparison](operators.html.md#comparison)
    * [Loose equality table](operators.html.md#loose-equality-table)
    * [Truthiness](operators.html.md#truthiness)
    * [Regular expression](operators.html.md#regular-expression)
  * [Function](operators.html.md#function)
    * [Call](operators.html.md#call)
  * [Class](operators.html.md#class)
    * [Property](operators.html.md#property)
    * [Scope resolution](operators.html.md#scope-resolution)
      * [Static](operators.html.md#static)
* [Control structures](structures.html.md)
  * [echo](structures.html.md#echo)
  * [if](structures.html.md#if)
    * [Ternary operator](structures.html.md#ternary-operator)
    * [Null coalescing operator](structures.html.md#null-coalescing-operator)
  * [for](structures.html.md#for)
    * [break](structures.html.md#break)
    * [continue](structures.html.md#continue)
  * [foreach](structures.html.md#foreach)
    * [break](structures.html.md#id5)
    * [continue](structures.html.md#id6)
  * [while](structures.html.md#while)
    * [break](structures.html.md#id7)
    * [continue](structures.html.md#id8)
  * [forever](structures.html.md#forever)
    * [break](structures.html.md#id9)
    * [continue](structures.html.md#id10)
  * [switch](structures.html.md#switch)
  * [match](structures.html.md#match)
  * [include](structures.html.md#include)
    * [include_once](structures.html.md#include-once)
  * [import](structures.html.md#import)
    * [variables](structures.html.md#variables)
    * [functions](structures.html.md#functions)
    * [wildcard](structures.html.md#wildcard)
    * [data](structures.html.md#data)
      * [wildcard file imports](structures.html.md#wildcard-file-imports)
  * [function](structures.html.md#function)
    * [Named functions](structures.html.md#named-functions)
      * [Function scope](structures.html.md#function-scope)
    * [Anonymous functions](structures.html.md#anonymous-functions)
    * [Closure functions](structures.html.md#closure-functions)
    * [return](structures.html.md#return)
    * [Default argument](structures.html.md#default-argument)
    * [Variadic function](structures.html.md#variadic-function)
    * [global](structures.html.md#global)
    * [Function calling](structures.html.md#function-calling)
      * [Argument unpacking](structures.html.md#argument-unpacking)
      * [builtin](structures.html.md#builtin)
  * [`function*`](structures.html.md#id13)
    * [generator object](structures.html.md#generator-object)
    * [yield](structures.html.md#yield)
  * [Exceptions](structures.html.md#exceptions)
    * [try](structures.html.md#try)
    * [catch](structures.html.md#catch)
    * [throw](structures.html.md#throw)
  * [class](structures.html.md#class)
    * [constructor](structures.html.md#constructor)
    * [Instance](structures.html.md#instance)
      * [$this](structures.html.md#this)
      * [variables](structures.html.md#id18)
      * [functions](structures.html.md#id19)
    * [Static](structures.html.md#static)
      * [variables](structures.html.md#id20)
      * [functions](structures.html.md#id21)
    * [Visibility](structures.html.md#visibility)
      * [private](structures.html.md#private)
    * [Permissions](structures.html.md#permissions)
      * [readonly](structures.html.md#readonly)
  * [cache](structures.html.md#cache)
  * [barrier](structures.html.md#barrier)
* [Standard library](functions.html.md)
  * [Array](functions.html.md#array)
    * [`array_combine()`](functions.html.md#array_combine)
    * [`array_every()`](functions.html.md#array_every)
    * [`array_filter()`](functions.html.md#array_filter)
    * [`array_find()`](functions.html.md#array_find)
    * [`array_includes()`](functions.html.md#array_includes)
    * [`array_join()`](functions.html.md#array_join)
    * [`array_keys()`](functions.html.md#array_keys)
    * [`array_map()`](functions.html.md#array_map)
    * [`array_random()`](functions.html.md#array_random)
    * [`array_range()`](functions.html.md#array_range)
    * [`array_reduce()`](functions.html.md#array_reduce)
    * [`array_reverse()`](functions.html.md#array_reverse)
    * [`array_sort()`](functions.html.md#array_sort)
    * [`array_shuffle()`](functions.html.md#array_shuffle)
    * [`array_unique()`](functions.html.md#array_unique)
  * [Cryptographic](functions.html.md#cryptographic)
    * [`aes_decrypt()`](functions.html.md#aes_decrypt)
    * [`aes_encrypt()`](functions.html.md#aes_encrypt)
    * [`hmac_md5()`](functions.html.md#hmac_md5)
    * [`hmac_sha1()`](functions.html.md#hmac_sha1)
    * [`hmac_sha2()`](functions.html.md#hmac_sha2)
    * [`md5()`](functions.html.md#md5)
    * [`sha1()`](functions.html.md#sha1)
    * [`sha2()`](functions.html.md#sha2)
    * [`hash()`](functions.html.md#hash)
    * [`pkcs11_load()`](functions.html.md#pkcs11_load)
    * [`rsa_privatekey()`](functions.html.md#rsa_privatekey)
    * [`is_rsa_privatekey()`](functions.html.md#is_rsa_privatekey)
    * [`rsa_sign()`](functions.html.md#rsa_sign)
    * [`rsa_verify()`](functions.html.md#rsa_verify)
    * [`ec_privatekey()`](functions.html.md#ec_privatekey)
    * [`is_ec_privatekey()`](functions.html.md#is_ec_privatekey)
    * [`ed25519_privatekey()`](functions.html.md#ed25519_privatekey)
    * [`is_ed25519_privatekey()`](functions.html.md#is_ed25519_privatekey)
    * [`ed25519_sign()`](functions.html.md#ed25519_sign)
    * [`ed25519_verify()`](functions.html.md#ed25519_verify)
    * [`pkcs7_sign()`](functions.html.md#pkcs7_sign)
    * [`cms_sign()`](functions.html.md#cms_sign)
    * [`cms_verify()`](functions.html.md#cms_verify)
    * [`cms_encrypt()`](functions.html.md#cms_encrypt)
    * [`cms_decrypt()`](functions.html.md#cms_decrypt)
    * [`cms_type()`](functions.html.md#cms_type)
    * [`cms_recipients()`](functions.html.md#cms_recipients)
    * [`random_bytes()`](functions.html.md#random_bytes)
    * [`random_number()`](functions.html.md#random_number)
    * [`crypt()`](functions.html.md#crypt)
  * [Data types](functions.html.md#data-types)
    * [`length()`](functions.html.md#length)
    * [`array()`](functions.html.md#id0)
    * [`boolean()`](functions.html.md#boolean)
    * [`number()`](functions.html.md#number)
    * [`string()`](functions.html.md#string)
    * [`is_array()`](functions.html.md#is_array)
    * [`is_boolean()`](functions.html.md#is_boolean)
    * [`is_function()`](functions.html.md#is_function)
    * [`is_number()`](functions.html.md#is_number)
    * [`is_object()`](functions.html.md#is_object)
    * [`is_string()`](functions.html.md#is_string)
    * [`isset()`](functions.html.md#isset)
    * [`unset()`](functions.html.md#unset)
    * [`Map`](functions.html.md#Map)
      * [`Map.constructor()`](functions.html.md#Map.constructor)
      * [`Map.set()`](functions.html.md#Map.set)
      * [`Map.has()`](functions.html.md#Map.has)
      * [`Map.get()`](functions.html.md#Map.get)
      * [`Map.delete()`](functions.html.md#Map.delete)
      * [`Map.merge()`](functions.html.md#Map.merge)
      * [`Map.size()`](functions.html.md#Map.size)
      * [`Map.clear()`](functions.html.md#Map.clear)
      * [`Map.toArray()`](functions.html.md#Map.toArray)
      * [`Map.entries()`](functions.html.md#Map.entries)
    * [`Set`](functions.html.md#Set)
      * [`Set.constructor()`](functions.html.md#Set.constructor)
      * [`Set.add()`](functions.html.md#Set.add)
      * [`Set.has()`](functions.html.md#Set.has)
      * [`Set.delete()`](functions.html.md#Set.delete)
      * [`Set.size()`](functions.html.md#Set.size)
      * [`Set.clear()`](functions.html.md#Set.clear)
      * [`Set.toArray()`](functions.html.md#Set.toArray)
      * [`Set.values()`](functions.html.md#Set.values)
  * [Date and time](functions.html.md#date-and-time)
    * [`executiontime()`](functions.html.md#executiontime)
    * [`sleep()`](functions.html.md#sleep)
    * [`strftime()`](functions.html.md#strftime)
    * [`strptime()`](functions.html.md#strptime)
    * [`strpduration()`](functions.html.md#strpduration)
    * [`time()`](functions.html.md#time)
    * [`timelocal()`](functions.html.md#timelocal)
    * [`uptime()`](functions.html.md#uptime)
  * [DNS](functions.html.md#dns)
    * [`dns_query()`](functions.html.md#dns_query)
    * [`domain_includes()`](functions.html.md#domain_includes)
    * [`domain_publicsuffix()`](functions.html.md#domain_publicsuffix)
    * [`idna_encode()`](functions.html.md#idna_encode)
    * [`idna_decode()`](functions.html.md#idna_decode)
  * [Encodings and JSON](functions.html.md#encodings-and-json)
    * [`base32_encode()`](functions.html.md#base32_encode)
    * [`base32_decode()`](functions.html.md#base32_decode)
    * [`base64_encode()`](functions.html.md#base64_encode)
    * [`base64_decode()`](functions.html.md#base64_decode)
    * [`base64url_encode()`](functions.html.md#base64url_encode)
    * [`base64url_decode()`](functions.html.md#base64url_decode)
    * [`zlib_compress()`](functions.html.md#zlib_compress)
    * [`zlib_uncompress()`](functions.html.md#zlib_uncompress)
    * [`csv_encode()`](functions.html.md#csv_encode)
    * [`csv_decode()`](functions.html.md#csv_decode)
    * [`json_encode()`](functions.html.md#json_encode)
    * [`json_decode()`](functions.html.md#json_decode)
    * [`url_encode()`](functions.html.md#url_encode)
    * [`url_decode()`](functions.html.md#url_decode)
    * [`mimeword_encode()`](functions.html.md#mimeword_encode)
    * [`mimeword_decode()`](functions.html.md#mimeword_decode)
    * [`yaml_decode()`](functions.html.md#yaml_decode)
    * [`pack()`](functions.html.md#pack)
    * [`unpack()`](functions.html.md#unpack)
    * [`Iconv`](functions.html.md#Iconv)
      * [`Iconv.constructor()`](functions.html.md#Iconv.constructor)
      * [`Iconv.close()`](functions.html.md#Iconv.close)
      * [`Iconv.convert()`](functions.html.md#Iconv.convert)
      * [`Iconv.errno()`](functions.html.md#Iconv.errno)
  * [File and HTTP](functions.html.md#file-and-http)
    * [`File`](functions.html.md#File)
      * [`File.constructor()`](functions.html.md#File.constructor)
      * [`File.close()`](functions.html.md#File.close)
      * [`File.read()`](functions.html.md#File.read)
      * [`File.readline()`](functions.html.md#File.readline)
      * [`File.seek()`](functions.html.md#File.seek)
      * [`File.tell()`](functions.html.md#File.tell)
      * [`File.getPath()`](functions.html.md#File.getPath)
      * [`File.toFFIValue()`](functions.html.md#File.toFFIValue)
      * [`File.String()`](functions.html.md#File.String)
    * [`http()`](functions.html.md#http)
    * [`url_parse()`](functions.html.md#url_parse)
  * [Mail](functions.html.md#mail)
    * [`envelope_address_parse()`](functions.html.md#envelope_address_parse)
    * [`envelope_localpart_escape()`](functions.html.md#envelope_localpart_escape)
    * [`header_addresslist_compile()`](functions.html.md#header_addresslist_compile)
    * [`header_addresslist_extract()`](functions.html.md#header_addresslist_extract)
    * [`header_dkim_decode()`](functions.html.md#header_dkim_decode)
    * [`xtext_encode()`](functions.html.md#xtext_encode)
    * [`xtext_decode()`](functions.html.md#xtext_decode)
    * [`spf_query()`](functions.html.md#spf_query)
  * [Mathematical](functions.html.md#mathematical)
    * [`abs()`](functions.html.md#abs)
    * [`ceil()`](functions.html.md#ceil)
    * [`floor()`](functions.html.md#floor)
    * [`log()`](functions.html.md#log)
    * [`pow()`](functions.html.md#pow)
    * [`round()`](functions.html.md#round)
    * [`sqrt()`](functions.html.md#sqrt)
  * [MIME](functions.html.md#mime)
    * [`MIME`](functions.html.md#MIME)
      * [`MIME.constructor()`](functions.html.md#MIME.constructor)
      * [`MIME.addHeader()`](functions.html.md#MIME.addHeader)
      * [`MIME.appendPart()`](functions.html.md#MIME.appendPart)
      * [`MIME.setBody()`](functions.html.md#MIME.setBody)
      * [`MIME.setType()`](functions.html.md#MIME.setType)
      * [`MIME.setBoundary()`](functions.html.md#MIME.setBoundary)
      * [`MIME.setDate()`](functions.html.md#MIME.setDate)
      * [`MIME.setFileName()`](functions.html.md#MIME.setFileName)
      * [`MIME.setDisposition()`](functions.html.md#MIME.setDisposition)
      * [`MIME.signDKIM()`](functions.html.md#MIME.signDKIM)
      * [`MIME.toString()`](functions.html.md#MIME.toString)
      * [`MIME.toFile()`](functions.html.md#MIME.toFile)
      * [`MIME.setContext()`](functions.html.md#MIME.setContext)
      * [`MIME.queue()`](functions.html.md#MIME.queue)
      * [`MIME.send()`](functions.html.md#MIME.send)
    * [`MailMessage`](functions.html.md#_CPPv411MailMessage)
      * [`MailMessage.reset()`](functions.html.md#MailMessage.reset)
      * [`MailMessage.snapshot()`](functions.html.md#MailMessage.snapshot)
      * [`MailMessage.restore()`](functions.html.md#MailMessage.restore)
      * [`MailMessage.modifyContent()`](functions.html.md#MailMessage.modifyContent)
      * [`MailMessage.toFile()`](functions.html.md#MailMessage.toFile)
      * [`MailMessage.toString()`](functions.html.md#MailMessage.toString)
      * [`MailMessage.signDKIM()`](functions.html.md#MailMessage.signDKIM)
      * [`MailMessage.verifyDKIM()`](functions.html.md#MailMessage.verifyDKIM)
      * [`MailMessage.setContext()`](functions.html.md#MailMessage.setContext)
      * [`MailMessage.send()`](functions.html.md#MailMessage.send)
      * [`MailMessage.queue()`](functions.html.md#MailMessage.queue)
      * [`MailMessage.String()`](functions.html.md#MailMessage.String)
      * [`MailMessage.File()`](functions.html.md#MailMessage.File)
    * [`MIMEPart`](functions.html.md#_CPPv48MIMEPart)
      * [`MIMEPart.getID()`](functions.html.md#MIMEPart.getID)
      * [`MIMEPart.getSize()`](functions.html.md#MIMEPart.getSize)
      * [`MIMEPart.getFileName()`](functions.html.md#MIMEPart.getFileName)
      * [`MIMEPart.getType()`](functions.html.md#MIMEPart.getType)
      * [`MIMEPart.getTypeParameter()`](functions.html.md#MIMEPart.getTypeParameter)
      * [`MIMEPart.getHeader()`](functions.html.md#MIMEPart.getHeader)
      * [`MIMEPart.getHeaders()`](functions.html.md#MIMEPart.getHeaders)
      * [`MIMEPart.getHeaderNames()`](functions.html.md#MIMEPart.getHeaderNames)
      * [`MIMEPart.setHeader()`](functions.html.md#MIMEPart.setHeader)
      * [`MIMEPart.addHeader()`](functions.html.md#MIMEPart.addHeader)
      * [`MIMEPart.delHeader()`](functions.html.md#MIMEPart.delHeader)
      * [`MIMEPart.renameHeader()`](functions.html.md#MIMEPart.renameHeader)
      * [`MIMEPart.setDateLater()`](functions.html.md#MIMEPart.setDateLater)
      * [`MIMEPart.remove()`](functions.html.md#MIMEPart.remove)
      * [`MIMEPart.getBody()`](functions.html.md#MIMEPart.getBody)
      * [`MIMEPart.setBody()`](functions.html.md#MIMEPart.setBody)
      * [`MIMEPart.getPreamble()`](functions.html.md#MIMEPart.getPreamble)
      * [`MIMEPart.setPreamble()`](functions.html.md#MIMEPart.setPreamble)
      * [`MIMEPart.getEpilogue()`](functions.html.md#MIMEPart.getEpilogue)
      * [`MIMEPart.setEpilogue()`](functions.html.md#MIMEPart.setEpilogue)
      * [`MIMEPart.prependPart()`](functions.html.md#MIMEPart.prependPart)
      * [`MIMEPart.appendPart()`](functions.html.md#MIMEPart.appendPart)
      * [`MIMEPart.replacePart()`](functions.html.md#MIMEPart.replacePart)
      * [`MIMEPart.findByType()`](functions.html.md#MIMEPart.findByType)
      * [`MIMEPart.findByFileName()`](functions.html.md#MIMEPart.findByFileName)
      * [`MIMEPart.getByID()`](functions.html.md#MIMEPart.getByID)
      * [`MIMEPart.getParts()`](functions.html.md#MIMEPart.getParts)
      * [`MIMEPart.getErrors()`](functions.html.md#MIMEPart.getErrors)
  * [Misc](functions.html.md#misc)
    * [`gethostname()`](functions.html.md#gethostname)
    * [`uuid()`](functions.html.md#uuid)
    * [`uuidv5()`](functions.html.md#uuidv5)
    * [`echo()`](functions.html.md#echo)
    * [`syslog()`](functions.html.md#syslog)
    * [`inet_includes()`](functions.html.md#inet_includes)
    * [`inet_ntop()`](functions.html.md#inet_ntop)
    * [`inet_pton()`](functions.html.md#inet_pton)
    * [`inet_reverse()`](functions.html.md#inet_reverse)
  * [Protocols](functions.html.md#protocols)
    * [`smtp_lookup_rcpt()`](functions.html.md#smtp_lookup_rcpt)
    * [`smtp_lookup_auth()`](functions.html.md#smtp_lookup_auth)
  * [String](functions.html.md#id4)
    * [`chr()`](functions.html.md#chr)
    * [`ord()`](functions.html.md#ord)
    * [`str_repeat()`](functions.html.md#str_repeat)
    * [`str_replace()`](functions.html.md#str_replace)
    * [`str_split()`](functions.html.md#str_split)
    * [`str_find()`](functions.html.md#str_find)
    * [`str_rfind()`](functions.html.md#str_rfind)
    * [`str_lower()`](functions.html.md#str_lower)
    * [`str_upper()`](functions.html.md#str_upper)
    * [`str_slice()`](functions.html.md#str_slice)
    * [`str_strip()`](functions.html.md#str_strip)
    * [`str_lstrip()`](functions.html.md#str_lstrip)
    * [`str_rstrip()`](functions.html.md#str_rstrip)
    * [`str_chunk()`](functions.html.md#str_chunk)
  * [Regular expression](functions.html.md#regular-expression)
    * [`pcre_match()`](functions.html.md#pcre_match)
    * [`pcre_match_all()`](functions.html.md#pcre_match_all)
    * [`pcre_quote()`](functions.html.md#pcre_quote)
    * [`pcre_compile()`](functions.html.md#pcre_compile)
    * [`pcre_replace()`](functions.html.md#pcre_replace)
  * [Socket](functions.html.md#socket)
    * [`Socket`](functions.html.md#Socket)
      * [`Socket.constructor()`](functions.html.md#Socket.constructor)
      * [`Socket.bind()`](functions.html.md#Socket.bind)
      * [`Socket.close()`](functions.html.md#Socket.close)
      * [`Socket.connect()`](functions.html.md#Socket.connect)
      * [`Socket.errno()`](functions.html.md#Socket.errno)
      * [`Socket.recv()`](functions.html.md#Socket.recv)
      * [`Socket.send()`](functions.html.md#Socket.send)
      * [`Socket.settimeout()`](functions.html.md#Socket.settimeout)
      * [`Socket.shutdown()`](functions.html.md#Socket.shutdown)
      * [`Socket.toFFIValue()`](functions.html.md#Socket.toFFIValue)
      * [`Socket.AF()`](functions.html.md#Socket.AF)
      * [`Socket.Resource()`](functions.html.md#Socket.Resource)
    * [`TLSSocket`](functions.html.md#TLSSocket)
      * [`TLSSocket.constructor()`](functions.html.md#TLSSocket.constructor)
      * [`TLSSocket.handshake()`](functions.html.md#TLSSocket.handshake)
      * [`TLSSocket.recv()`](functions.html.md#TLSSocket.recv)
      * [`TLSSocket.send()`](functions.html.md#TLSSocket.send)
      * [`TLSSocket.shutdown()`](functions.html.md#TLSSocket.shutdown)
      * [`TLSSocket.errno()`](functions.html.md#TLSSocket.errno)
      * [`TLSSocket.getpeerx509()`](functions.html.md#TLSSocket.getpeerx509)
      * [`TLSSocket.toSocket()`](functions.html.md#TLSSocket.toSocket)
    * [`X509`](functions.html.md#X509)
      * [`X509.constructor()`](functions.html.md#X509.constructor)
      * [`X509.subject()`](functions.html.md#X509.subject)
      * [`X509.issuer()`](functions.html.md#X509.issuer)
      * [`X509.subject_alt_name()`](functions.html.md#X509.subject_alt_name)
      * [`X509.version()`](functions.html.md#X509.version)
      * [`X509.serial_number()`](functions.html.md#X509.serial_number)
      * [`X509.not_valid_before()`](functions.html.md#X509.not_valid_before)
      * [`X509.not_valid_after()`](functions.html.md#X509.not_valid_after)
      * [`X509.public_key()`](functions.html.md#X509.public_key)
      * [`X509.verify()`](functions.html.md#X509.verify)
      * [`X509.chain()`](functions.html.md#X509.chain)
      * [`X509.export()`](functions.html.md#X509.export)
      * [`X509.extensions()`](functions.html.md#X509.extensions)
      * [`X509.toResource()`](functions.html.md#X509.toResource)
      * [`X509.toFFIValue()`](functions.html.md#X509.toFFIValue)
      * [`X509.String()`](functions.html.md#X509.String)
    * [`is_x509_resource()`](functions.html.md#is_x509_resource)
    * [`X509CRL`](functions.html.md#X509CRL)
      * [`X509CRL.constructor()`](functions.html.md#X509CRL.constructor)
      * [`X509CRL.issuer()`](functions.html.md#X509CRL.issuer)
      * [`X509CRL.revoked()`](functions.html.md#X509CRL.revoked)
      * [`X509CRL.version()`](functions.html.md#X509CRL.version)
      * [`X509CRL.last_update()`](functions.html.md#X509CRL.last_update)
      * [`X509CRL.next_update()`](functions.html.md#X509CRL.next_update)
      * [`X509CRL.export()`](functions.html.md#X509CRL.export)
      * [`X509CRL.extensions()`](functions.html.md#X509CRL.extensions)
      * [`X509CRL.toResource()`](functions.html.md#X509CRL.toResource)
      * [`X509CRL.String()`](functions.html.md#X509CRL.String)
    * [`is_x509crl_resource()`](functions.html.md#is_x509crl_resource)
  * [FFI](functions.html.md#ffi)
    * [`FFI`](functions.html.md#FFI)
      * [`FFI.constructor()`](functions.html.md#FFI.constructor)
      * [`FFI.func()`](functions.html.md#FFI.func)
      * [`FFI.symbol()`](functions.html.md#FFI.symbol)
      * [`FFI.type()`](functions.html.md#FFI.type)
      * [`FFI.cnumber()`](functions.html.md#FFI.cnumber)
      * [`FFI.cstring()`](functions.html.md#FFI.cstring)
      * [`FFI.callback()`](functions.html.md#FFI.callback)
      * [`FFI.nullptr()`](functions.html.md#FFI.nullptr)
      * [`FFI.allocate()`](functions.html.md#FFI.allocate)
      * [`FFI.memcpy()`](functions.html.md#FFI.memcpy)
      * [`FFI.byref()`](functions.html.md#FFI.byref)
      * [`FFI.deref()`](functions.html.md#FFI.deref)
      * [`FFI.offset()`](functions.html.md#FFI.offset)
      * [`FFI.string()`](functions.html.md#FFI.string)
      * [`FFI.number()`](functions.html.md#FFI.number)
      * [`FFI.number64()`](functions.html.md#FFI.number64)
      * [`FFI.attach()`](functions.html.md#FFI.attach)
      * [`FFI.detach()`](functions.html.md#FFI.detach)
    * [`FFIFunction()`](functions.html.md#FFIFunction)
    * [`FFIType`](functions.html.md#FFIType)
    * [`FFIValue`](functions.html.md#FFIValue)
  * [Shared memory](functions.html.md#shared-memory)
    * [`memory_add()`](functions.html.md#memory_add)
    * [`memory_dec()`](functions.html.md#memory_dec)
    * [`memory_delete()`](functions.html.md#memory_delete)
    * [`memory_exists()`](functions.html.md#memory_exists)
    * [`memory_fetch()`](functions.html.md#memory_fetch)
    * [`memory_inc()`](functions.html.md#memory_inc)
    * [`memory_store()`](functions.html.md#memory_store)
    * [`memory_update()`](functions.html.md#memory_update)
  * [Server](functions.html.md#server)
    * [`server_concurrency()`](functions.html.md#server_concurrency)
  * [Queue](functions.html.md#queue)
    * [`queue_suspend()`](functions.html.md#queue_suspend)
    * [`queue_policy()`](functions.html.md#queue_policy)
    * [`queue_policy_delete()`](functions.html.md#queue_policy_delete)
    * [`queue_quota()`](functions.html.md#queue_quota)
  * [Metrics](functions.html.md#metrics)
    * [`metrics_increment()`](functions.html.md#metrics_increment)
    * [`metrics_decrement()`](functions.html.md#metrics_decrement)
    * [`metrics_set()`](functions.html.md#metrics_set)
    * [`metrics_get()`](functions.html.md#metrics_get)
  * [Classes](functions.html.md#classes)
    * [`Exception`](functions.html.md#_CPPv49Exception)
      * [`Exception.constructor()`](functions.html.md#Exception.constructor)
      * [`Exception.toString()`](functions.html.md#Exception.toString)
      * [`Exception.message()`](functions.html.md#Exception.message)
      * [`Exception.file()`](functions.html.md#Exception.file)
      * [`Exception.line()`](functions.html.md#Exception.line)
      * [`Exception.column()`](functions.html.md#Exception.column)
* [SMTP server](smtpserver.html.md)
  * [Connect](connect.html.md)
    * [Variables](connect.html.md#variables)
      * [Arguments](connect.html.md#arguments)
      * [Connection](connect.html.md#connection)
      * [Transaction](connect.html.md#transaction)
    * [Functions](connect.html.md#functions)
      * [`Accept()`](connect.html.md#Accept)
      * [`Reject()`](connect.html.md#Reject)
      * [`Defer()`](connect.html.md#Defer)
    * [On script error](connect.html.md#on-script-error)
    * [On implicit termination](connect.html.md#on-implicit-termination)
  * [Proxy](proxy.html.md)
    * [Variables](proxy.html.md#variables)
      * [Arguments](proxy.html.md#arguments)
      * [Connection](proxy.html.md#connection)
        * [HELO](proxy.html.md#helo)
        * [TLS](proxy.html.md#tls)
          * [Peercert](proxy.html.md#peercert)
        * [AUTH](proxy.html.md#auth)
      * [Transaction](proxy.html.md#transaction)
        * [Recipient](proxy.html.md#recipient)
        * [Address](proxy.html.md#address)
    * [Functions](proxy.html.md#functions)
      * [`Pass()`](proxy.html.md#Pass)
      * [`Reply()`](proxy.html.md#Reply)
      * [`Next()`](proxy.html.md#Next)
    * [On script error](proxy.html.md#on-script-error)
    * [On implicit termination](proxy.html.md#on-implicit-termination)
  * [HELO](helo.html.md)
    * [Variables](helo.html.md#variables)
      * [Arguments](helo.html.md#arguments)
      * [Connection](helo.html.md#connection)
        * [TLS](helo.html.md#tls)
          * [Peercert](helo.html.md#peercert)
        * [AUTH](helo.html.md#auth)
      * [Transaction](helo.html.md#transaction)
    * [Functions](helo.html.md#functions)
      * [`Accept()`](helo.html.md#Accept)
      * [`Reject()`](helo.html.md#Reject)
      * [`Defer()`](helo.html.md#Defer)
    * [On script error](helo.html.md#on-script-error)
    * [On implicit termination](helo.html.md#on-implicit-termination)
  * [AUTH](auth.html.md)
    * [Variables](auth.html.md#variables)
      * [Arguments](auth.html.md#arguments)
      * [Connection](auth.html.md#connection)
        * [HELO](auth.html.md#helo)
        * [TLS](auth.html.md#tls)
          * [Peercert](auth.html.md#peercert)
      * [Transaction](auth.html.md#transaction)
    * [Functions](auth.html.md#functions)
      * [`Accept()`](auth.html.md#Accept)
      * [`Reject()`](auth.html.md#Reject)
      * [`Defer()`](auth.html.md#Defer)
      * [`Reply()`](auth.html.md#Reply)
    * [On script error](auth.html.md#on-script-error)
    * [On implicit termination](auth.html.md#on-implicit-termination)
    * [Authentication diagram](auth.html.md#authentication-diagram)
  * [MAIL FROM](mailfrom.html.md)
    * [Variables](mailfrom.html.md#variables)
      * [Arguments](mailfrom.html.md#arguments)
      * [Connection](mailfrom.html.md#connection)
        * [HELO](mailfrom.html.md#helo)
        * [TLS](mailfrom.html.md#tls)
          * [Peercert](mailfrom.html.md#peercert)
        * [AUTH](mailfrom.html.md#auth)
      * [Transaction](mailfrom.html.md#transaction)
        * [Address](mailfrom.html.md#address)
    * [Functions](mailfrom.html.md#functions)
      * [`Accept()`](mailfrom.html.md#Accept)
      * [`Reject()`](mailfrom.html.md#Reject)
      * [`Defer()`](mailfrom.html.md#Defer)
    * [On script error](mailfrom.html.md#on-script-error)
    * [On implicit termination](mailfrom.html.md#on-implicit-termination)
  * [RCPT TO](rcptto.html.md)
    * [Variables](rcptto.html.md#variables)
      * [Arguments](rcptto.html.md#arguments)
      * [Connection](rcptto.html.md#connection)
        * [HELO](rcptto.html.md#helo)
        * [TLS](rcptto.html.md#tls)
          * [Peercert](rcptto.html.md#peercert)
        * [AUTH](rcptto.html.md#auth)
      * [Transaction](rcptto.html.md#transaction)
        * [Recipient](rcptto.html.md#recipient)
        * [Address](rcptto.html.md#address)
    * [Functions](rcptto.html.md#functions)
      * [`Accept()`](rcptto.html.md#Accept)
      * [`Reject()`](rcptto.html.md#Reject)
      * [`Defer()`](rcptto.html.md#Defer)
    * [On script error](rcptto.html.md#on-script-error)
    * [On implicit termination](rcptto.html.md#on-implicit-termination)
  * [End-of-DATA](eod.html.md)
    * [Variables](eod.html.md#variables)
      * [Arguments](eod.html.md#arguments)
      * [Connection](eod.html.md#connection)
        * [HELO](eod.html.md#helo)
        * [TLS](eod.html.md#tls)
          * [Peercert](eod.html.md#peercert)
        * [AUTH](eod.html.md#auth)
      * [Transaction](eod.html.md#transaction)
        * [Recipient](eod.html.md#recipient)
        * [Address](eod.html.md#address)
        * [http](eod.html.md#http)
    * [Functions](eod.html.md#functions)
      * [Actions](eod.html.md#actions)
        * [`Accept()`](eod.html.md#Accept)
        * [`Reject()`](eod.html.md#Reject)
        * [`Defer()`](eod.html.md#Defer)
      * [DATA, MIME and attachments](eod.html.md#data-mime-and-attachments)
        * [`EODMailMessage`](eod.html.md#_CPPv414EODMailMessage)
        * [`EODMailMessage.queue()`](eod.html.md#EODMailMessage.queue)
    * [On script error](eod.html.md#on-script-error)
    * [On implicit termination](eod.html.md#on-implicit-termination)
  * [Disconnect](disconnect.html.md)
    * [Variables](disconnect.html.md#variables)
      * [Arguments](disconnect.html.md#arguments)
        * [Error](disconnect.html.md#error)
        * [Reply](disconnect.html.md#reply)
      * [Connection](disconnect.html.md#connection)
        * [HELO](disconnect.html.md#helo)
        * [TLS](disconnect.html.md#tls)
          * [Peercert](disconnect.html.md#peercert)
        * [AUTH](disconnect.html.md#auth)
    * [Functions](disconnect.html.md#functions)
      * [`Pass()`](disconnect.html.md#Pass)
    * [On script error](disconnect.html.md#on-script-error)
    * [On implicit termination](disconnect.html.md#on-implicit-termination)
* [SMTP queue](smtpqueue.html.md)
  * [Pre-delivery](predelivery.html.md)
    * [Variables](predelivery.html.md#variables)
      * [Arguments](predelivery.html.md#arguments)
        * [Queue](predelivery.html.md#queue)
          * [Plugin](predelivery.html.md#plugin)
      * [Message](predelivery.html.md#message)
        * [Id](predelivery.html.md#id1)
        * [Address](predelivery.html.md#address)
        * [File](predelivery.html.md#file)
        * [DSN](predelivery.html.md#dsn)
    * [Functions](predelivery.html.md#functions)
      * [`Try()`](predelivery.html.md#Try)
      * [`Queue()`](predelivery.html.md#Queue)
      * [`Bounce()`](predelivery.html.md#Bounce)
      * [`Delete()`](predelivery.html.md#Delete)
      * [`SetMetaData()`](predelivery.html.md#SetMetaData)
      * [`GetMetaData()`](predelivery.html.md#GetMetaData)
    * [On script error](predelivery.html.md#on-script-error)
    * [On implicit termination](predelivery.html.md#on-implicit-termination)
  * [Post-delivery](postdelivery.html.md)
    * [Variables](postdelivery.html.md#variables)
      * [Arguments](postdelivery.html.md#arguments)
        * [Policy](postdelivery.html.md#policy)
          * [Policies](postdelivery.html.md#policies)
        * [Attempt](postdelivery.html.md#attempt)
          * [Result](postdelivery.html.md#result)
          * [Error](postdelivery.html.md#error)
          * [Connection](postdelivery.html.md#connection)
            * [TLS](postdelivery.html.md#tls)
              * [Peercert](postdelivery.html.md#peercert)
              * [TLSA](postdelivery.html.md#tlsa)
                * [Records](postdelivery.html.md#records)
          * [Plugin](postdelivery.html.md#plugin)
        * [DSN](postdelivery.html.md#dsn)
        * [Queue](postdelivery.html.md#queue)
          * [Plugin](postdelivery.html.md#ai1p)
      * [Message](postdelivery.html.md#message)
        * [Id](postdelivery.html.md#id2)
        * [Address](postdelivery.html.md#address)
        * [File](postdelivery.html.md#file)
        * [DSN](postdelivery.html.md#dsn2)
    * [Functions](postdelivery.html.md#functions)
      * [`Queue()`](postdelivery.html.md#Queue)
      * [`Bounce()`](postdelivery.html.md#Bounce)
      * [`Delete()`](postdelivery.html.md#Delete)
      * [`Default()`](postdelivery.html.md#Default)
      * [`SetMetaData()`](postdelivery.html.md#SetMetaData)
      * [`GetMetaData()`](postdelivery.html.md#GetMetaData)
    * [On script error](postdelivery.html.md#on-script-error)
    * [On implicit termination](postdelivery.html.md#on-implicit-termination)
    * [References](postdelivery.html.md#references)
      * [SMTP states](postdelivery.html.md#smtp-states)
* [Integrations](integrations.html.md)
