Skip to main content


Last updated March 2020


msys.brightmail.scan — Use Brightmail to scan messages


msys.brightmail.scan(msg, accept, vctx);

msg: userdata, ec_message type
accept: userdata, accept_construct type
vctx: userdata, validate_context type


Use this function to scan the mail. You must load and correctly configure the brightmail module before using this function. Be sure to set the brightmail module option sieve_mode to on. For details, see “brightmail – Symantec Brightmail™ Content Scanning Support”.

This function can be invoked at the data, spool, or each_rcpt phases, and it will not work at the connect, ehlo, mailfrom, or rcptto phases.

Enable this function with the statement require('msys.brightmail');.

It takes the following parameters:

  • msg – Email to be scanned

  • accept – accept_construct

  • vctx – Validation context

This function returns a tuple with the following members:

  • verdict – Scan result. Possible values include spam and inbox.

  • is_default – If true, the mail should be dispatched to original destination.

  • rules – List of the brightmail rule numbers used to reach the verdict. The numbers are separated by a space and in string format. This key is available only when the brightmail module is configured and performs the scanning.

  • tracker – String suitable for use as the X-Brightmail-Tracker header. This key is available only when the brightmail module is configured and performs the scanning.


Do not use pcall with this function.


local mod = {};

function mod:validate_data_spool_each_rcpt(msg, accept, vctx)
  local verdict, is_default, rules, tracker =
    msys.brightmail.scan(msg, accept, vctx);
  print("verdict:", verdict, " is_default:", is_default,
    " rules:", rules, " tracker:", tracker);
  vctx:set(msys.core.VCTX_MESS, 'bm_verdict', verdict);
  return msys.core.VALIDATE_CONT;

msys.registerModule("test_bm", mod);
Was this page helpful?