Deciphering the Contact List Puzzle

Sitecore Experience’s List Management tool provides a lot of options to create complex lists of contacts for emails, personalization, and automated engagement plans. Before you start creating hundreds of lists from old spreadsheets, let’s review the basics of how Sitecore List Management works and the puzzle pieces at your disposal to build-out a maintainable list strategy.

The Basic Pieces

Segmented Lists are rules based and dynamic in nature. Therefore, no contact actually belongs to a segmented list until the list is evaluated. Because of this dynamic nature, it is not possible for a user to opt-in or opt-out of a segmented list; they would need to change the contact information that the rule is being evaluated on.

Contact Lists, on the other hand, are static in nature; a contact belongs or does not belong. The static nature means that it is possible for controls to be provided that allow a user to be added or removed via admins (i.e. the list manager) or some form of a subscription control placed on the site.

What does this mean for building lists for emails? It requires a little more planning with some long term payoffs in easily targeting users for emails, personalization, and engagement plans.

When and Why Segmented Lists

Segmented lists are useful when there is a subset of all contact records that should be targeted. You could manually find and add these contact records to a contact list, but that can be time consuming and tedious if there are thousands of contacts to review. This is where Segmented Lists come in handy. During the creation of a segmented list, you define a filter based on the Sitecore Rules Engine with one or more conditions. When the Segmented List is evaluated, such as during an email send or export, all contacts are filtered through the set rules leaving you with only those contacts you wish to engage.

Deciphering the Contact List Puzzle - Image One

The dynamic nature of Segmented Lists allows users to naturally be dropped or added based on their engagement with the organization. Thus, they will receive more accurate and beneficial information from you, creating long-term engagement with the organization.

Finally, Segmented Lists can be exported to a CSV file and a snapshot of the current evaluation of the filter (moment in time) can be converted into a Contact List. The conversion into a Contact List can be used as a starting point for a larger mailing list or even a one-off targeted communication where you may need to know the email recipients at a later time.

When and Why Contact Lists

As I have mentioned, a Contact List is static in nature. Contact records must be explicitly added or removed from this type of list. One can think of a Contact List more as a traditional mailing list that can still be managed in a spreadsheet.

Because of the explicit nature of a Contact List, they can be revealed to site visitors for personal opt-in or opt-out via a subscription control or through the save actions of a Web Forms for Marketers form. (Note that, when using the WFFM to add to a contact list, you must also include the create user or other mechanism to create a contact record or it will throw an error.)

Contact Lists are useful for allowing visitors to self-identify interests by subscribing or unsubscribing to them, as well as for tracking targeted communications.

One Last Piece

The final puzzle piece, before it can all be put together, is that both Segmented and Contact Lists can be assigned ‘include lists’ and ‘exclude lists’. Both must be a Contact List in nature. Exclude Lists are used to indicate that anyone that has subscribed (Contact Lists) or is part of the starting collection (Segmented Lists) should not be evaluated any further. This would prevent this contact record from receiving any messages through this list.

Include Lists, on the other hand, are used by Segmented Lists to determine which contact records should be evaluated through the Segmented List rules that have been setup. By default, Segmented Lists start with the ‘entire database’, i.e. all of the contacts. When working with Contact Lists, the ‘include lists’ help to pre-populate existing contacts. This is helpful when first setting up new subscription lists to make sure that the appropriate people are pre-subscribed.

Building the List Puzzle

