DNN Module Development: Approve user without sending DNN default welcome e-mail


I’ve developed a custom module that enables administrators to approve new users. When a user is approved the module sends a custom welcome e-mail. Everything worked fine in former versions of the DNN platform, but after upgrading to 07.03.04 the user got two welcome e-mails: In addition to the custom e-mail, the default DNN welcome e-mail was send to the user.

The custom module used the following source code to approve a user:

  // Approve user (user is a UserInfo instance)
  user.Membership.Approved = true;
            
  // Update user
  UserController.UpdateUser(portalId, user);

  // Send custom welcome e-mail
  // ...

After digging into the source code of the DNN platform, I found out that the logic to send the default DNN welcome e-mail was moved from the UI to the business logic (see this commit on GitHub) and there seems to be no way to use the new business logic in a way that it does not send the default welcome e-mail. In the end, I used reflection to access an internal method to suppress sending the e-mail:

  // Approve user (user is a UserInfo instance)
  user.Membership.Approved = true;
            
  // Supress DNN default approval e-mail which is automatically send
  // when user is updated (calling UserController.UpdateUser()) 
  // after approved flag changed from false to true 
  var confirmApprovedMethod = typeof (UserMembership).GetMethod("ConfirmApproved",
    BindingFlags.Instance | BindingFlags.NonPublic);
  if (confirmApprovedMethod != null) confirmApprovedMethod.Invoke(user.Membership, null);

  // Update user
  UserController.UpdateUser(portalId, user);

  // Send custom welcome e-mail
  // ...

Hope this helps someone who is facing the same problem.

,

Leave a Reply

Your email address will not be published. Required fields are marked *