Rafale.IO API 10.9 (EN)

INTRODUCTION

Rafale.IO is an integrated system for managing mailing lists (loyalty and acquisition campaigns) and transactional messages, called "jobs", which takes care of all the technical steps necessary to carry out an end-to-end mailing. at the end: expansion of the recipient list, personalization of messages, routing with deliverability management, tracking of opens and clicks, recording of unsubscriptions, publication of real-time statistics and production of logs and detailed reports.


The Rafale.IO programming interface is available in asynchronous mode, by file spooling, and in synchronous mode, via a RESTful / JSON API.


These two APIs access the same workspace of user accounts: thus, a job sent by spooling files can be reprogrammed via the REST API, and conversely, it is possible to request by spool the report of a job triggered by the 'REST API.


Each user is allocated a private storage space, according to the following tree structure:

\REQUEST is the directory where the client application submits commands to the system, such as: sending a test, an emailing, requesting reports and statistics. This directory is spooled regularly by the system to perform order processing.


The \RESPONSE directory contains the processing reports of commands spooled by the system.


The \LOG directory contains the daily log files for sending, tracking, responses received, as well as hourly aggregates.


The \REPLY directory contains the response messages received (eg Challenge-Response, FeedBackLoop, List-Unsubscribe, Out of Office, manual responses, etc.), classified by sending address and type.


Finally, the \DATA directory is intended for the elements of the jobs, such as text, html and AMP bodies, recipient lists and attachments and encapsulated images, which must be uploaded there beforehand in order to be able to be used by the system.


The organization of its tree structure is left free, and may vary depending on the nature of the shipments, for example:


For loyalty traffic, with sending a newsletter to a subscriber base, place the list of recipients in the \common sub-directory of the \DATA directory, and the bodies of the messages in a \DATA \bodys sub-directory .

For acquisition traffic on targeted files, create a sub-directory for each operation and copy the elements of the job there.


For simple transactional messages without attachments, the content of the text / html / amp bodies can be included directly in the routing order, and therefore does not require a prior upload.


Access to this directory (and copying of files) can be done natively by network sharing and FTP, but also via HTTP, with specific file upload / download commands.

 

Mailing lists / transactional messages differences:

 

  1. Usually, in mailing lists, the 'to:' field of each email is personalized with the recipient's address, and no recipient appears in 'cc:'

  2. While for transactional messages, each recipient receives a carbon copy of the same email, with exactly the same headers ('to:' 'cc:')

In other words, and from a purely technical point of view:

 

  1. a transactional message can be seen as a mailing list whose 'to:' and 'cc:' headers are static.

  2. a mailing list can be seen as a transactional message with a personalized 'to:' field, and of which all the recipients are given in 'bcc:'

 

For this reason, the system provides a single API for both types of job, which can handle many cases, even specific ones.


Incidentally, the scale of the sending volumes differs significantly: from 1 to a few dozen recipients for transactional messages, to mailing lists of several hundred thousand addresses, which is why, from a system point of view, a job is qualified as a "mailing list" when an external file of recipients is specified in the routing order, while a job is qualified as a "transactional message" if the recipients are only specified in the header fields 'to:', 'cc:' and 'bcc:' of the routing order.

1. JOB DATAS

1.1. Recipients list

