---
title: "Notifications client"
slug: "notifications-client-1523405"
abstract: "Use the Notifications client to send emails, real-time messages, or confirmation links using templates and recipient details."
---
# Notifications client

The SDK provides a `Notifications client` to manage and send notifications.

> [!note]
> The `client` variable in the following code examples refers to the `IMClient` instance. When using the Web SDK, the variable name can be chosen freely, but it is also called `client` at instantiation in the documentation.

## Email templates

Mail template entities contain the templates for sending emails. The variables can be resolved at runtime.

`IMailTemplateEntity` is a subtype of `IEntity`. It provides C# properties and methods for the members on the `M.Mailing.Template` entity definition.

The client provides extra getters for getting these mail templates, that are not available on the entities client. It allows fetching mail templates by name. However, every operation on an `IEntity` still applies to `IMailTemplateEntity`. Saving and deleting `IMailTemplateEntity` objects are still done through the entities client.

## Get an email template

To get an email template by name, for example the template for when a user has forgotten their password:

```shell
var template = await MClient.Notifications.GetMailTemplateEntityAsync("ForgotPassword");

```

Note that it is still possible to get the mail template by id as well:

```shell
var entity = await MClient.Entities.GetAsync(id);
// create an instance of a typed IMailTemplateEntity
IMailTemplateEntity template = Client.TypedEntityFactory.FromEntity<IMailTemplateEntity>(entity);

```

## Create an email template

A simple *hello world* template could look like this:

```shell
CultureInfo enUs = CultureInfo.GetCultureInfo("en-US");
var entity = await MClient.EntityFactory.CreateAsync(Constants.MailTemplate.DefinitionName);
var template = Client.TypedEntityFactory.FromEntity<IMailTemplateEntity>(entity);
template.Name = "Hello world template";
template.Subject[enUs] = "Hello there!";
template.Description[enUs] = "Hello";
template.Body[enUs] = "Hello {{Username}}!";
template.SetPropertyValue("M.Mailing.TemplateLabel", enUs, "Hello world template");

var templateVariable = new TemplateVariable
{
  Name = "Username",
  VariableType = TemplateVariableType.String
};
template.SetTemplateVariables(new[] { templateVariable });

await MClient.Entities.SaveAsync(template);

```

## Send email notifications

Emails can be sent to users by username, user id or by a broadcast. There are three respective overloads to the `SendEmailNotificationAsync`. It accepts the following input:

- `MailRequestById` - for specifying users by id.
- `MailRequestByUsername` - for specifying users by username.
- `MailRequestBroadcast` - sends to all users.

An email broadcast could be sent using the template previously created:

```shell
var request = new MailRequestBroadcast
{
  MailTemplateName = "Hello world template"
};
request.Variables.Add("Username", "world");

await MClient.Notifications.SendEmailNotificationAsync(request);

```

This would send an email, containing "Hello world!", to everyone.

## Send real-time notifications

Real-time notifications can be sent to users by username, user ID or by a broadcast. There are three respective overloads to the `SendRealTimeNotificationAsync`. It accepts the following input:

- `RealtimeRequestById` - for specifying users by ID.
- `RealtimeRequestByUsername` - for specifying users by username.
- `RealtimeRequestBroadcast` -sends to all users.

A real-time notification could be sent to the *DemoUser*:

```shell
var request = new RealtimeRequestByUsername()
{
  Title = "Your notification title",
  Link = new System.Uri("https://example.com")
};
request.Recipients.Add("DemoUser");
request.SetBody("Your description");
request.SetIcon("https://example.com/image.png");

await MClient.Notifications.SendRealTimeNotificationAsync(request);

```

The link is opened when the user clicks on the notification.

This real-time request interface is built on the standard notifications API: [https://developer.mozilla.org/en-US/docs/Web/API/notification](https://developer.mozilla.org/en-US/docs/Web/API/notification). This API uses an `options` object that contains all the notification information. This object is directly passed from the `IRealtimeRequest.Options` property. Some helper methods have been provided to help configure this options object, for example, the body and the icon of the notification.

> [!note]
> For security reasons, external URLs cannot be included in real-time notification requests.

## Send confirmation emails

> [!important]
> For `SendConfirmationEmailAsync` to work, you need to set `EnableConfirmationMail` to `true` in the settings.

Sending confirmation emails to users can be done using ids or usernames:

```shell
await MClient.Notifications.SendConfirmationEmailAsync("DemoUser");

```

This will send an email to the specified user containing a secure link to activate their account.