Add images to messages

How do I add an image to my message?

Adding images to your messages adds visual impact and may result to a higher engagement rate, since people in general respond more to images as compared to messages that are in pure text.

This is how to do it:

You can add an image to your message by using the <img> tag. For example:

<img src=''>

The image is not technically inserted or embedded (as an in-line attachment) to your message. The <img> tag just creates a holding space for the referenced image.

To “source” an image, upload the image on your server (or any platform that stores images) and use the direct link/URL of the image as your image source (src).

Helpful resources:

Organize my contacts

How do I organize my contacts for a more efficient and targeted sending?

There are a number of uses to organizing or grouping your contacts, such as:

Sending them a more targeted broadcast (one-off) messages
Adding/moving them to new autoresponders
Cancelling their subscription to a specific autoresponder

… and so on.

Here is a sample scenario:

You want to group your contacts so you could easily send them more targeted broadcast (one-off) messages in the future regardless of their existing autoresponder subscriptions.

This is how to do it:

First, you need to have a clear structure in mind. For instance, let’s say you want to organize your contacts like this:

Wool Industry
          Company 1
          Company 2
          Company 3
          Company 6
          Company 1
          Company 2
          Company 3
          Company 6
          Company 1
          Company 2
          Company 3
          Company 4

Mohair Industry
          Company 2
          Company 4
          Company 5
          Company 6
          Company 2
          Company 4
          Company 5
          Company 6
          Company 2
          Company 4
          Company 5
          Company 6

… with all Company Xs (1s, 2s, 3s, etc.) being the same company that has its own brokers, buyers, and processors.

Once you have the structure figured out, simply use the ‘Categories’ and/or ‘Tags’ features together with the ‘Segments’ feature, as laid out below.

1. Create the following categories (see How to create contact categories)

2. Create the following tags (see How to create contact tags)

Note: Instead of creating tags for each company, you can also opt to utilize the Company standard field or add them as contact categories. We’ll be using tags in this example.

3. Create and set up your segments (see How to create segments)

Let’s say you want to have a group that consists of only those that fall under:

Wool Industry > Buyers > Company 2

The segment should have ALL of the following criteria:

Criteria 1 – Wool Industry
— Match type: Category
— Condition: Is a member
… any of these: Wool Industry
— All contacts must match: Checked

Criteria 2 – Buyers
— Match type: Category
— Condition: Is a member
… any of these: Buyers
— All contacts must match: Checked

Criteria 3 – Company 2
— Match type: Tag
— Condition: Has tag
… any of these: Company 2
— All contacts must match: Checked

You could also create another segment to filter only those that belong to:

Wool Industry > Processors

Criteria 1 – Wool Industry
— Match type: Category
— Condition: Is a member
— … any of these: Wool Industry
— All contacts must match: Checked

Criteria 2 – Processors
— Match type: Category
— Condition: Is a member
— … any of these: Processors
— All contacts must match: Checked

And if you want to filter all the:


… regardless of the company or industry, then just use the existing ‘In Category’ predefined filter on the Contacts list screen:

Or use the ‘Has Tag’ predefined filter:

… if you want to filter and see those that are under:

Company 6

… regardless of what they do.

Tip! Don’t be afraid to play around with the different segmentation features. Just remember, when creating segments, be mindful of the ‘any of these…’ statement. If it should be industry-specific, for example, then one criteria should only be for that one industry category. Also, the ‘All contacts must match’ option is more often checked than not. It could be a little confusing, but adding test contacts and categories/tags and playing around with the segments feature will allow you to get the hang of it.

4. Create and schedule your broadcast (see How to schedule a broadcast)

Finally, when scheduling a broadcast message, simply choose either of the following ‘Recipients’ options:

Contact category members
In segment
Has tag

… and finish scheduling the broadcast accordingly.

Warm up my IP address

How do I warm up my email server IP address?

IP address warming is a gradual process that happens over a period of time. The aim of warming up an IP address is to establish trust and good reputation with the ISPs (Internet service providers) as a sender of legitimate, high quality emails at volume.

