Creating custom notification gateway classes
To create a custom notification gateway class:
- Create a new library (assembly) as part of your web project solution.
- Create a new class inside this library.
- Set your class to inherit from the CMS.Notifications.CMSNotificationGateway abstract class.
- Override the following methods to achieve the required functionality:
- void SendNotification() – sends a single notification. Automatically called after the specified event is raised.
- CMSNotificationGatewayForm GetNotificationGatewayForm() – loads and returns the notification gateway form for the notification gateway.
- Compile the library.
- Add a reference to the library file (*.dll) to the main Kentico web project.
Example - E-mail notification gateway class
The following code sample shows how to implement a custom e-mail notification gateway class:
EmailNotificationGateway.cs
using System;
using System.Text;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using CMS.Notifications;
using CMS.Helpers;
using CMS.EventLog;
using CMS.SiteProvider;
using CMS.EmailEngine;
using CMS.DataEngine;
namespace EmailNotification
{
/// <summary>
/// Base class for e-mail notification gateway.
/// </summary>
public class EmailNotificationGateway : CMSNotificationGateway
{
/// <summary>
/// Returns the e-mail gateway form.
/// </summary>
public override CMSNotificationGatewayForm GetNotificationGatewayForm()
{
try
{
Control ctrl = this.NotificationSubscriptionControl.Page.LoadControl("~/CorporateSite/EmailNotificationForm.ascx");
ctrl.ID = ValidationHelper.GetIdentifier("notif" + this.NotificationGatewayObj.GatewayName);
return (CMSNotificationGatewayForm)ctrl;
}
catch (Exception ex)
{
try
{
// Logs exception events
EventLogProvider.LogException("EmailGateway", "EXCEPTION", ex);
}
catch
{
// Unable to log the event
}
}
return null;
}
/// <summary>
/// Sends the notification via e-mail.
/// </summary>
public override void SendNotification()
{
try
{
if (this.NotificationSubscriptionObj != null)
{
// Get template text
NotificationTemplateTextInfo templateText = NotificationTemplateTextInfoProvider.GetNotificationTemplateTextInfo(this.NotificationGatewayObj.GatewayID, this.NotificationSubscriptionObj.SubscriptionTemplateID);
if (templateText != null)
{
// Get the site name
string siteName = null;
SiteInfo si = SiteInfoProvider.GetSiteInfo(this.NotificationSubscriptionObj.SubscriptionSiteID);
if (si != null)
{
siteName = si.SiteName;
}
// Create message object
EmailMessage message = new EmailMessage();
// Get sender from settings
message.From = SettingsKeyInfoProvider.GetStringValue(siteName + ".CMSSendEmailNotificationsFrom");
// Do not send the e-mail if there is no sender specified
if (message.From != "")
{
// Initialize message
message.Recipients = this.NotificationSubscriptionObj.SubscriptionTarget;
// Body
if ((this.NotificationSubscriptionObj.SubscriptionUseHTML) &&
(this.NotificationGatewayObj.GatewaySupportsHTMLText) &&
(templateText.TemplateHTMLText != ""))
{
// HTML format, set Body property, resolve macros if possible
message.EmailFormat = EmailFormatEnum.Html;
if (this.Resolver != null)
{
message.Body = this.Resolver.ResolveMacros(templateText.TemplateHTMLText);
}
else
{
message.Body = templateText.TemplateHTMLText;
}
}
else
{
// Plaintext format, set PlainTextBody property, resolve macros if possible
message.EmailFormat = EmailFormatEnum.PlainText;
if (this.Resolver != null)
{
message.PlainTextBody = this.Resolver.ResolveMacros(templateText.TemplatePlainText);
}
else
{
message.PlainTextBody = templateText.TemplatePlainText;
}
}
// Subject, resolve macros if possible
if (this.Resolver != null)
{
message.Subject = this.Resolver.ResolveMacros(templateText.TemplateSubject);
}
else
{
message.Subject = templateText.TemplateSubject;
}
// Send email via Email engine API
EmailSender.SendEmail(siteName, message);
}
}
}
}
catch (Exception ex)
{
try
{
// Logs exception events
EventLogProvider.LogException("EmailGateway", "EXCEPTION", ex);
}
catch
{
// Unable to log the event
}
}
}
}
}