The recipient lists used for mailing lists must be in .CSV format.

 

  • The name of the fields must be indicated on the first line of the file, with the special characters ';', ',' '<tab>', '|' as separator.

  • The system automatically detects the separator used

  • Fields and values ​​can optionally be double quoted

  • Fields starting with the letters 'RF' are prohibited because they are reserved by the system

  • The "EMAIL" field must be defined and contain the recipient's email address

  • The CSV file can contain a maximum of 250 fields

  • The length of a field name is limited to 24 characters, in the range 'A' - 'Z', '0-9' and the hyphen character '-'.

  • The data size of a field is limited to 1000 characters

  • Field names are insensitive to the box

  • The total length of a line is limited to 4000 characters

  • The encoding of the file must be specified in the routing order (by default, "utf-8" ", see" list ":" charset ")

 

Example:

 

name;forname;email;company;custid

Smith;John;john.smith@smithcompany.com;thesmithcompany;12345

Andersen;Thomas;t.ansersen@neocompany.com;neocomp;67890

NB: for transactional messages, the system builds a list of recipients from the 'to:' 'cc: and' bcc: 'fields of the headers, with the' EMAIL 'and' NAME 'fields as specified by the members " addr "and" name ".

1.2. Merging fields

The header fields of the messages (ex: 'Subject:'), the bodies of text, html or AMP bodies, can be personalized with any field from the list of recipients, using the following syntax: $$[record] field_name$$.


The system also provides two special merge fields:


$$[link]mirror$$ : create a link to a mirror page automatically generated by the system from the html body, re-personalized and with tracked links, exactly the same as the email sent


$$[link]unsub$$ : create a link to the unsubscribe page specified in the "tracking" section, which makes it possible to differentiate the click in the statistics.


Example of a custom header:


"header": {
  "subject": "$$[record]forname$$, your personalized offer"},…

Example of a custom html body:

"htmbody": {
"path": "Hello $$[record]forname$$,
To confirm your registration, please <a href="http://mycompany.com/register?id=$$[record]custid$$"> click here </a>
To view this message in your browser,
<a href="$$[record]mirror$$"> click here </a>
To stop receiving messages from us, you can
<a href="$$[record]unsub$$"> unsubscribe </a> "},…

1.3. Date fields

The special merge fields allow the representation of the date and time in multiple ways, in multiple languages, in local time zone or GMT:


$$ [XXXdateYYY] FMT, def $$
XXX 'gmt', def = 'local'
YYY 'fr', 'be', 'us', 'uk', 'esp', 'deu', 'ita', def = current country
FMT
% a Abbreviated weekday name
% A Full weekday name
% b Abbreviated month name
% B Full month name
% c Date and time representation appropriate for locale (% m /% /% y% H:% M:% S)
% C Long Date and time representation appropriate for locale
% d Day of month as decimal number (01 - 31)
% H Hour in 24-hour format (00 - 23)
% I Hour in 12-hour format (01 - 12)
% j Day of year as decimal number (001 - 366)
% m Month as decimal number (01 - 12)
% M Minute as decimal number (00 - 59)
% p Current locale's AM / PM indicator for 12-hour clock
% S Second as decimal number (00 - 59)
% w Weekday as decimal number (0 - 6; Sunday is 0)
% x Date representation for current locale
% X Time representation for current locale
% y Year without century, as decimal number (00 - 99)
% Y Year with century, as decimal number
% Z Either the time-zone name or time zone abbreviation, depending on registry settings; no characters if time zone is unknown
% e Date and time representation for email header (RFC 822).
% g Local / GMT difference. For example: "+0200"
def default [section] key

 

Examples:


$$[date]%e$$ => Thu, 20 Jun 2010 14:27:12 +0200
$$[datefr]%c$$ => 20/06/10 16:27:12
$$[gmtdatefr]%A,%c$$ => Sunday, 20/06/10 16:27:12

1.4. Virtual fields

Virtual fields allow you to create calculated values ​​using expressions, consisting of operators, functions, and logical tests.


Expressions are made up of operands (constants and merge fields) and operators (mathematics or functions), and are evaluated in RPN (Reverse Polish Notation).


Virtual fields are defined in the [virtual] section of the job definition file and are evaluated in their declaration order.


This first example personalizes the subject of the email if the 'forname' field is entered in the CSV list, by managing the capital letter at the start of the sentence:


"header": {
  "subject": "$$[record]greet$$ our personalized offer",…
"virtual": {
  "greet": "$$[record]forname$$ _len 1> $$[record]forname$$ _maj \",
            y\" _cat \"Y\" ? ",…


The following example shows an email subject whose content is prefixed by a personalized message according to the recipient's birthday, while managing the capital letter at the start of the sentence if the first name 'firstname' is not entered:


"header": {
  "subject": "$$[record]greet$$ our personalized offer",…
"virtual": {
  "greet": "$$[record]birthdate$$ $$[datefr]%d/%m$$ _beg \"Happy
            birthday! \" \"\"? $$[record]forname$$ _len 1>
            \"$$[record]forname$$\" _maj \", y\" _cat \"Y\"? _cat",…


Below are the details of the operators and functions available:

1.4.1. Operators

+ addition
- substraction
* multiplication
/ division
% percentage

1.4.2. Tests

== is equal to
! = is different from
> = greater than or equal to
<= less than or equal to
>> strictly greater than
<< strictly less than
<> between two values
&& AND logical
|| Logical OR
[= begins with
=] ends with
[] contains
][ does not contain
{} present in the list
} {not in the list

1.4.3. Conditions

ABC? if A is true, then B otherwise C

1.4.4. Functions

 

_len length of
_maj converts the first letters of words to upper case, the rest
lowercase
_upp convert all to uppercase
_low converted all to lowercase
_cmp insensitive case comparison
_str string 1 contains string 2
_beg string 1 starts with string 2
_end string 1 ends with string 2
_usr extracts username from an email address
_dom extracts the domain name from an email address
_cat concatenates string 1 and string 2
_mrg force evaluation of compound fusion fields

1.5. Text / html / AMP templates

The contents of the text, html and AMP bodies can either be directly encasped in the routing order in literal form (see ex above), encoded natively in "utf-8", or be stored in external files (in this In this case, remember to specify their encoding in the "charset" field in the routing order), with an access path preceded by the '@' character and relative to the user's working directory. Note: the description of the AMP format is published on https://amp.dev/.


For example :

"htmbody": {
  "path": "@DATA/news5/news5_body.html",…}

1.6. Charsets

The "charset" fields describe the character set in which the values ​​are entered, and are therefore necessary for a correct encoding of email messages, whether they are headers or templates.


When the system merges the templates with the fields in the recipient list, it automatically performs the conversion of the character sets between the data.


For example, if the template is in UTF-8 format and the recipient list in iso-8859, the system will convert the accents of the recipient list fields to UTF-8 before merging them with the html body.

2. ASYNCHRONOUS API (SPOOL)

The commands are transmitted to the system by means of files, placed in the \REQUEST directory, spooled by the system.


Their content depends on the function called (and can be empty), and exactly reflects the data flow of the RESTful API: the first line of the file literally contains the HTTP request and the parameters in JSON after the first empty line (<CR > <LF> <CR> <LF>). The "Authorization:" and "Content-Lenght:" HTTP headers are optional and ignored by the system, since the access rights are given upstream for access to the directories of the user accounts, and the length of the data is given by the <EOF>.


To be correctly taken into account by the system, these files must respect a strict naming convention:


A_date=<YYMMDDHHMMSS>_id=<ID>.json

  • <YYMMDDHHMMSS> represents the desired date for taking into account by the system. Nb: the system ignores the command file until the date is reached.

  • <ID> represents a unique mandatory customer identifier, string of 3 to 30 characters in the spectrum 'a' - 'z' '0' - '9' and the character '-'.

The system uses 'ID' as the file name for associated response data where applicable.

If an order has already been transmitted with the same <ID>, the result overwrites the previous one, so be careful to ensure the uniqueness of the identifier to keep a record of all the processing of the system.

When it is taken into account by the system, the file 'A_date = YYMMDDHHMMSS… .json' is renamed to 'Y_date = YYMMDDHHMMSS… .json' throughout the processing.

Warning, when creating a command file via network share or FTP, use a temporary file name that does not start with 'A_ *' so that it is not taken into account by the system before the entire of its content is written to disk. Once the copy has been made, rename the temporary file to 'A _...'. Note: the HTTP interface is free from this type of problem.


In the event of a processing error, the file is renamed to 'X_date = YYMMDDHHMMSS… .json' the key "stamp": {"err": .., "msg":…,} indicates the cause of the error.

If the order processing is carried out normally, the file is moved to the \RESPONSE directory and renamed to 'Z_date = YYMMDDHHMMSSjson', and completed with the result code of the processing in the "stamp": {"err": key. ., "msg":…,}, and associated data, such as request for logs, reports or statistics are available in the \RESPONSE\<ID>.<ext> directory, the extension depending on the requested data format in output, specified in the parameters of the query (? ftm = csv / htm / xml / json)

3. RESTful / JSON API (SYNCHRONOUS)

The RESTful API is accessible via the url:


https//:<server address>/api


Authentication is performed via the HTTP header:


Authorization: Bearer <apikey>

 

The <apikey> field is configured in the user account declared on the server (see “Rafale.IO - Configuration 10.9”).

 

For convenience, it is also possible to pass the <apikey> in the url, as a parameter of the request:


https//:<server address>/api/<obj>?apikey=<apikey>

 

Most GET methods return arrays of objects (statistics, reports, logs, etc.) whose output format can be defined by the <format> parameter of the request:

 

https//:<server address>/api/<obj>?format=<csv/htm/xml/json>

  • The CSV format is the most compact because the name of the fields appears only once at the head of the table.

  • The HTM format provides a minimalist interface to consult the main tables and parameters of the system via a browser.

  • The XML format allows tables to be imported directly into systems that are natively compatible with this format (eg “XML data flow” from Excel).

  • Finally, the JSON format is suitable for retrieving small volumes of structured data.

 

The data associated with the POST and PUT methods must be exclusively formatted in JSON.

Examples of use with Curl:

curl -X "POST" "https://<server address>/api/jobs" -H "Authorization: Bearer <apikey>" -H "Content-Type: application/json" -d "routing order in JSON format "

In response, the system provides an HTTP status code and, where applicable, additional data, formatted in JSON, in the form of a "stamp" object, which contains at least one field for the date of processing of the request, a numeric error code and a description of the error code.

Typical transaction:

<method> api/<objet>?<options> HTTP/1.1
Authorization: Bearer <apikey>
Content-Type: application/json
Content-Lenght: <data size>


{
   …
}

-----------------------------------------------------------------------------------------------
HTTP/1.1 <HTTP error code>
Content-Type: application/json
Content-Lenght: <data size bel
ow>


{
"stamp" :  {
    "date"        : <timestamp YYMMDDhhmmss>,
    "err"         : <error code, 0=OK>,
    "msg"         : <error description>
    }
}

or parameter <HTTP error code> can take the following values:

250 OK

Request successfully processed

201 Created

Object created successfully

HTTP Status Code

Description

400 Bad request

Invalid request format

401 Unauthorized

Unauthorized access to the resource (<apikey> rights)

403 Forbidden

Unauthorized access to the object (<apikey> rights)

404 Not found

Resource / non-existent object

204 No Content

Request successfully processed

JSON schemas are given with <description> values ​​between angles, which must be replaced by real values ​​conforming to JSON syntax, namely double quoted strings (backslash escape character) and encoded in utf-8, booleans with unquoted strings true and false, and numbers without quotes.

4. FILES

First, even if it is not strictly necessary for transactional messages without attachments or encapsulated images, as indicated above, it is necessary to upload in the storage space of the user account the elements that will be referenced in the routing orders:

POST api/files/<path>

upload a file to the user directory. If <path> contains directories, they will be automatically created. 3 levels of sub-directories allowed. The operation fails if the file already exists.

PUT api/files/<path>

same as POST, with the difference that the uploaded file overwrites any previous version.

GET api/files/

returns the list of files in the root directory of the user account

GET api/files/<path>

if path is a directory, returns the list of files in the directory, otherwise, the complete file.

DEL api/files/<path>

deletes the file <path>.

Method

Description

NB: this object only makes sense in the context of the RESTful API, since asynchronously, access to the files of the client account is carried out by network or FTP sharing.

These methods therefore allow the upload of mailing lists, bodies, attachments and images in native format, without Base64 conversion and encaspulation in a JSON object.

Example of uploading the news5_body.htm file in the \ DATA \ NEWS5 sub-directory of the user account:

 

POST api/files/DATA/NEWS5/news5_body.htm HTTP/1.1
Authorization: Bearer <apikey>
Content-Type: text/html
Content-Lenght: <htm data size>

 

<html>This is the html body…     </html>

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <json data size>


{
"stamp" :  {
    "date"        : <timestamp YYMMDDhhmmss>,
    "mailno"      : <system reference under which the job is saved>,
    "err"         : <error code, 0=OK>,
    "msg"         : <error decription>
    }
}

Example of downloading a response file to a request for job statistics:

GET api/files/RESPONSE/<ID>.csv HTTP/1.1
Authorization: Bearer <apikey>

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/csv
Content-Lenght: <csv data size>


"rfdate";"rfipno";"rfipstr";"rfsdno";"rfsdstr";"rfdmno";"rfdmstr";"rfmxno";…


<EOF>

5. JOBS

POST api/jobs

Create a new job and start sending

PUT api/jobs/<rfmailno>

Modifies the properties of the job <rfmailno> (start / end date, number of retries, etc.)

GET api/jobs

List all the jobs of the user account and their main status and statistics indicators

GET api/jobs/<rfmailno>/stats

Returns the detailed sending and tracking statistics for job <rfmailno>, broken down by [IP, sd, dm, mx]

GET api/jobs/<rfmailno>/report

Returns the job sending report <rfmailno>

GET api/jobs/<rfmailno>/clicks

Returns the statistics of the clicks broken down from the job <rfmailno>

GET api/jobs/<rfmailno>/<data>

Returns the content of the native elements of the job (txtbody / htmbody / ampbody / list)

Method

Description

5.1. Send a job

This method creates a new job (transactional message or mailing list) and initiates the sending, and returns the result of the operation in the "stamp" section of the response.

POST api/jobs HTTP/1.1
Authorization: Bearer <apikey>
Content-Type: application/json
Content-Lenght: <json data size>

 

{
 "job" : {
    "ref"         :  <job's reference (3-30 chars ‘a’-‘z’ ‘0’-‘9’ ‘-‘>,
    "title"       :  <job title>,
    "tags"        :  [ <list of research keywords>,… ],
    "datestart"   :  <job start date YYMMDDhhmmss>,
    "datestop"    :  <job stop date YYMMDDhhmmss>
    "retrynb"     :  <number of retries>
    "retrydelay"  :  <delai between retries>
    }, 

 "header" : { 
    "subject"     :  <email subject>,
    "from"        :  { "addr": <from email> , "name": <from name> },
    "sender"      :  { "addr": <sender email> , "name": <sander name> },
    "reply-to"    :  { "addr": <reply email> , "name": <reply name> },
    "to"          :  [ { "addr" : <recipient email>, "name" : <recipient name> },… ],
    "cc"          :  [ { "addr" : <recipient email>, "name" : <recipient name> },… ],
    "bcc"         :  [ { "addr" : <recipient email>, "name" : <recipient name> },… ],
    "feedback-id" :  <feedback-id field (Google) a:b:c:d>,
    "precedence"  :  <precedence field (Google) true/false>,
    "unlst"       :  <List-Unsubscribe field : http/smtp/both links>,
    "charset"     :  <email header encoding charset, def utf-8>
    },

  "list" : {
    "path"        : <@path of the csv recipients list file>,
    "charset"     : <list encoding charset>,
    "testaddr"    : [<test email list>,… ],
    "checkaddr"   : [<test email list for each IP>,… ],
    "filter"      : [<list of blacklists used for filtering>,… ]
    },

  "virtuals" : { { <virtual field name> : <expression>,… },
    },

 

  "txtbody" : {
    "path"        : <literal content or @path to body txt file>,
    "encoding"    : <body txt
encoding format, def Quote-Printable>,
    "charset"     : <body txt encoding charset>
    },

  "htmbody" : {
    "path"        : <literal content or @path to body htm file>,
   

    "encoding"    : <body htm encoding format, def Quote-Printable>,

    "charset"     : <body htm encoding charset>

    },
 

  "ampbody" : {
    "path"        : <literal content or @path to body amp file>,   

    "encoding"    : <body amp encoding format, def Quote-Printable>,

    "charset"     : <body amp encoding charset>

    },
 

  "attachments" : [ {
    "path"        : <@path to attachment file>,
    "encoding"    : <attachment encoding format, def Base64>,
    },… ],

 

  "images" :  [ {
    "path"        : <@path to image file>,
    "encoding"    : <image encoding format, def Base64>,
    },… ],


  "routing" : {
    "ip"          : <list of sending IP address>,
    "sender"      : <sending domain used in from>,
    "envelopefrom": <adress used inMAILFROM : verp/from/sender>,
    "sign"        : <DKIM signature flag : true/false>,
    "ssl"         : <STARTTLS flag : true/false>,
    "route"       : <routing gateway, def direct MX>
    },

  "tracking" : {
    "host"        : <domain name used for tracked URLs>,
    "open"        : <open tracking option : disable/image/pixel>,
    "click"       : <clicks tracking option : disable/short/embedded>,
    "image"       : <images tracking option : disable/short/embedded>,
    "bot"         : <invisible link tracking option : true/false>,
    "unsub"       : <link to the unsubscribe page>,
    "uncfm"       : <link to the unsubscribe confirmation page>,
    "mirror"      : <link to mirror page>
    }
}

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <taille en octet des données JSON ci-dessous>


{
  "rfstamp" :  {
    "rfdate"        : <timestamp YYMMDDhhmmss>,
    "rfmailno"      : <system reference under which the job is saved>,
    "rferr"         : <error code, 0=OK>,
    "rfmsg"         : <error description>
    }
}

"Job" object:


If "datestart" is not specified, immediate departure.
If "datestop" is not specified, automatic job stopping after the last retry cycle.

 

"Header" object:


Depending on the configuration of the user account and the routing parameters defined in "routing", the domain indicated in the email address in the "addr" key of "from" may be replaced by another domain, such as the ReverseDNS of the transmission IP for example. For this reason, it is valid to define an "addr" address of "from" with only the <user> part of the full email address <user @ domain>. For example :


"header": {"from": {"addr": "info",…},…
"routing": {"domain": "mysender.com",…},…

 

     => From: <info@mysender.com>

 

The "unlst" field generates a 'List-Unsubsribe:' header in the headers of sent emails, which can contain two types of links: a mailto smtp for asynchronous unsubscribers ("smtp" value), or http for a synchronous unsubscribe ( "http" value), or both, at the discretion of the receiving system ("both" value).


The character set indicated in "charset" specifies the destination encoding of the messages (def: "utf-8"). Reminder: the character strings in a JSON file must be in the native utf-8 format.

 

Object "XXXbody":


It is necessary to have at least one of the three valid bodysuits, txt, htm or amp.


Bodyparts of undeclared sections are not inserted, and any combination is allowed: raw txt only, htm only, amp only, txt / htm, txt / amp, htm / amp, txt / htm / amp.

 

"List" object:

 

If "list": "path" is not specified, the system builds the list of recipients from the "to", "bb" and "bcc" fields defined in "header", with two columns: email and name .
In the context of a mailing list, "list": "path" must contain the path of a recipient list. The system ignores the "addr" indicated in "header" for the shipment, since these are static fields. To customize the "to" field for each recipient, indicate a single entry in the "header":


"to": [{"addr": "$$[record]email$$", "name": "$$[record]name$$"}]

If "testaddr" indicates at least one valid email address, the system considers that it is a test shipment, for validation on internal emails before sending to the true final recipients.


In order to ensure a perfect rendering of the customizations, the system merges the emails with the original data from the recipient list (in particular the custom fields), but only delivers them to the test email addresses. In this configuration, the subject of the email is prefixed with "[TEST]", and all unsubscribe functions are disabled.


If "checkaddr" indicates at least one valid email address, the system considers it to be an IP status check shipment. Its operation is identical to the test emails, with the difference that the system sends the message to each recipient from each IP specified in "routing": "ip".


In the list of jobs, the "type" field indicates the type of the job, with the values:

  • 'L': List (mailing List)

  • 'M': Message (transactional Message)

  • 'T': Test

  • 'C': Check

 

"Routing" object:

 

The parameters of this object are likely to be fixed at the user account configuration level, and therefore not modifiable at the routing order level.


If "ip" is not specified, the system uses all the IPs declared as authorized in the user account.


If "domain" is not specified, the system uses the default one configured in the user account (if the latter is not specified, the system uses the ReverseDNS of the send IP, see "Rafale.IO - Configuration 10.9 ”).


The "envelopefrom" field can contain three values:

  • "verp" (Variable Envelope Return Path), which generates a unique bounce email address for each recipient with the RDNS of the sending IP as domain, used in 'MAILFROM:' of the SMTP session

  • "from", ie the value indicated in "header": {"from": "addr"}.

  • "sender", that is to say the value indicated in "header": {"sender": "addr"}.

 

The "route" field is used to indicate a delivery gateway rather than sending the message directly to the destination MX. This can be a third-party SMTP relay, but also a Cloud account (Azure or EC2, see “Rafale.IO - Cloud API 1.0”). The third-party SMTP relay must be declared on the system in \DOMAINS, like the other destination groups (eg: @myisprelay) and configured with the technical parameters of the relay (IP / login / passw).


"Tracking" object:


The parameters of this object are likely to be fixed at the level of the user account configuration, and therefore not modifiable at the level of the routing order.


If "domain" is not specified, the system uses the default one configured in the user account (if the latter is not specified, the system uses the ReverseDNS of the send IP, see "Rafale.IO - Configuration 10.9 ”). If a domain is specified, an 'A' type record from its DNS zone must point to one of the IP addresses listening on port 80 of the server.

The "open" field, for the opening tracking options, can have three values: 'disable': no tracking is performed; 'pixel': the link to a white 1x1 image is inserted in the body html code; 'image': the system performs a URL redirection on the first <img…> tag found in the code of the html body.

The "mirror" field is optional, it can specify an external URL for the mirror page of the sent email, the system natively generating personalized and tracked mirror pages on the fly from the html body.

The "unsub" and "uncfm" fields can specify external URLs for the unsubscribe and unsubscribe confirmation pages, but are usually set in the user account configuration. URLs can also be local, with a path relative to the application's \ wwws directory.

"Stamp" object:

 

The system returns the result of processing the send job request in the "stamp" section. The "rfmailno" field represents the internal reference number of the job through which all subsequent operations can be performed: request for report, statistics, reprogramming, suspension and restart, etc.

5.2. Modify a job

PUT api/jobs/<rfmailno> HTTP/1.1
Authorization: Bearer <apikey>
Content-Type: application/json
Content-Lenght: <json data size>

 

{
"status" :  {
    "hold"         : <true/false>,
    },
"job" : {
    "datestart"   :  <job start date YYMMDDhhmmss>,
    "datestop"    :  <job stop date YYMMDDhhmmss>
    "retrynb"     :  <number of retries>
    }, 
 "header" : { 
    "subject"     :  <email subject>,
    } 
}

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <json data size>


{
"stamp" :  {
    "date"        : <timestamp YYMMDDhhmmss>,
    "err"         : <error code, 0=OK>,
    "msg"         : <error description>
    }
}

The "status" key allows you to suspend the distribution of the job with immediate effect. The job remains in suspended state until it has been restarted via a request setting the value of "hold" to false.


The "job" key is used to reprogram the start and end dates of the job's sending, as well as the number of sending attempts.


Finally "header" allows the modification of the subject of the emails being broadcast.

5.3. List of jobs

GET api/jobs/<rfmailno>?from=<index_from>&to=<index_to>
     &fmt=<csv/htm/xml/json_output_file_format>    HTTP/1.1
Authorization: Bearer <apikey>

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <json data size>

 

{
  "jobs" : [ {
    "ref"         : <job reference>,
    "type"        : <‘L’ for a mailing List, ‘M’ for a transactionnal Message,
                     ‘T’ for Test and ‘C’ for Check>,
    "rfmailno"    : <job system reference>,
    "rfstart"     : <job start date YYMMDDHHMMSS>,
    "rfstop"      : <job stop date YYMMDDHHMMSS>,
    "rfsts"       : <job status (see below)>,
    "rfstr"       : <status description>,
    "rfrsn"       : <status reason>,
    "rfrecfirst"  : <internal counter>,
    "rfrecidx"    : <internal counter>,
    "rfrecbusy"   : <total number of jobs in message queue>,
    "rfrecfeed"   : <last number of jobs fed in message queue>,
    "rflistsize"  : <total number of recipients in the list>,
    "rffiltered"  : <number of recipients filtered at submission>,
    "rfdiscarded" : <number of recipients filtered during sending>,
    "rfsyserr"    : <number of emails in error>,
    "rfdelivered" : <number of delivered emails>,
    "rfsoft"      : <number of soft bounce>,
    "rfhard"      : <number of hard bounce>,
    "rfflow"      : <number of flow changes during sending>,
    "rfptrn"      : <number of unrecognized SMTP patterns>,
    "rfopen"      : <number of openings>,
    "rfopener"    : <number of openers>,
    "rfclick"     : <number of clicks>,
    "rfclicker"   : <number of clickers>,
    "rfmirror"    : <number of miror page viewers (page miroir)>,
    "rfunsub"     : <number of unsubscribers>,
    "rfuncfm"     : <number of confirmed unsubscribers>,
    "rfunlst"     : <number of unsubscribers using list-unsubscribe header>,
    "rfbot"       : <number of recipients that clicked on invisble link>,
    "rffbl"       : <number of FeedBackLoop received>,
    "rfreply"     : <number of replies by email>,
    "datestart"   : <schedule start date>,
    "datestop"    : <schedule stop date>,
    "retrynb"     : <number of retries>,
    "retrydelay"  : <delay (in hour) between retries>,
    "title"       : <job title>,
    "tags"        : <research keywords>,
    "subject"     : <email subject>,
    "fromaddr"    : <from email address (without domain)>,
    "fromname"    : <from name>,
    "toaddr"      : <first recipient email address>,
    "toname"      : <first recipient name>,
    "ccaddr"      : <first cc recipient email address>,
    "ccname"      : <first cc recipient name>,
    "bccaddr"     : <first bcc recipient email address>,
    "bccname"     : <first bcc recipient name>,
    "rftextsz"    : <txt body size (in bytes)>,
    "txtbody"     : <link to txt body>,
    "rfhtmsz"     : <htm body size (in bytes)>,
    "htmbody"     : <li
nk to htm body>,
    "rfampsz"     : <amp body size (in bytes)>,
    "ampbody"     : <li
nk to amp body>,
    "list"        : <link to original recipients list>,
    "rflinknb"    : <total number of tracked links>,
    "rfattchsz"   : <total attachments size>,
    "rfattchnb"   : <number of attachments>,
    "rfimagenb"   : <number of embedded images>,
    "rfimagesz"   : <total images size>
    },… ]
}

 

rfsts

Description

Intitulé

1

Job submitted to the system

Submitted

2

Job in progress

Running

3

Job completed

Completed

4

Job waiting for datestart

Waiting

5

Manually suspended job

Suspended

6

Job in error

Error

Query:

 

The "rfmailno" parameter is optional. If not specified, the system returns by default the last 100 jobs injected into the system by the user. This range can be changed using the "from" and "to" parameters, with an interval of 1000 results at a time. If the "rfmailno" parameter is specified, the system returns only the entry in the table corresponding to the job reference and ignores the other parameters of the request.


5.4. Detailed statistics

GET api/jobs/<rfmailno>/stats?groupby=<flag de regroupement>
     &fmt=<csv/htm/xml/json_output_file_format> HTTP/1.1
Authorization: Bearer <apikey>

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <json data size>

 

{
  "stats" : [ {
    "rfdate"      : <always 0)>,
    "rfipno"      : <sending IP internal number>,
    "rfipstr"     : <sending IP address>,
    "rfsdno"      : <sender internal number>,
    "rfsdstr"     : <sender domain>,
    "rfdmno"      : <domain group internal number>,
    "rfdmstr"     : <domain group name>,
    "rfmxno"      : <MX internal number>,
    "rfmxstr"     : <MX IP address>,
    "rfmxdm"      : <internal number of the domain group attached to the MX>,
    "rfmxds"      : <domain group name attached to the MX>,
    "rflistsize"  : <number of recipients per domain group
                     (precomputed at submitted according to known alias)>,
    "rfdelivered" : <number of delivered emails>,
    "rfsoft"      : <number of soft bounces>,
    "rfhard"      : <number of hard bounces>,
    "rfflow"      : <number of flow changes during sending>,
    "rfptrn"      : <number of unrecognized SMTP patterns>,
    "rfopen"      : <number of openings>,
    "rfopener"    : <number of openers>,
    "rfclick"     : <number of clicks>,
    "rfclicker"   : <number of clickers>,
    "rfmirror"    : <number of clicks on miror page link>,
    "rfunsub"     : <number of clicks on unsubscribe link>,
    "rfuncfm"     : <number of clicks on unsubscribe confirmation link>,
    "rfunlst"     : <number of unsubscribtions via header List-Unsubscribe>,
    "rfbot"       : <number of clicks on invisble link>,
    "rffbl"       : <number of FeedBackLoop received>,
    "rfreply"     : <number of replies by email>
    },… ]
}

Query:

 

This command generates delivery and tracking statistics for the campaign referenced by the 'mailno' variable, taken from the campaign log.


The main indicators (emails delivered, hardbounces, opens, clicks, etc.) are broken down by unique quadruplets {ip; sd; dm; mx}, where 'ip' is the send IP, 's' is the sender domain, 'dm' is the destination domain group, and 'mx' is the IP of the remote SMTP server.


"listsize" represents the number of recipients per domain group, as precomputed according to the known aliases when the job was injected into the system.


The GROUPBY parameter represents the decimal value of the Logical Or (OR) of the following flags:

  • STAT_FLAG_IP 0x08

  • STAT_FLAG_SD 0x04

  • STAT_FLAG_DM 0x02

  • STAT_FLAG_MX 0x01

5.5. Job reports

GET api/jobs/<rfmailno>/report?&fmt=<csv/htm/xml/json_output_file_format> HTTP/1.1
Authorization: Bearer <apikey>

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <json data size>

 

{
  "report" : [ {
    "rfevt"       : <status code (see below)>,
    "rfstr"       : <status description>,
    "rfpatten"    : <SMTP pattern name>,
    "rfpoolno"    : <specific IP pool number>,
    "rfcancelnb"  : <number of expirations in message queue>,
    "rfsenddate"  : <send date {YYMMDDHHMMSS}>,
    "rfduration"  : <duration (ms)>,
    "rfipno"      : <sending IP internal number>,
    "rfipstr"     : <sending IP address>,
    "rfsdno"      : <sender internal number>,
    "rfsdstr"     : <sender domain>,
    "rfdmno"      : <domain group internal number>,
    "rfdmstr"     : <domain group name>,
    "rfmxno"      : <MX internal number>,
    "rfmxstr"     : <MX IP address>,
    "rfmxname"    : <MX name>,
    "rfmxdm"      : <internal number of the domain group attached to the MX>,
    "rfmxds"      : <domain group name attached to the MX>,
    "rfmxdx"      : <number of the MX record>,
    "rfmxnb"      : <total number of MX records>,
    "rfipflow"    : <IP flow control profile used when sending>,
    "rfsdflow"    : <sender flow control profile used when sending>,
    "rftryno"     : <try number>,
    "rfssno"      : <number of the message in the SMTP session>,

    "rfdforge"    : <message merge/personalization time (ms)>,
    "rfdsign"     : <DKIM signature time (ms)>,
    "rfsize"      : <message size in bytes>,
    "rfssl"       : <SSL/TLS negociated version>,
    "rferr"       : <error>,
    "rfapp"       : <function return>,
    "rfdwe"       : <socket error>,
    "rfval"       : <last XXX code received>,
    "rfstp"       : <last step in protocol>,
    "rfclientip"  : <http client IP address>,
    "rflasthit"   : <last tracking event>,
    "rflastclick" : <last click>,
    "rfopennb"    : <total number of openings>,
    "rfopen"      : <last opening date>,
    "rfclicknb"   : <total number of clicks>,
    "rfclick"     : <last clic date>,
    "rfmirror"    : <first click date on mirror page link>,
    "rfunsub"     : <first click date on unsubscribe link>,
    "rfuncfm"     : <first click date on unsubscribe confirmation link>,
    "rfunlst"     : <first click date on List-Unsubscribe>,
    "rfbot"       : <first click date on invisible link>,
    "rffbl"       : <date of FeedBackLoop reception>,
    "rfreply"     : <date of reply reception>,
    "rfreplytype" : <reply type>,
    "rfdevice"    : <device of the HTTP client>,
    "rfbrowser"   : <browserof the HTTP client>,
    "email"       : <email recipient address>,
    <custom field>: <custom value>,
    <custom field>: <custom value>,
    <custom field>: <custom value>,
    …
    <custom field>: <custom value>
    },… ]
}

rfevt

Description

Intitulé

1

Empty email address

Empty

2

Invalid email address format

Invalid

3

Address in the xxx blacklist

BL xxx

4

Duplicate email address in the list

Duplicate

21

Email delivered successfully

Delivered

23

Hard Bounce - see rfstr for details

Hard

26

System error

System

25

IP / MX / banner filtered

Discarded

24

Changing parameter sets following an SMTP match pattern

Flow

22

Hard Bounce - see rfstr for details

Soft

5.6. Clicks details

GET api/jobs/<rfmailno>/clicks?fmt=<csv/htm/xml/json_output_file_format> HTTP/1.1
Authorization: Bearer <apikey>

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <json data size>

{
  "clicks" : [ {
    "no"          : <number of the link in the body>,
    "nb"          : <total number clicks on the link>,
    "url"         : <redirect url>
    },… ]
}

5.7. Download items

GET api/jobs/<rfmailno>/<txtbody/htmbody/ampbody/list> HTTP/1.1
Authorization: Bearer <apikey>

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/<content type>
Content-Lenght: <data size>

 

<requested data>

6. LOGS

6.1. Routing logs (MTA)

GET api/logs/<YYMMDD>/rfmta?fmt=<csv/htm/xml/json_output_file_format> HTTP/1.1
Authorization: Bearer <apikey>

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <json data size>

 

{
  "rfmta" : [ {
    "rfsenddate"     : <send date {YYMMDDHHMMSS}>,
    "ref"            : <job reference>,
    "email"          : <recipient email address>,
    "rfevt"          : <event code (see below)>,
    "rfstr"          : <event description>,
    "rfpattern"      : <SMTP pattern name>,
    "rfmailno"       : <job system reference>,
    "rfrecno"        : <recipient number in the list>,
    "rfpoolno"       : <IP pool number>,
    "rfipno"         : <sending IP internal number>,
    "rfipstr"        : <sending IP address>,
    "rfsdno"         : <sender internal number>,
    "rfsdstr"        : <sender domain>,
    "rfdmno"         : <domain group internal number>,
    "rfdmstr"        : <domain group name>,
    "rfmxno"         : <internal MX number>,
    "rfmxstr"        : <MX IP address>,
    "rfmxname"       : <MX name>,
    "rfmxdx"         : <number of the MX record>,
    "rfmxnb"         : <total number of MX records>,
    "rfmxdm"         : <internal number of the domain group attached to the MX>,
    "rfmxds"         : <domain group name attached to the MX>,
    "rfipflow"       : <IP flow control profile used when sending>,
    "rfsdflow"       : <sender flow control profile used when sending>,
    "rfdnssrv"       : <DNS server IP addresse used for MX resolution>,
    "rfipport"       : <SMTP connection IP port>,
    "rfssno"         : <number of the message in the SMTP session>,
    "rftryno"        : <try number>,
    "rfenvelopefrom" : <mailfrom address type>,
    "rfssl"          : <SSL/TLS negociated version>,
    "rfsslc"         : <SSL/TLS Cipher>,
    "rfsslh"         : <SSL/TLS Hash>,
    "rfssle"         : <SSL/TLS Exch>,
    "rfsize"         : <message size in bytes>,
    "rferr"          : <error code>,

    "rfval"          : <last XXX received>,
    "rfapp"          : <last function return value>,
    "rfdwe"          : <socket error>,
    "rfstp"          : <last step in protocol>,
    "rfduration"     : <session time (ms)>,
    "rfdjob"         : <total job time (ms)>,
    "rfdlookup"      : <MX resolution time (ms)>,
    "rfdcnt"         : <connection establishment time (ms)>,
    "rfdforge"       : <message merge/personalization time (ms)>,
    "rfdsign"        : <DKIM signature time (ms)>,
    "rfbanner"       : <greeting from the destination server>,
    "rfqueued"       : <destination server message receive confirmation>,
    "rfsnt"          : <last SMTP command sent>,
    "rfrcv"          : <last SMTP responde received >,
    "rfpath"         : <path to original message>,
    "rftrcref"       : <trace reference>,
    "rftrcoff"       : <trace offset>,
    "rftrclen"       : <trace size>
    },… ]
}

rfevt

Description

Intitulé

21

Email delivered successfully

Delivered

23

Hard Bounce - see rfstr for details

Hard

26

System error

System

25

IP / MX / banner filtered

Discarded

24

Changing parameter sets following an SMTP match pattern

Flow

22

Hard Bounce - see rfstr for details

Soft

6.2. Tracking logs

GET api/logs/<YYMMDD>/rftrack?fmt=<csv/htm/xml/json_output_file_format> HTTP/1.1
Authorization: Bearer <apikey>

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/<content type>
Content-Lenght: <json data size>

 

{
  "rftrack" : [ {
    "rfhitdate"   : <HTTP hit date {YYMMDDHHMMSS}>,
    "ref"         : <job reference>,
    "email"       : <recipient email address>,
    "rfevt"       : <event code (see below)>,
    "rfstr"       : <event description>,
    "rfprm"       : <event parameters>,
    "rfsrc"       : <event source (0=body txt,1=htm,2=amp,3=miroir)>,
    "rfmailno"    : <job system reference>,
    "rfrecno"     : <recipient number in the list>,
    "rfipno"      : <internal sending IP number>,
    "rfipstr"     : <sending IP address>,
    "rfsdno"      : <sender internal number>,
    "rfsdstr"     : <sender domain>,
    "rfdmno"      : <domain group internal number>,
    "rfdmstr"     : <domain group name>,
    "rfmxno"      : <MX internal number>,
    "rfmxstr"     : <MX IP address>,
    "rfserverip"  : <HTTP hit reception IP address (or HTTPS)>,
    "rfipport"    : <IP port for receiving the HTTP hit (or HTTPS)>,
    "rfclientip"  : <HTTP client IP address>,
    "rfhttphost"  : <HTTP header ‘Host:’>,
    "rfssno"      : <transaction number in the HTTP session>,
    "rfduration"  : <communication time (ms)>,
    "rfdevice"    : <client device>,
    "rfbrowser"   : <client browser>,
    "rfurl"       : <URL of the HTTP request>,
    "rfreferer"   : <HTTP header ‘Referer:’>,
    "rfuseragent" : <HTTP header ‘User-Agent:’>,
    "rftrcref"    : <trace reference>,
    "rftrcoff"    : <trace offset>,
    "rftrclen"    : <trace size>
    },… ]
}

rfevt

Description

Intitulé

61

Opening the message

Open

62

Mirror page consultation

Mirror

63

Hit URL List-Unsuscribe

Unlst

64

Hit unsubscribe link

Unsub

65

Hit unsubscribe confirmation link

Uncfm

66

Hit invisible link

Bot

101-399

Hit tracking link

Click

6.3. Incoming messages logs

GET api/logs<YYMMDD>/rfrelay?fmt=<csv/htm/xml/json_output_file_format> HTTP/1.1
Authorization: Bearer <apikey>

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/<content type>
Content-Lenght: <json data size>

 

{
  "rfrelay" : [ {
    "rfrelaydate" : <reception date of the message {YYMMDDHHMMSS}>,
    "ref"         : <job reference>,
    "email"       : <recipient email address>,
    "rfevt"       : <event code (see below)>,
    "rfstr"       : <event description>,
    "rfprm"       : <event parameters>,
    "rfmailno"    : <job system reference>,
    "rfrecno"     : <recipient number in the list>,
    "rfipno"      : <internal sending IP number>,
    "rfipstr"     : <sending IP address>,
    "rfsdno"      : <sender internal number>,
    "rfsdstr"     : <sender domain>,
    "rfdmno"      : <domain group internal number>,
    "rfdmstr"     : <domain group name>,
    "rfmxno"      : <MX internal number>,
    "rfmxstr"     : <MX IP address>,
    "rfserverip"  : <SMTP server IP for incoming SMTP session>,
    "rfportip"    : <IP port for incoming SMTP session>,
    "rfclientip"  : <SMTP client IP address IP>,
    "rfssno"      : <transaction number in the SMTP session>,
    "rfssl"       : <SSL/TLS negociated version>,
    "rfduration"  : <communication time (ms)>,
    "rfsize"      : <received message size in bytes>,
    "rfehlo"      : <SMTP client ehlo>,
    "rfmailfrom"  : <envelopefrom address>,
    "rfrcptto"    : <recipient email address>,
    "rfrcptno"    : <recepient number>,
    "rfrcptnb"    : <total number of recipients>,
    "rfpath"      : <path to received message (relative to \REPLY)>,
    "rftrcref"    : <trace reference>,
    "rftrcoff"    : <trace offset>,
    "rftrclen"    : <trace size>
    },… ]
}

rfevt

Description

Intitulé

41

Return message on List-Unsubscribe address

Unlst

42

Feedback message from FeedBackLoop

FBL

43

Challenge response message

Challenge

44

Hard bounce return message

Hard

45

Soft bounce return message

Soft

46

Complaint return message

Complain

47

Return message on mailfrom verp

Verp

48

Response message to fromaddr

Reply

49

Return message to the address dmarc@sender

DMARC

6.4. Aggregates

GET api/logs/<YYMMDD>/rfagg?fmt=<csv/htm/xml/json_output_file_format> HTTP/1.1
Authorization: Bearer <apikey>

-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/<content type>
Content-Lenght: <json data size>

 

{
  "rfagg" : [ {
    "rfdate"      : <hour number (0 = 0h00-0h59)>,

    "rfipno"      : <sending IP internal number>,

    "rfipstr"     : <sending IP address>,

    "rfsdno"      : <sender internal number>,

    "rfsdstr"     : <sender domain>,

    "rfdmno"      : <domain group internal number>,

    "rfdmstr"     : <domain group name>,

    "rfmxno"      : <MX internal number>,

    "rfmxstr"     : <MX IP address>,

    "rfmxdm"      : <internal number of the domain group attached to the MX>,

    "rfmxds"      : <domain group name attached to the MX>,

    "rflistsize"  : <number of recipients per domain group

                     (precomputed at submitted according to known alias)>,

    "rfdelivered" : <number of delivered emails>,

    "rfsoft"      : <number of soft bounces>,

    "rfhard"      : <number of hard bounces>,

    "rfflow"      : <number of flow changes during sending>,

    "rfptrn"      : <number of unrecognized SMTP patterns>,

    "rfopen"      : <number of openings>,

    "rfopener"    : <number of openers>,

    "rfclick"     : <number of clicks>,

    "rfclicker"   : <number of clickers>,

    "rfmirror"    : <number of clicks on miror page link>,

    "rfunsub"     : <number of clicks on unsubscribe link>,

    "rfuncfm"     : <number of clicks on unsubscribe confirmation link>,

    "rfunlst"     : <number of unsubscribtions via header List-Unsubscribe>,

    "rfbot"       : <number of clicks on invisble link>,

    "rffbl"       : <number of FeedBackLoop received>,

    "rfreply"     : <number of replies by email>

    },… ]
}

7. INCOMING MESSAGES

 

Rafale manages the return messages received following sending, which can be of several types: FeedBackLoop, List-Unsubscribe by email, DMARC reports, Hard and Soft Bounces, Challenge-Response, and responses - automatic or not.


For each sender used, whether it is the ReverseDNS of the IPs, or domain names specified in the job parameters (eg: [smtp] domain), the system creates a sub-directory of the sender in \ REPLY \, as well as a sorting sub-tree, in which the messages received according to their type are stored in the form of time-stamped files:

 

  • @CHALLENGE contains the messages identified as Challenge-Response by pattern detection

  • @DMARC contains messages received on the email address of the DMARC record

  • @FBL contains FeedBackLoop messages received on a notification email address declared during registration

  • @HARD contains messages identified as Hard Bounce by pattern detection

  • @SOFT contains the messages identified as Soft Bounce by pattern detection

  • @UNLST contains automatic unsubscribe messages by email (Tag List-Unsubscribe)

  • @VERP contains the messages received on the SMTP session address (MAIL FROM) when the [smtp] envelopefrom option is set to 'verp' (see 2.2.1), and whose content could not be qualified

  • 'abuse' and 'postmaster' are static addresses associated with the sender (abuse @ sender and postmaster @ sender), created automatically by the system because they are often necessary for subscribing to FeedBackLoop programs.

 

When injecting a job, the system automatically creates a static address directory corresponding to the sender address defined in [header] fromaddr (cf 2.6).

It is possible to manually create a @CATCHALL directory that will accept all messages from the sender domain to non-existent addresses (it will probably be spam).

The content of the files is the raw data stream as received during the DATA phase session of the SMTP session (RFC822 message).

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

© 2021 SELF Development