Warming up your IP address is the time to take a careful look at every aspect of your email marketing process, including your aims and goals. You should be able to make tweaks that will improve your overall long-term results, not just during the warm up.

Please note though that a structured “introduction” of your email server to the world while ramping up your sending volume does not guarantee trouble free sending of emails forever. You will need to play by “the rules” and utilize good list-hygiene practices.

Why do I need to warm up my IP address?

In short, too many emails that get sent are spam (unwanted emails) and the ISPs want to protect their users from receiving unwanted emails.

As a result, ISPs treat any new IP address that sends emails with skepticism. The ISPs only reduce that skepticism once the sender has proved their reputation.

What do ISPs expect from email senders?

The ISPs build up a ‘sender score’ for IP addresses and domain names based on metrics that differentiate legitimate emails from spam. These include:

Send volume
Spam complaints
Messages sent to unknown users
Subscriber engagement
Spam trap hits

… and more.

To start with, an IP address has a neutral sender score. Every time someone hits the spam button, or you get a hard bounce, or your email is sent to an unknown user, your credit rating goes down.

How do I get a good email sender reputation?

• Follow best practices
• Make sure your DKIM, SPF, Sender-ID, and Domain Keys are set up properly:

• Comply with the CAN-SPAM Act and other international anti-spam laws
• Only send to people who have opted in to receive emails and confirmed their request
• Do not buy lists from email brokers
• Avoid including large attachments and certain attachment types (.exe, .zip, .swf, etc. should be avoided)

So, how do I warm up my email server IP address? This is how to do it: 

The goal is to build up approximately 30 days of sending history so that ISPs have an understanding of the type and quality of emails being sent by your new IP address. The warm up ramp-up period may take longer than 30 days for some senders and can be less for others.

The basic approach is to estimate your total monthly email volume and divide that number by 30. Then try to spread your sending evenly over the first 30 days.

For example, if you will send 90,000 emails per month, you should start off sending 3,000 per day over the first month. Or, if you typically send about 300,000 emails per month, warm up your IP address by sending 10,000 emails per day for the first month.

For larger numbers (i.e., sending 500,000+ emails per month), you will need to extend the warm-up period to possibly over 2 months. You can also consider incremental increases to your daily send volume (e.g., 3,000 for 4 days > 4,000 for 4 days > 5,000 for 4 days > 7,500 for 4 days > 10,000 for 4 days, and so on).

There are no hard and fast rules but here are some guidelines:

• Send first to your best, most active customers
• Send consistently (having a consistent email volume from one day to another is much better than having a large volume sent on one day of the week and no email sent on the remaining days)
• Start with a hundred or so messages an hour
• Increase the hourly rate gradually
• Monitor your logs
• If the ISPs start sending back 4xx failures, you are going too fast, so slow down

Other hints and tips

• Split large, non-time-sensitive sends over a number of days
• Split campaigns between your new IP address and your legacy email system
• Create non-time-sensitive campaigns (e.g., subscriber surveys) to use specifically for the purpose of ramping up new IP addresses

Reputation Monitoring Sites:

Sender Score –
Sender Base –
Cyren IP Reputation Check –
Barracuda Central –
Spamhaus –
Microsoft SNDS –

Avail of the free installation

How do I avail of the free installation that came with my arpReach license?

While arpReach can be installed by anyone, you still need to have a basic understanding of how to modify and upload files on your server, as well as an understanding of how to make changes and adjustments to your website hosting using either a hosting control panel or command line interface.

Most (not all) arpReach license package offers usually come with one (1) free installation. If you are not comfortable enough to do the installation on your own, you may avail of the free installation service once your purchase has been confirmed.

This is how to do it:

To check your eligibility and/or avail of the one (1) free installation service that came with your new arpReach license, send an email to:

… with all of the following information:

  1. Your domain name
  2. Your arpReach license number and password (from your order confirmation email)
  3. The name of your web hosting company
  4. Your hosting cPanel login page and credentials
  5. Your hosting account FTP login page and credentials