I think that the easiest way to understand this is to play out a scenario. Let’s say that the Paragon Coffee marketing team has decided to begin hosting monthly coffee tastings at the warehouse. To make this event cost effective in building out customer loyalty, they cannot send this to all 10,000 contacts. Their plan is to target those customers who have bought $100 or more in products in the previous month. The marketing team are also willing to include individuals who subscribed to the more generic sounding events mailing list. To accomplish this, the marketing group takes the following steps:

  1. Create a Segmented List based on all contacts (entire database). Using a custom segmentation rule, it will filter all of the users who made a purchase greater than or equal to $100 in the past 30 days
    1. They called this: “Hundred Dollar Monthly Purchase Segment”
  2. Create a Contact List called “Paragon Coffee Event Opt-out”, as we are required to track who should not receive the messages
  3. Create a second Contact List called “Paragon Coffee Event Mailer”
  4. As part of the creation of the “Paragon Coffee Event Mailer”, add the “Paragon Coffee Event Opt-out” as an Exclude List source. This will help keep the actual recipients list correct, if for some reason an account ends up on both lists
  5. The “Global Opt-Out” is also added as an Exclude List to confirm that all of the users that have indicated that they wish to receive nothing are properly handled
    Deciphering the Contact List Puzzle - Image Two
  6. During the creation of the “Monthly Tasting Event” scheduled email, the following is done:
    1. “Hundred Dollar Monthly Purchase Segment” list is added as an include
    2. “Paragon Coffee Event Mailer” list is added as an include
    3. “Paragon Coffee Event Opt-out” list is added as an exclude

    Deciphering the Contact List Puzzle - Image Three
    Deciphering the Contact List Puzzle - Image Four

In this way, the email will be sent to everyone who purchased $100 or more in the previous month and those who signed up for the events mailing list, but exclude those who are on the Event Opt-Out list.


As always, feel free to tweet me questions or comments @thecodeattic or on Sitecore Slack Community as @gillissm.

[Originally appeared on]



MTA Configuration In Sitecore

Email Experience Manager (EXM), formerly Email Campaign Manager (ECM), is a key toolset in completing the engagement cycle with site visitors. A properly managed email campaign will allow you to further engage your site visitors after they have left visiting the site. By leveraging Sitecore to manage this, you a) cut out requirements to purchase and maintain another toolset, b) can leverage site visit data to better target email messages, and c) all data is collected into a single source for well-rounded reporting.

A Little EXM Background

EXM does not come pre-installed in a Sitecore installation. It must be downloaded and installed after the initial site setup. When looking to install, you need to make sure that you install the correct version for your Sitecore instance. A list of all available versions can be found at One thing to note for the advanced editor looking to explore EXM, is that downloads of the products are only available to those who have been awarded a Sitecore Developer Certificate, so talk with your Sitecore Partner or Sales Rep for more information.

I will point out that, in the past year and a half, Sitecore has gotten much better at matching EXM (and WFFM for that matter) versions to that of the core Experience Manager (CMS). Here is a helpful table to assist you pinpoint which version you want.

Sitecore Experience Manager EXM URL
8.1 rev. 151207 (Update-1) 3.2 rev. 160127 (Update-1)
8.1 rev. 151003 (Initial Release) 3.2 rev. 151020 (Initial Release)
8.0 rev. 151127 (Update-6) 3.1 rev. 151213 (Update-2)
8.0 rev. 150812 (Update-5) 3.1 rev. 150811 (Update-1)
8.0 rev. 150621 (Update-4) 3.1 rev. 150811 (Update-1)
8.0 rev. 150427 (Update-3) 3.1 rev. 150703 (Initial Release)
8.0 rev. 150427 (Update-3) 3.0 rev. 150429 (Update-3)
8.0 rev. 150223 (Update-2) 3.0 rev. 150223 (Update-2)
8.0 rev. 150121 (Update-1) 3.0 rev. 150126 (Update-1)
8.0 rev. 141212 (Initial Release) 3.0 rev. 141217 (Initial Release)

How do Emails Send

EXM provides an interface to create emails, schedule sends, build recipient lists, and track read and bounced message data on your emails. It does NOT perform the actual technical send of the email! EXM must call to an actual email sending service, also called a Mail Transfer Agent or MTA.

A default install of EXM is configured for you to purchase sending capabilities directly from Sitecore via the Sitecore App Center. This may be perfect once everything has been elevated into production, but will not be the best solution for a QA or development environment. If you are a super high volume sender, Sitecore’s offering may not be cost effective for your organization.

Thankfully, as with most things in Sitecore, there is usually another option that involves a little extra configuration work, and in this scenario, that would be the ‘UseLocalMTA’ flag.

