---
title: "The EXM extensibility points"
slug: "the-exm-extensibility-points"
abstract: "You can extend the logic of EXM processing pipelines and message events with your own implementation."
---
# The EXM extensibility points

You can extend the logic of EXM processing pipelines and message events with your own implementation.

The EXM component has the following extensibility points:

- [SubscribeEvent pipeline](https://doc.sitecore.com/xp/en/developers/exm/91/email-experience-manager/the-exm-extensibility-points.html#UUID-cdc303c0-9f86-c974-e0b7-2c3aaaa612c6_N1542829521332 "SubscribeEvent pipeline")
- [*UnsubscribeFromList* pipeline](https://doc.sitecore.com/xp/en/developers/exm/91/email-experience-manager/the-exm-extensibility-points.html#UUID-cdc303c0-9f86-c974-e0b7-2c3aaaa612c6_section-idm45833285809456 "UnsubscribeFromList pipeline")
- [UnsubscribeFromAllEvent pipeline](https://doc.sitecore.com/xp/en/developers/exm/91/email-experience-manager/the-exm-extensibility-points.html#UUID-cdc303c0-9f86-c974-e0b7-2c3aaaa612c6_N1542829556486 "UnsubscribeFromAllEvent pipeline")
- [redirectUrl pipeline](https://doc.sitecore.com/xp/en/developers/exm/91/email-experience-manager/the-exm-extensibility-points.html#UUID-cdc303c0-9f86-c974-e0b7-2c3aaaa612c6_N1542829569634 "reDirectURL pipeline")

<details>
<summary><h2>SubscribeEvent pipeline</h2></summary>

The SubscribeEvent pipeline is activated when a contact subscribes to any recipient list.

Processors should be derived from `SubscribeEventProcessor:`

Namespace: `Sitecore.Modules.EmailCampaign.Core.Pipelines`

Assembly: `Sitecore.EmailCampaign (Sitecore.EmailCampaign.dll)`

</details>

<details>
<summary><h2>UnsubscribeFromList pipeline</h2></summary>

This pipeline is activated for each subscribed list when a contact unsubscribes from a message.

Namespace: Sitecore.EmailCampaign.Cm.Pipelines.UnsubscribeFromList

Assembly: Sitecore.EmailCampaign.Cm (Sitecore.EmailCampaign.Cm.dll)

Configuration file: Sitecore.EmailExperience.ContentManagementPrimary.config

Pipeline argument type: UnsubscribeFromListPipelineArgs

| Processor Name | Description |
| --- | --- |
| GetList | This processor sets the `ContactList `from the provided List ID. |
| CheckDefaultExcludeCollection | This processor verifies if the list is segmented. If it is segmented, the rest of the pipeline is ignored. |
| CheckSegmentedList | This processor verifies whether the list is segmented. If it is segmented, the rest of the pipeline is ignored. |
| CheckSubscription | This processor verifies whether the contact is already subscribed. If the contact is not subscribed to the list, the rest of the pipeline is ignored. |
| UnsubscribeContact | This processor unsubscribes the contact from the list. This processor does not support segmented lists. |
| SendNotification | This processor checks the contact if the `StandardMessages.UnsubscribeNotification` is set and sends an unsubscribe notification. |

> [!note]
> To add support for segmented lists to this pipeline:
>
> 1.  Remove the `CheckSegmentedList` processor.
>
> 2.  Replace the `UnsubscribeContact` processor with your own (adding support for segmented lists).
>
> The following example checks for list type:
>
> `args.ContactList.ContactListDefinition.Type == ListType.SegmenedList`
>
> Set `args.IsSuccesful` to false and abort the pipeline if your unsubscribe process fails. This allows the SubscriptionManager to add the contact to global opt-out list.

</details>

<details>
<summary><h2>UnsubscribeFromAllEvent pipeline</h2></summary>

The UnsubscribeFromAllEvent pipeline is activated when a contact unsubscribes from all of the recipient lists.

Processors should be derived from `UnsubscribeFromAllEventProcessor:`

Namespace: `Sitecore.Modules.EmailCampaign.Core.Pipelines`

Assembly: `Sitecore.EmailCampaign (Sitecore.EmailCampaign.dll)`

</details>

<details>
<summary><h2>reDirectURL pipeline</h2></summary>

During the dispatch process, all the links in the message body are replaced with a link to *RedirectUrlPage.aspx* including additional query string parameters such as contact identifier and message id. The *RedirectUrlPage.aspx* file runs the *reDirectUrl* pipeline that, for example, adds click events based on the query string parameters. After running the pipeline, the *RedirectUrlPage.aspx* file redirects the contacts to the actual link.

</details>