When they have all of these information, they can schedule your installation and will email you if they need any more details and/or when your installation is complete.

Installations are normally completed within one business day, excluding weekends and UK holidays.

If you are no longer eligible for a free install, our partner offers professional installation services:

Subscription Form Codes

When a subscription form is processed, the success or failure of the form’s submission is posted as a code and a message in the URL of the success/failure page. Example:

If you are using your own custom success/failure pages and you do not want the code or message to be appended to its URL, you can disable this functionality in Setup / System Settings / Custom Pages and checking the Disable error code and message box.

The code is supplied in the “code” parameter of the custom page URL and can be read by your script.

For example, in PHP, use:


… to read the code value. These codes apply only to submissions of subscribe/ unsubscribe forms, not other means of subscribing.

Success Codes

01 = Successful subscription.
02 = Successful subscription - confirmation email sent.
03 = Successful subscription - first email sent.
04 = Successful unsubscription.

Error Codes

00 = There was an unknown error.
01 = Your browser has not sent its user agent type.
02 = The form parameters are not correct.
03 = The form parameters are not correct.
04 = This list no longer exists.
05 = This list does not allow subscriptions by form.
06 = This list is currently disabled.
07 = This list is not currently accepting new subscriptions.
08 = There was a form validation error.
09 = The security code cannot be blank.
10 = The security code is not correct.
11 = The email address cannot be blank.
12 = The email address is not valid.
13 = The email address is not permitted to subscribe.
14 = The email address is not permitted to subscribe.
15 = The title cannot be blank.
16 = The first name cannot be blank.
17 = The middle name cannot be blank.
18 = The last name cannot be blank.
19 = The full name cannot be blank.
20 = The company cannot be blank.
21 = The department cannot be blank.
22 = Address #1 cannot be blank.
23 = Address #2 cannot be blank.
24 = Address #3 cannot be blank.
25 = The town or city cannot be blank.
26 = The state or province cannot be blank.
27 = The postal or ZIP code cannot be blank.
28 = The country cannot be blank.
29 = The alternative email address
30 = The alternative email address
31 = The alternative email address
32 = The phone number #1 cannot
33 = The phone number #2 cannot
34 = The phone number #3 cannot
35 = The mobile phone number #1 cannot be blank.
36 = The mobile phone number #2 cannot be blank.
37 = The mobile phone number #3 cannot be blank.
38 = The fax number #1 cannot be blank.
39 = The fax number #2 cannot be blank.
40 = The fax number #3 cannot be blank.
41 = The referer id cannot be blank.
42 = Your subscription request could not be completed.
43 = Duplicate subscriptions are not allowed.
44 = Your subscription request could not be completed.

Posting HTTP Data

If you are a software developer and you wish your software to post subscriptions and unsubscriptions to arpReach, this section explains how to do it.

  • Create a subscription form in arpReach
  • Post data to it using an HTTP request from your software

Create and save a form in the Subscription Forms section of the autoresponder. Then generate the form html code there, too. From this you can see the fields you need to map to. Note the “POST” URL is different for every form because most of the form’s parameters are held in the database instead of “hidden” form fields.

Here’s an example with the form code and associated PHP code. Note the “action” field of the form tag, which is unique for every form stored in arpReach. Also, note that the USER_AGENT is mandatory in the curl post or it will be ignored. It doesn’t matter what you set it to. This is really just a defense against spambots that often don’t bother to have a user agent.

Example Form Code

<!-- subscription_form_lwzysh --> 
<div id=’subscription_form_lwzysh’>
<form method=’post’ action=’’>
<label>Email address</label>
<input type=’text’ id=’email_address’ name=’email_address’ value=’’>
<label>First name</label>
<input type=’text’ id=’first_name’ name=’first_name’ value=’’> 
<input type=’submit’ value=’Submit’>
<!-- subscription_form_lwzysh -->

Example PHP Code – Subscribe