Setup for a non-Sitecore MTA Usage

  • To be able to send via other Mail Transfer Agents, your Sitecore license must include a specific flag. This is flag is not always included by default, so reach out to your Sitecore sales representative or Sitecore Partner to for more information.
    • If you have configured Local MTA, but have not updated your license file, you may receive an error message similar to the following:
      “The Sitecore App Center password is not set.”
      MTA Configuration in Sitecore - Image One

    Your license does not allow you to use a specific MTA to send messages. Contact your Administrator or Sitecore representative.
    MTA Configuration in Sitecore - Image Two

  • Configure EXM to talk with your chosen MTA provider. The settings are all contained in App_Config \ Include \ EmailExperience \ Sitecore.EmailExperience.ContentManagement.config, which you can happily edit directly…which would be a big Sitecore NO-NO! Instead, use the following patch file that is to be placed into your ‘z.loadlast’ directory in App_Config \ Include. [“The z.what the hell directory” you ask, take a look at my post How Sitecore Config Files Load.]

    [Download from GIST –]

Using Amazon SES as your Mail Transfer Agent

If you are looking for an excellent production alternative to Sitecore’s services, Amazon SES is most likely on your radar. Getting configured for sending is fairly quick, especially when using a patch config file to load your settings. From a development and QA perspective, if you are able to stay under the messaging limits, Amazon SES is an excellent alternative to a standalone SMTP server.

  1. Create a new Amazon Web Services (AWS) account or login to your existing account
  2. From the list of available services pick SES
    1. MTA Configuration in Sitecore - Image Three
  3. Once in SES, we need to verify one or more email address that messages will be sent from. If you are running as a free test account, the email addresses for recipients of the messages must also be verified. Click “Email Addresses” from the left-side menu 
    1. MTA Configuration in Sitecore - Image Four
  4. Create SMTP Credentials, by clicking on “SMTP Settings” in the left-side menu
  5. Click the large blue button for Create My SMTP Credentials in the center of the page 
    1. MTA Configuration in Sitecore - Image Five
  6. Amazon provides a nice wizard that walks you through getting your SMTP Credentials. Follow these steps and be sure to download/copy the username and password that was generated for you 
    1. MTA Configuration in Sitecore - Image Six
  7. Updated the patch config based on the following notes:
    Setting Value
    UseLocalMTA True
    Sleep 500 (if you are running under the test account of AWS, there is a need to delay how quick the relay is)
    SMTP.Server Taken from the Server Name field in step 5
    SMTP.Port 25 (feel free to change to 465 or 587, as supported by Amazon)
    SMTP.UserName Username value from step 6, this is what you should have downloaded. Do NOT use your AWS account name, as it will not authenticate
    SMTP.Password Password value from step 6, this is what you should have downloaded. Do NOT use your AWS account password, as it will not authenticate
    SMTP.AuthMethod LOGIN (this must be in all CAPS)
    SMTP.StartTLS True (as defined in the under SMTP Settings in SES)
  8. Login to Sitecore and send a test email. Make sure the sending address has been verified or you will receive errors

The above gives the basics for email setup using another mail transfer agent. For some of the more complicated setup or to learn more, here are some references to Sitecore’s documentation.

As always, feel free to tweet me questions or comments @thecodeattic or on Sitecore Slack Community as @gillissm

[Originally appeared at]

Guide to Segments in xAnalytics

