The EXM pipelines

Current version: 10.3

The Email Experience Manager uses two main pipelines to generate and send messages:

The pipelines are defined in the EXM configuration files. You can extend and customize the pipelines by adding custom processors or replacing the default ones.

Understanding how the EXM pipelines – and the processors that they include – work gives you an insight into the whole message generation and sending process. Different message types may require the utilization of different processors.

DispatchNewsletter pipeline

The DispatchNewsletter pipeline is defined in the Sitecore.EmailExperience.ContentManagementPrimary.config file. This pipeline includes the following processors:

Processor name



Checks whether all the conditions required to start sending the email campaign are met.


Moves the email campaign to the Queuing state.


Changes the workflow state of the analytics definitions that are related to the email campaign (campaign, subject MV test) to Deployed.


Publishes the message item and the message campaign item.


The master server queues recipients to the DispatchQueue table in the EXM master database, using segmented List Manager contact sources to filter out contacts where:

  • communication consent has been revoked

  • do not market has been set

  • the bounce count has exceeded the maximum allowed


Changes the state of the email campaign to Sending.


The master server launches the DispatchNewsletter pipeline on the dedicated servers. This is a simplified version of the pipeline and does not include processors that are only appropriate for the master server. The master server and the dedicated servers share the same databases.


The master server is used to send out quick tests


The master server and the dedicated servers generate and send email campaigns.

The processor gets multiple contacts from the EXM dispatch database. You can specify the number of contacts in the EXM.DispatchBatchSize setting in the Sitecore.EmailExperience.ContentManagement.config file.

Each server then accesses the list of recipients and takes one of the remaining recipients to generate the email campaign for. The process continues as long as there are recipients left in the list.

For every recipient, the processor:

  • Raises the subscriber:assigned event.

  • Requests the page that corresponds to the message.

  • Sets the user as the context user for the requested page. Security restrictions are applied.

  • Adds the “message opened” image.

  • Starts the SendEmail pipeline.


If you have configured at least one dedicated dispatch server and you want to disable dispatch on the master server, you must enable this pipeline processor and disable the SendMessage pipeline processor.

You enable and disable the pipeline processors by commenting them in/out. This processor is by default disabled.


Changes the state of the email campaign to Sent.


Sends the notification when the dispatch process is finished.


Cleans up the internal variables of the round-robin MV test process and closes the remaining connections to the SMTP server.

DispatchNewsletter pipeline for dedicated servers

A simplified version of the DispatchNewsletter pipeline that is tailored for dedicated dispatch servers is defined in the Sitecore.EmailExperience.EmailProcessing.config file. This version of the pipeline only includes the following processors:

  • CheckPreconditions

  • SendMessage

  • FinalizeDispatch

SendEmail Pipeline

The SendMessage processor starts the SendEmail pipeline for every email message to be sent.

The SendEmail pipeline is defined in the Sitecore.EmailExperience.ContentManagement.config file. This pipeline includes the following processors:

Processor name



Generates the message using the personalized recipient data.


Sends the email campaign to the MTA.


Creates a task that adds an interaction with the Email Sent page event.


Controls for how long EXM pauses on the current server after sending each email message. Specified in milliseconds (ms).

In a multiserver setup, you can use this processor to balance the load between the servers. For example, if you want the dedicated server to send 4 times as many email messages as the primary CM server, specify the following values on the sleep setting:

  • 200 on the primary CM server. The server pauses for 200 ms after sending each email message.

  • 50 on the dedicated server. The server pauses for 50 ms after sending each email message.

Then, if you send 1000 email messages, the primary CM server sends approximately 200 email messages (20%) and the dedicated server sends approximately 800 emails (80%).

Do you have some feedback for us?

If you have suggestions for improving this article,