define(URL, ‘‘);
if (! empty($_POST) && count($_POST) > 0) { 

$post_fields = array(

‘email_address’ => ‘’, 
‘first_name’ => ‘first_name_here’,
‘last_name’ => ‘last_name_here’);

$ch = curl_init();

curl_setopt($ch, CURLOPT_USERAGENT, ‘ARPR’); 
curl_setopt($ch, CURLOPT_URL, URL);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 


} // if

#V2-exclusive: Custom Dynamic Tags

arpReach has a limited number of dynamic tags.

The custom dynamic tag feature in #V2 allows you to create your own dynamic tags to use in messages. For example, the Date Tags with a plus (+) or minus (-) modifiers work due to the custom dynamic tags capability.

A #V2 installation has the file user_dynamic_tags.php in its /user_functions folder. You can add your own dynamic tags functions there.

The function names should begin with the prefix “dynamic_” to allow the system to detect them.

When #V2 processes a message and detects an unknown tag, it checks if a function with the name “dynamic_<tag>” exists. If yes, it runs this function with the $contact-object and the default tag-value and uses the result as the Tag value.

Important note: Your code must be designed to handle $contact being NULL and $default being an empty string.

Predefined Custom Dynamic Tags

{URLENCODE <value>} - encodes the value to use it in links. For example:

<a href="{URLENCODE {FULL_NAME}}&amp;company={URLENCODE {COMPANY}}">hello</a> function dynamic_URLENCODE( $contact = NULL, $default = '' ) { return rawurlencode($default); }
{HTML_TO_TEXT} - converts an HTML-marked content into TEXT (plain text). You can use this for variables with HTML content to place them in plain-text part of your messages. For example:

{HTML_TO_TEXT {VARIABLE_MY_HTML_CONTENT}} function dynamic_HTML_TO_TEXT( $contact = NULL, $default = '' ) { return convert_html_to_text($default); }
{GRAVATAR_HASH} - allows you personalize messages with an avatar of your contact by using this image HTML code in your HTML messages:

<img src="{GRAVATAR_HASH}.jpg" /> By default, images are presented at 80px by 80px if no size parameter is supplied. You may request a specific image size, which will be dynamically delivered from Gravatar by using the s= or size= parameter and passing a single pixel dimension (since the images are square): <img src="{GRAVATAR_HASH}.jpg?size=200" /> You may request images anywhere from 1px up to 2048px. Read more at: function dynamic_GRAVATAR_HASH( $contact = NULL, $default = '' ) { return md5(strtolower(empty($contact->email_address)? '': $contact->email_address)); }
{FULLNAME} - may compose full name from other parts of a name. Note that the {FULL_NAME} tag (with an underscore) is a different tag.

function dynamic_FULLNAME( $contact = NULL, $default = '' ) { if ( empty($contact) ) return $default; if ( empty($contact->full_name) ) { $contact->full_name = trim( implode(' ', array_filter(array( $contact->first_name, $contact->middle_name, $contact->last_name )))); } return empty($contact->full_name)? $default: $contact->full_name; }
{DATE_X <offset parameter>} - for date offsetting.

Offset by days {DATE_1 +1} {DATE_1 -3} {DATE_1 +1 day} {DATE_1 -3 days} Offset by weeks {DATE_1 +1 week} {DATE_1 -3 weeks} Offset in mixed format {DATE_1 +1 year 2 months 1 week 5 days} function dynamic_DATE_1( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_1', $default); } function dynamic_SHORTDATE($contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_1', $default); } function dynamic_DATE_2( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_2', $default); } function dynamic_LONGDATE( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_2', $default); } function dynamic_DATE_3( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_3', $default); } function dynamic_USDATE( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_3', $default); } function dynamic_DATE_4( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_4', $default); } function dynamic_USLONGDATE( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_4', $default); } function dynamic_DATE_5( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_5', $default); } function dynamic_USLONGDATENOYEAR( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_5', $default); } function dynamic_DATE_6( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_6', $default); } function dynamic_EUROPEANDATE( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_6', $default); } function dynamic_DATE_7( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_7', $default); } function dynamic_WEEKDAY( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_7', $default); } function dynamic_DATE_8( $contact = NULL, $default = '' ) { return _dynamic_FORMATED_DATE('date_format_8', $default); } function _dynamic_FORMATED_DATE($date_format = '', $default = '') { $CI =& get_instance(); $default = preg_replace('/^([+-]\s*[\d]+)$/', '$1 days', trim($default)); return app_date_offset( $CI->system_settings->{$date_format}, empty($default)? '': strtotime($default) ); }