Quick Refresher: The business has asked the Sitecore team to provide additional reporting views for data already being collected by Experience Analytics. (To understand the full request take a look at the first part of the guide.

This post covers the final steps to using custom views on our data

Step 3: Create New Segment

Segments are used by Sitecore to show the summarization of a value (dimension) in context to a specific business question.

  • Launch the Marketing Control Panel from the Sitecore Launchpad
  • In the content tree, expand Experience Analytics -> Dimensions
  • Expand the grouping folder for your dimension
  • Right-click on the dimension, choose Insert from the context menu, and select Filter
  • In the dialog box, provide a Name for the filter. This will also be the name of the segment when it is shown on charts and tables. (It is possible to change the display name in the item’s properties)
  • Click OK, to close-out the Message Dialog box
    Guide to Segments in xAnalytics - Image One
  • Update the Name field to the text that will be shown on charts and tables. (This is optional, as it will auto-populate with the value entered at creation)
  • Click the Filter drop-down to select the filter that will set the conditions on the type of contact data that will be included
    Guide to Segments in xAnalytics - Image Two
  • Save your changes
  • For the segment to begin collecting data for reporting, it must be deployed. In the ribbon, click the Review tab
  • From the available options, click Deploy
    Guide to Segments in xAnalytics - Image Three

Once a new segment is created, there will be a 30 minute delay before any actions on the website are aggregated into the segment for reporting.

To allow historical data to aggregate into a recently created segment, you will need to rebuild the reporting database via https://your site/sitecore/admin/rebuildreportingdb.aspx. Before running the rebuild, you will want to update the Deploy Date column of the Segments table in your MS SQL reporting database. This will allow all of the data to be aggregated into the segment.

Step 4: Using the New Segment

Creating the segment to slice data can be done by more advanced Content Editors with access to the Marketing Control Panel section of the content tree. Sadly, by default, just because a segment is created, does not make it readily available on any existing tables or charts in xAnalytics.

  • Before adding the new segment to an existing table or chart, we need to open xAnalytics and identify where we would like to see our segment overlaid. For our sample segment, I’ve chosen the ‘Top entry Pages by Visits’ bar chart found on the Behavior -> Pages -> Entry Pages dashboard
    Guide to Segments in xAnalytics - Image Four
  • Launch the Sitecore Desktop from the launch pad
  • Once in the Sitecore Desktop, we need to switch which database we are working with. Sitecore artifacts that support the xAnalytics are kept in the Core database. Click the ‘hamburger menu icon’ in the bottom-right corner of the screen
  • A menu will display listing all databases of the system, click on Core
    Guide to Segments in xAnalytics - Image Five
  • Click the Sitecore Start icon in the bottom-left corner
    Guide to Segments in xAnalytics - Image Six
  • Click Content Editor from the options
  • Expand the content tree to / Sitecore / client / Applications / Experience Analytics / Dashboard / Behavior / Pages / Entry Pages / Page Settings
    • After Dashboard, you will need to drill into the page of the chart you plan to supplement. For my example, this would be the Entry Pages dashboard
    • The ‘Page Settings’ child item is where the Sitecore Artifacts are assigned as the data source for the charts and tables
  • Click the item that defines the table or chart you wish to change. For my example, this would be Top Entry Pages by Visits
  • In the Segments field, drill through the dimensions until you find your custom segment. Move it to the left by either double-clicking it or using the selection arrows
    Guide to Segments in xAnalytics - Image Seven
  • Save item, return to the launch pad and open xAnayltics. You should now see your segment listed as an option on the table or chart
    Guide to Segments in xAnalytics - Image Eight

As always, feel free to tweet me questions or comments @thecodeattic or on Sitecore Slack Community as @gillissm.

This post originally appeared at

Solr and Sitecore Upgrade Cocktail

There is nothing worse than getting half-way to three quarters of the way through a Sitecore upgrade, just to be hit in the face with a strange error related to Solr. In the recent months, my team and I have seen an increase interest in Sitecore upgrades involving Solr implementations. In my latest post Sitecore Upgrades Mixed with Solr, I review some of the hurdles we’ve faced to help you on your path.

Debunking Sitecore Configuration Files

One-hundred and forty and counting configuration files, so much power to customize, extend and tweak Sitecore. This is the daily struggle for a Sitecore developer or admin to guess what or where something should happen,  in my latest post I debunk how all these files work together.

Watch Your Upgrade Steps

Anyone that has done a Sitecore upgrade knows that a bottle of aspirin and a six-pack are some of the unwritten steps involved. To help you enjoy that six-pack a little more than the aspirin be sure to read my latest writing a Watching Your Upgrade Steps, which includes some helpful tips that only experience, late nights, and headaches can produce.

Making Forms Event Smarter

Web forms are a powerful mechanism to engaging site visitors. In part 3 and  part 4, I take you even deeper into what is needed to make Sitecore Web Forms for Marketers even smarter. I’ll show you what’s needed to go from simple form into a smart progressive form, that auto-completes.