ResourcesKnowledge Base

Delivery capping

Segmentation is without a doubt one of the most important tools for marketers and Mailkit gives you a very powerful tool to achieve your segmentation goals.

Email marketing should be targeted - it's not recommended to blast every campaign to all recipients but to target the recipients that the campaign is most relevant for. This is where Delivery capping comes into play.

Enabling Delivery capping

119podminenedoruceni1EN.PNGDelivery capping for a campaign is set-up in the campaign by clicking on the Delivery capping button.

After clicking you will be presented with a dialog of a Query Builder that will help you create rules of your segmentation. This process is very simple yet allows you to create very complex rules that recipients must match to get the campaign. The query builder is similar to the query builder in recipient filtering.



Delivery capping step 1 - recipient data

Query builder has two steps and both are optional - you don't need to enter rules in each of the steps but you can skip them.

In the first step you can (but don't have to) create rules for segmentation based on recipient data. Start creating the rule by clicking the Add button (to add a single condition) or Add group (to add multiple conditions within a level). The total number of conditions is unlimited as is their nesting.


TIP no. 1: Matching text fields using equal, not equal, begins with, doesn't begin with, contains, doesn't contain operators:
All string matches are CASE INSENSITIVE, eg. doesn't matter whether the text is upper-case, lower-case or mixed-case.
Example: City equals "london" will match all records containing value "london", as well as "London", "LONDON" or "LoNdOn".

TIP no. 2: Matching ignores diacritics (accents):
Example 1: City is equal "Červené Pečky" will match both "Červené Pečky" and "Cervene Pecky".
Example 2: City is equal "Cervene Pecky" will match both "Cervene Pecky" and "Červené Pečky".

While creating your conditions you can use Verify rules button at any time to get information about the number of recipients matching your conditions.


If you click on the Number of matching records those matching will be exported into a CSV file. Once the export is completed a notification will show up in the notifications area in the top right corner of your window where you can do the download the file - 109notifikace.PNG)

The created rules can be saved for later use in any campaign. This can be done using the Save rules and Load rules buttons. You can manage all your stored rules in Profile / Queries.

Delivery capping step 2 - campaign delivery data

On the second step you can (but don't have to) create rules to target recipients based on their interactions with the campaigns. You can for example create a rule to target only recipients who have received, opened but not clicked in another campaign.

Start by clicking on the Add Campaign/Message button and select the campaign or delivery from the list. Only campaigns and deliveries from the past 1 year are available for selection.

Next click on the Add rule button and define whether you are targeting recipients who have received messages from selected campaigns or not. You can also add date restrictions here, eg. received campaign within last 3 months.

After clicking the Add group you can set the specific recipient interactions to target - opens, clicks, conversions, etc..


Applying delivery capping rules

Once you have completed setting up your rules (no matter whether just step 1 or just step 2 or both) you can apply the by clicking the Use Filter button. The fact that delivery capping rules are active is indicated by a green check mark nexto the Delivery capping button in your campaign: 117deliverycapEN.PNG

Using dates

Targeting customers who ordered 7 days ago? Customers who's contracts are about to expire in 2 months? Recipients who have a birthday today? You can do pretty much anything...

When creating rules you can work with dates stored in any of the recipient's custom fields or system dates like date of creation, date of last message sent, date of consent, etc.

When working with dates you can use the following operators: equal, not_equal, greater, greater_or_equal, less, less_or_equal.

Simple match

The matched field value must be entered in the default MySQL format, eg. Y/m/d (2019/07/31).

Example 1: Simple match of field with specific date:

Field Operator Value/expression
change_date equal 2019/08/01

Expression based match

Expressions must be entered in brackets: [DB_field_format;field_function|expression;expression_function]

When using expressiong at least the following must be entered:

  • DB field format, that will be used for matching (for date fields use "date", for custom fields containing dates enter type of format of the values, see supported formats)
  • expression - see supported expressions

Příklad 2: Porovnání pole typu datum s výrazem:

Field Operator Value/expression Note
change_date greater_or_equal [datetime|CURDATE-7] Date of last change (change_date) is greater or equal to current date minus 7 days (7 days before today) and change_date field is of type datetime.

When filtering using text fields the format of the date stored in the field must be entered.

Supported formats:

Format name Field type use Format Example
datetime date of change,
date added,
date last sent,
date of consent
MySQL datetime Saved in a datetime field type formated as 2018/12/31 23:59:59
date_us custom field Y-m-d 2018-12-31
date_us_short custom field y-m-d 18-12-31
date_us_md custom field m-d 12-31
date_eu custom field d.m.Y 31.12.2018
date_eu_short custom field d.m.y 31.12.18
date_eu_dm custom field d.m. 31.12.

Supported expressions:

Expression Use Meaning
CURDATE [date|CURDATE+X] Current date + X days
  [date_us|CURDATE-X] Current date - X days
  [date_eu|CURDATE-X] Current date - X days
  [date_eu_short|CURDATE+X] Current dayte + X days

Example 3: Matching text field using expression:

Field Operator Value/expression Note
custom_2 greater_or_equal [date_eu|CURDATE-7] Costom field 2 (custom_2) is greated or equal current date minus 7 days while being stored in a european format "d.m.Y" (eg. 31.12.2018).

Matching using functions

Functions can be used on top of a field as well as on top of the matched value. That's why the function must be entered separately for both left and right side of an expression.


Supported functions

Function Meaning
DAY Day (1-31)
DAYOFWEEK Day of week
ANNIVERSARY Anniversary - matches day and month ignoring the year
DATE DATE - return a date ignoring the time part of the value

Příklad 4: Using functions:

Field Operator Value/expression Note
s_last_sent not_equal [datetime;DATE|CURDATE] Date of last message sent (s_last_sent) is a datetime field. Using this rule we will exclude all recipients who have received a message today.
custom_1 equal [date_eu;DAYOFWEEK|CURDATE;DAYOFWEEK] Custom field 1 (custom_1) is a text field saved in d.m.Y format. Day of week in custom_1 is matched to current day of week.
custom_2 equal [date_eu;MONTH|12] Custom field 2 (custom_2) is a text field is d.m.Y format. This rule will match all december dates in field custom_2.
custom_3 equal [date_us;ANNIVERSARY|CURDATE;ANNIVERSARY] Custom field 3 (custom_3) is a text field in Y-m-d format containing the birthdate of recipient. This rule will match all recipients who have birthday today.
custom_4 equal [date_eu_dm;ANNIVERSARY|CURDATE+1;ANNIVERSARY] Custom field 4 (custom_4) is a text field in d.m. format containing the birthdate of recipient. This rule will match all recipients who will have birthday tomorrow.
custom_5 equal [date_eu_dm;ANNIVERSARY|2015/12/24;ANNIVERSARY] Custom field 5 (custom_5) is a text field in d.m. format containing the birthdate of recipient. This rule will match all recipeitns that have birthday on december 24th.
custom_6 greater_or_equal [date_us;AGE|18] Custome field 6 (custom_6) is a text field in Y-m-d format containing the birthdate of recipient. This rule will match all recipients 18 years or older.