This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, go to https://wso2.com/documentation/.

Enabling Notifications for User Operations

The primary objective of this is to send a notification to an external endpoint once a user operation has taken place. For example, you want to send an email to an email address once a new user is created or the password of an existing user is changed. This can be achieved by enabling notifications for user operations.

The configuration differs based on the type of notifications you want to send to the external endpoint. The following instructions provide information on how to send an email when a user operation takes place.

  1. Enable axis2 email transport sender by uncommenting the relevant section in the <PRODUCT_HOME>/repository/conf/axis2/axis2.xml file and add the appropriate values for them. The following is an example of the uncommented MailTransportSender.

    <transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
    	<parameter name="mail.smtp.from">wso2demomail@gmail.com</parameter>
    	<parameter name="mail.smtp.user">wso2demomail</parameter>
    	<parameter name="mail.smtp.password">mailpassword</parameter>
    	<parameter name="mail.smtp.host">smtp.gmail.com</parameter>
    	<parameter name="mail.smtp.port">587</parameter>
    	<parameter name="mail.smtp.starttls.enable">true</parameter>
    	<parameter name="mail.smtp.auth">true</parameter>
    </transportSender>
  2. Configure the <PRODUCT_HOME>/repository/conf/msg-mgt.properties file with the desired destination configurations and template configurations. The following is a sample configuration for sending an email to an email address on user operation event.

    module.name.1=email
    email.subscription.1=userOperation
    email.subscription.userOperation.template=/home/user/Desktop/johnsmith
    email.subscription.userOperation.salutation=Admin
    email.subscription.userOperation.subject=User operation change information
    email.subscription.userOperation.endpoint.1=privateMail
    email.subscription.userOperation.endpoint.privateMail.address=receiver@gmail.com
    email.subscription.userOperation.endpoint.privateMail.salutation=Admin private mail
    email.subscription.userOperation.endpoint.privateMail.subject=User operation change information to private mail

    Before going into a detailed description about each property, one of the important facts that you must keep in your mind is that the properties included in this file can be secured using secure vault. You may refer Carbon Secure Vault Implementation for more information on how to use secure vault to encrypt sensitive information in this property file. The following table lists out the properties and their description (click on the table to scroll through the description).

    PropertyDescription
    module.name.1=emailBy defining this property, you can register the email sending module in the Notification-Mgt framework, so that the email sending module acts as a listener.
    email.subscription.1=userOperationThe first subscription by the email module is 'userOperation'. When a user operation happens, an event is triggered from the system. From this configuration you can make the email module to subscribe for that particular event and send an email on events. You can define this subscription name as userOperation (you must use this since this is the name of the event that is published by the publishing party) and from this point onwards you will be using email.subscription.userOperation as the prefix for properties relevant to this subscription.
    email.subscription.userOperation.template=/home/user/Desktop/template

    This is the template for the email. You can configure your template such that it has placeholders. These placeholders are replaced with dynamic values that are coming from the event or you can define values for these placeholders using your configurations.

    The following is a sample email template with placeholders.

    Hi {username}

    This is a test mail to your private mail. The operation occurred was: {operation}.

    The following are the dynamic data used in the user operation event.

    - operation: The type of user operation that took place.
    - username: The username of the user that is subject to the information change.

     email.subscription.userOperation.salutation=Admin

    This property can be used to replace a placeholder in the email template. In this particular scenario, this property has no value or usage since there is no place holder for this. Supposing you had a template like the following, this value replaces the placeholder of {salutation}.

    Hi {salutation}

    This is a test mail to your private mail. The operation occurred was: {operation}

    email.subscription.userOperation.subject=User operation change informationThis is a module specific property and is specific to the email module. You can define the subject of the mail using this property. Now you are done with subscription level configurations and progressing towards defining endpoint information.
    email.subscription.userOperation.endpoint.1=privateMailThis is the first endpoint definition for the userOperation event subscription. From this point onwards, you are defining properties that are relevant to this endpoint. You defined the name of the first endpoint as privateMail. From this point onwards you must use email.subscription.userOperation.endpoint.privateMail as the prefix for properties relevant to this endpoint.
    email.subscription.userOperation.endpoint.privateMail.address=receiver@gmail.comThis is an endpoint configuration that is used to define the email address.
    email.subscription.userOperation.endpoint.privateMail.salutation=Admin private mail

    This is an endpoint level configuration and the same as the property “email.subscription.userOperation.salutation=Admin”.

    This property can be used to replace a placeholder in email template. In the scenario mentioned in this topic, this property has no value or usage since there is no placeholder for this. Suppose we had a template like following, this value replaces the placeholder of {salutation}.

    Hi {salutation}

    This is a test mail to your private mail. The operation occurred was: {operation}

    email.subscription.userOperation.endpoint.privateMail.subject= User operation change information to private mailThis is an endpoint level configuration to define the subject of the email. Notice that it is possible to define the subject of the email using email.subscription.userOperation.subject=User operation change information as mentioned earlier. However, since this is a more specific level property (this is an endpoint level property and not an event level property) this overrides the previous property.