Ads are blocks of plain text and HTML that you manage centrally and can insert the latest version into follow-up and broadcast messages with simple tags such as {AD_Shoes_S}. If you change the content of an ad, the new version will automatically be used in your messages without having to edit them.

Managing your ads

To create a new ad, go to Content / Ads / Create New.

To edit an ad, go to Content / Ads / Show List:

… and choose Edit from the Choose action… drop-down menu.

When creating or editing an ad, the settings are the same.

The Settings Tab

  • Name – a unique name for your ad.
  • Tag – a unique tag for this ad that will be used to insert its contents into your messages. For example, your ad tag is Shoes_S. You would use the tag/shortcode {AD_Shoes_S} to insert the ad’s content into a message. Using {AD_Shoes_S Currently Not Available} would display “Currently Not Available” if no content is stored for the ad Shoes_S.
    The tags {AD_Shoes_S} and {AD_TEXT_Shoe_S} will insert the plain text version of the ad into messages, while the tag {AD_HTML_Shoes_S} will insert the HTML version of the ad into messages.
  • Alternative tags (plain text) – alternative tags that will be used to insert the plain text version of this ad into messages. Exclude braces, and the tag should be different from any tag already used by arpReach. Separate multiple tags by commas. For example: TEXT_ShoeAdSmall, TEXT_ShoeAd01.
  • Alternative tags (HTML) – alternative tags that will be used to insert the HTML version of this ad into messages. Exclude braces, and the tag should be different from any tag already used by arpReach. Separate multiple tags by commas. For example: HTML_ShoeAdSmall, HTML_ShoeAd01.
  • Description – a description for this ad. This is never displayed to contacts.

The Content Tab

  • Plain text content – the plain text version of the ad.
  • HTML content – the HTML version of the ad. You can add the content as raw HTML or use the built-in WYSIWYG editor by clicking the Toggle editor link.

Ads can be sorted by name, description, tag, or content using the Order by drop-down menu.

The With selected… menu allows you to delete the selected ads.

Using the I want to… drop-down menu, you can create a new ad or delete all ads.

Under the Actions column, the Choose action… drop-down menu has the options to:

  • Preview
  • Edit
  • Copy
  • Copy then edit
  • Delete


The attachment library is a central repository of files that you can attach to your messages.

By managing the files centrally, you can easily update a file without the need to edit all of the messages that have that file as an attachment.

“Centralized management of attachments means you can change them without having to change your follow-up or broadcast messages”

Managing your attachment library

To add an attachment to your library, go to Content / Attachments / Add an Attachment.

To edit an attachment, go to Content / Attachments / Show List:

… and choose Edit from the Choose action… drop-down menu.

When adding or editing an attachment, the settings are the same.

  • Name – a unique name for the attachment.
  • Description – a description for the attachment. This is never displayed to contacts.
  • File to upload – choose the file to be uploaded from your computer and stored in the attachment library.

Note that the maximum upload file size is dependent to your web host limitations. If you need to upload a file that is larger than what is currently allowed, contact your web host and ask them to increase the limit.

Attachments can be sorted by name and description using the Order by drop-down menu.

The With selected… menu allows you to delete the selected attachments. There is no need to make any changes to the messages that had those attachments.

Using the I want to… drop-down menu, you can add a new attachment or delete all attachments.

Under the Actions column, the Choose action… drop-down menu has the options to:

  • Preview – preview the attachment in a pop-up window. Your browser needs to allow pop-ups for this to work.
  • Edit – edit the attachment settings and its file content.
  • Copy/Copy then edit – add a new attachment by copying the attachment’s settings and file content.
  • Delete – delete the attachment.

