Getting started
What’s NewRoadmapOcteth Training ProgramInstallation & Setup
RequirementsArchitectureServer SetupOempro InstallationCommunity Edition InstallSSL CertificatesVersion UpgradeTroubleshootingVideo Tutorials
Video TutorialsAdministration
Quick WalkthroughSecuritySub Admin AccountsSettingsDelivery ServersGlobal SegmentsGlobal Custom FieldsBounce ProcessingSpam ComplaintsSuppression ListPlug-InsDelivery ReportUser ManagementMaintenanceAudience Management
IntroductionSubscriber ListsCustom FieldsSegmentsSubscribersWebhooksWebsite Event TrackingEmail Marketing
IntroductionAuto RespondersEmail CampaignsSender Domain Man.Journeys (Automation)Bounce ProcessingEmail PersonalizationFBL ProcessingEmail Builder IntegrationsEmail DeliverabilitySender Domain ManagementPlug-Ins & Add-Ons
AI Plug-InRSS Plug-InBounce Catcher Add-OnLink Proxy Add-OnDevelopers
IntroductionSingle Sign OnAPIPlug-In DevelopmentDatabaseAdvanced
Reverse ProxyCookbookHelp
TroubleshootingContact UsEmail Personalization
Personalized emails stand out within the inbox as highly relevant, tailor-made material. Personalized emails make an email more likely to be opened and clicked on, and most importantly, personalized emails strengthen customer experiences by sending the right content to the right people at the right time.
when creating an email campaign or auto responder email, you can personlize following email parameters:
- Email subject
- HTML email body
- Plain text email body
Email Subject Personalization
When you click on the email subject, a personalization drop down will appear below the subject line:
HTML Email Content Personalization
In order to personalize the HTML content, simply click “Personalize” menu item on the toolbar and click the attribute you would like to insert:
Plain Text Personalization
Once you convert your HTML email content into plain text version with a single click, you can click on the plain text email editor and the personalization drop down list will be displayed below the text editor:
Stripo Drag-n-Drop Email Personalization
When creating your email in Oempro using the Stripo drag-n-drop email builder, click “Merge Tags” to insert subscriber attribures, special merge tags or links into the email:
Special Merge Tags
In addition to subscriber attributes, you can personalize the email content and subject with the following special merge tags:
%Date=...% | Inserts the date and time of the delivery. This date/time will be different for each recipient because it gets rendered just before the delivery for each recipient. For date format, please refer to PHP date format list. Example:
%Date=F jS, Y% → May 2nd, 2022 |
%Random:Letters|Numbers|Alpha:Length% | You can insert randomized letters, numbers, alpha numeric characters into the email content. Example:
%Random:Letters:5% → adjwo
%Random:Numbers:5% → 29489
%Random:Alpha:5% → a92K3 |
%Random:FirstName% | Octeth has 100+ first names defined. One of these first names will be randomly picked and inserted into the email content (or subject). |
%Random:LastName% | Octeth has 100+ last names defined. One of these last names will be randomly picked and inserted into the email content (or subject). |
%MFROMDomain% | This merge tag will be replaced with the MAIL FROM email address domain. |
{{{var1|var2|var3|varn}}} | Content spinning feature is a very helpful feature and it helps you to make the email content unique for each recipient.
Here’s an example;
{{{Hello|Hi|Hey}}} %Subscriber:FirstName%,
During the delivery, Octeth will pick a randomly picked variation from “Hello”, “Hi”, “Hey” variations. |
Special Links
You can also insert some system links into the email content:
%Link:Forward% | This tag is replaced with a link to the forward to friend page. Recipients can enter their friends names and a copy of the email will be delivered to them.
(*) This tag will be deprecated in future version releases! |
%Link:WebBrowser% | This tag is replaced with a link to the web browser version of the received email. |
%Link:ReportAbuse% | This tag is replaced with a link to the report abuse page. Recipients can file a spam complaint on this page. |
%Link:SocialShare:Twitter% | This tag is replaced with a Twitter Share link.
(*) This tag will be deprecated in future version releases! |
%Link:SocialShare:Facebook% | This tag is replaced with a Facebook Like link.
(*) This tag will be deprecated in future version releases! |
%Link:Unsubscribe% | This tag is replaced with an unsubscription link. When a recipient clicks on this link, she gets unsubscribed immediately from the corresponding list. |
%Link:Suppression% | This tag is replaced with an unsubscription link. When a recipient clicks on this link, the recipient email address is added to the global suppression list first and then unsubscribed from the corresponding list. |
%Link:SubscriberArea% | This tag is replaced with a link to the subscriber area where recipient can manage her subscription preferences. |
%RemoteContent=http://% | This merge tag allows the user to add dynamic remote content into the email body or subject from a third party URL. It’s a very useful and powerful feature to fetch remote content from your content pool based on recipient information. Example;
%RemoteContent=http://mywebsite.com/content/%Date=Ymd%.html%
This merge tag will fetch the content from `http://mywebsite.com/content/20220302.html if the email is sent on May 2nd, 2022. |
Conditional Personalization
Starting from Oempro v5.0.0 version, we have introduced a brand new personalization engine and email content tags. We will remain our legacy personalization engine until Oempro v6 version release.
This new personalization engine introduces new syntax. From now on, instead of %...%
syntax, the brand new {{ ... }}
syntax will be used.
Here’s an example:
{{ Subscriber:EmailAddress }}
will be replaced with the email address of the recipient.
In addition to standard personalization, our new personalization engine includes powerful conditional personalization.
Whitespace
Whitespace before or after the delimeters is allowed, however, in certain cases, whitespace within the tag is prohibited (explained in the following sections).
Some valid examples:
{{name }}
{{name }}
{{name}}
{{name }}
{{
name
}}
Some invalid examples:
{{na me }}
{ {name} }
Comments
You can add comments to your templates by wrapping the text in {{# #}}
.
Example
{{#This will not be parsed or shown in the resulting HTML #}}
{{#
They can be multi-line too.
#}}
Prevent Parsing
You can prevent the parser from parsing blocks of code by wrapping it in {{ noparse }}{{ /noparse }}
tags.
Example
{{noparse }}
Hello, {{name }}!
{{/noparse }}
Basic Example:
{{#Parsed: Hello, World! #}}
Hello, {{name }}!
{{#Parsed: <h1>Oempro is Awesome!</h1> #}}
<h1>{{title }}</h1>
{{#Parsed: My real name is Oempro User!</h1> #}}
My real name is {{Subscriber:FirstName }} {{Subscriber:LastName }}
Conditionals
Conditionals in Oempro are simple and easy to use. It allows for the standard if
, elseif
, and else
but it also adds unless
and elseunless
.
The unless
and elseunless
are the EXACT same as using {{ if ! (expression) }}
and {{ elseif ! (expression) }}
respectively. They are added as a nicer, more understandable syntax.
All if
blocks must be closed with the {{ endif }}
tag.
Variables inside of if Conditionals, do not, and should not, use the Tag delimeters (it will cause wierd issues with your output).
A Conditional can contain any Comparison Operators (==
, !=
, ===
, !==
, >
, <
, <=
, >=
). You can also use any of the Logical Operators (!
, not
, ||
, &&
, and
, or
).
Examples
{{if Subscriber:FirstName }}
<p>My name is {{Subscriber:FirstName }} {{Subscriber:LastName }}</p>
{{else }}
<p>I don't know what my name is</p>
{{endif }}
{{if Subscriber:CustomField18 == 'customer' }}
<p>You are a Customer!</p>
{{elseif Subscriber:CustomField18 == 'trial' }}
<p>You are a trial User.</p>
{{else }}
<p>I don't know what you are.</p>
{{endif }}
{{unless age > 21 }}
<p>You are too young.</p>
{{elseunless age < 80 }}
<p>You are to old...it'll kill ya!</p>
{{else }}
<p>Go ahead and drink!</p>
{{endif }}
The not
Operator
The not
operator is equivilent to using the !
operator. They are completely interchangable (in-fact not
is translated to !
prior to compilation).
Undefined Variables in Conditionals
Undefined variables in conditionals are evaluated to null
. This means you can do things like {{ if foo }}
and not have to worry if the variable is defined or not.
Checking if a Variable Exists
To check if a variable exists in a conditional, you use the exists
keyword.
Examples
{{if exists Subscriber:CustomField100 }}
Foo Exists
{{elseif not exists Subscriber:CustomField100 }}
Foo Does Not Exist
{{endif }}
You can also combine it with other conditions:
{{if exists Subscriber:CustomField100 and Subscriber:CustomField100 !== 'test' }}
Something here
{{endif }}
The expression exists foo
evaluates to either true
or false
. Therefore something like this works as well:
{{if exists Subscriber:CustomField100 == false }}
{{endif }}
JSON Custom Fields
If the subscriber custom field value is a JSON data, the personalization engine can detect this and you can personalize your email content with any values inside the custom field.
For example, if the custom field value is:
{"key1":"val1","key2":"val2","key3":"val3"}
You can personalize your email content with any of these values:
{{Subscriber:CustomFieldXXX:key2 }}
Helper Personalization Functions
You can modify email content and recipient info with the following helper functions.
- fn_strtolower()
- fn_fallback()
- fn_strtoupper()
- fn_ucwords()
- fn_ucfirst()
- fn_trim()
- fn_dateformat()
- fn_time()
- fn_htmlentities()
- fn_htmlspecialchars()
- fn_lcfirst()
- fn_md5()
- fn_sha1()
- fn_number_format()
- fn_wordwrap()
- fn_nl2br()
Make a string lowercase.
{{ fn_strtolower value="TEST CONTENT" }}
Make a string lowercase.
Hey {{ fn_fallback value="{{ Subscriber:CustomField1 }}" else="there!" }}
Make a string uppercase.
{{ fn_strtoupper value="test content" }}
Uppercase the first character of each word in a string.
{{ fn_ucwords value="test content" }}
Make a string's first character uppercase.
{{ fn_ucfirst value="test content" }}
Strip whitespace character from the beginning and end of a string
{{ fn_trim value="test content " }}
Format a Unix timestamp or YYYY-MM-DD date. Check this page for date format syntax.
{{ fn_dateformat value="1664651010" format="jS M, Y" }}
{{ fn_dateformat value="2022-10-03" format="jS M, Y" }}
Return current Unix timestamp.
{{ fn_time }}
Convert all applicable characters to HTML entities.
{{ fn_htmlentities value="test content &" }}
Convert special characters to HTML entities.
{{ fn_htmlspecialchars value="test content &" }}
Make a string's first character lowercase.
{{ fn_lcfirst value="tESt cOnTEnT" }}
Calculate the md5 hash of a string.
{{ fn_md5 value="text to encrypt" }}
Calculate the sha1 hash of a string.
{{ fn_sha1 value="text to encrypt" }}
Format a number with grouped thousands.
{{ fn_number_format value="193002" decimals="2" ds="." ts="," }}
ds
represents decimal separator, ts
represents thousands separator.Wraps a string to a given number of characters.
{{ fn_wordwrap value="this is a very long email content which should be wrapped into a smaller one" }}
Inserts HTML line breaks before all newlines in a string.
{{ fn_nl2br value="line #1
line #2
line #3
line #4" }}
You can set the value of these helper functions to another personalization tag as shown in the example below:
{{ fn_strtoupper value="{{ Subscriber:EmailAddress }}" }}
On this page
- Email Personalization
- Email Subject Personalization
- HTML Email Content Personalization
- Plain Text Personalization
- Stripo Drag-n-Drop Email Personalization
- Special Merge Tags
- Special Links
- Conditional Personalization
- Whitespace
- Comments
- Prevent Parsing
- Conditionals
- The not Operator
- Undefined Variables in Conditionals
- Checking if a Variable Exists
- JSON Custom Fields
- Helper Personalization Functions