Adding an Attachment to a Message

When creating or editing a follow-up, broadcast, and single email message, you can choose the attachment/s to be added to the message by selecting them from the attachments list.

For follow-up messages: Add or edit a message, go to the Message tab, expand the Attachments section, then check off the attachment/s to be added to the follow-up message.

For follow-up message variants, add or edit a variant, expand the Attachments section, then check off the attachment/s to be added to the follow-up message variant.

For broadcast messages: Schedule or edit a broadcast, go to the Message tab, expand the Attachments section, then check off the attachment/s to be added to the broadcast message.

For broadcast message variants, add or edit a variant, expand the Attachments section, then check off the attachment/s to be added to the broadcast message variant.

“Both broadcast and follow-up message variants can have different files attached”

For single emails: Create or edit a single email, go to the Message tab, expand the Attachments section, then check off the attachment/s to be added to the single email.

Broadcast Archives

Broadcast archives allow you to make your broadcast content available online and share it on social networks, via bookmark sites, and by RSS. Each broadcast can belong to as many of your broadcast archives as you wish.

“Archives make your broadcast content available online for sharing by social media and bookmarking sites”

The above image shows a screenshot of a broadcast archive containing two (2) broadcasts. Broadcasts are automatically grouped by month and year.

To manage your broadcast archives, choose Broadcasts / Archives / Show List from the menu bar.

Click the Link or RSS icon to open the archive in a new browser tab or window.

You can then copy the URL from the browser’s URL bar for use on websites, blogs, emails, and social network status updates.

Creating / Editing a Broadcast Archive

To create a broadcast archive, choose Broadcasts / Archives / Create New from the menu bar:

… or choose Create an archive from the I want to… menu on the Broadcast Archives list screen:

When creating or editing a broadcast archive, the options are the same.

“Broadcasts must remain in the broadcast queue to appear in archives”

The Settings Tabs

  • Name – a name for the archive. This is for your use and does not appear on the archive itself.
  • Public name – this is the name of the archive as it will appear on the archive itself. Leave this blank for no name to appear.
  • Description – this is a private description of the archive. It does not appear on the archive itself.
  • Public description – this description appears on the archive. Leave blank for no description to appear.
  • Status – choose the online and offline status of the archive. The archive can be viewed only when the status is online.
  • Theme – choose a theme for the archive as defined in Setup / System Settings / System / Contact Screens.

The Broadcasts Tab

  • Broadcasts in archive – choose the broadcasts that will appear in this archive. Only broadcasts that remain in the broadcast queue will appear in the archive.

The Sharing Tab

  • Enable sharing – check this box to enable social bookmark sharing icons in the archive. You need to sign up with a social bookmarking site such as and grab the HTML code from their site to paste into arpReach. These sites usually allow you to specify which web page their links will lead to. From the HTML code they give you to do that, you need to insert {url} instead of an actual URL so that arpReach can insert the correct link to the broadcast.
    Here is an example code showing the use of {url} in HTML code supplied by the social bookmark site. This code is pasted into the Share/bookmark code box and will make the sharing options available in the archive view.
<!-- AddThis Button BEGIN -->
<div class=”addthis_toolbox addthis_default_ style” addthis:url=”{url}”>
<a class=”addthis_button_facebook_like” fb:like:layout=”button_count”></a>
<a class=”addthis_button_tweet”></a>
<a class=”addthis_button_google_plusone” g:plusone:size=”medium”></a>
<a class=”addthis_counter addthis_pill_style”></ a>
<script type=”text/javascript” src=”http:// js#pubid=ra-4f3d20933f35102a”></script>
<!-- AddThis Button END -->
  • Enable RSS feed – check this box to enable the RSS icon on the archive screen so that visitors can add the archive’s RSS feed to their RSS reader or browser.

“Search the social bookmarking site for ways of promoting a custom URL then insert {url} so arpReach can link to the correct broadcast”