User Creation Email with Password Reset Link

rah dev
Tera Contributor

 

Hi community, good day.

I have a requirement: there is a notification set up on the User table. I want that whenever a user is created, the notification should be triggered for that particular user. In that notification, there should be an email script for resetting the password. When the user clicks on it, they should be redirected to the password reset screen where they can set their password.

I am currently using this script on a normal page, but the result is that it redirects me to the login screen instead.

(function runMailScript(current, template, email, email_action, event) {

    var baseUrl = gs.getProperty('glide.servlet.uri');

    if (!current || current.getTableName() != 'sys_user') {
        template.print("Invalid user record.");
        return;
    }

    var resetLink = baseUrl + "login.do?sysparm_url=/$pwd_reset.do?sysparm_user=" + current.user_name;

    template.print("<p>Dear " + current.name + ",</p>");
    template.print("<p>You have successfully registered.</p>");
    template.print("<p>Please click the link below to set your password:</p>");
    template.print("<p><a href='" + resetLink + "'>Set Your Password</a></p>");
    template.print("<p>If you did not request this, please ignore this email.</p>");

})(current, template, email, email_action, event);

rahdev_1-1771002957452.png

 

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron

@rah dev 

why not use OOTB password reset process?

Take user Directly to password reset (user enters username/email) - no login required

(function runMailScript(current, template, email, email_action, event) {

    var baseUrl = gs.getProperty('glide.servlet.uri');
    
    if (!current || current.getTableName() != 'sys_user') {
        template.print("Invalid user record.");
        return;
    }

    // FIXED: Direct to password reset (user enters username/email) - no login required [web:102]
    var resetLink = baseUrl + "/$pwd_reset.do";

    template.print("<p>Dear " + current.name + ",</p>");
    template.print("<p>Welcome! Your ServiceNow account has been created.</p>");
    template.print("<p>Please click the link below to set your password:</p>");
    template.print("<p><a href='" + resetLink + "'>Set Your Password</a></p>");
    template.print("<br/><p>Username: <strong>" + current.user_name + "</strong></p>");
    template.print("<p>If the link doesn't work, copy-paste: " + resetLink + "</p>");
    template.print("<p>If you did not expect this, please ignore.</p>");
    template.print("<p>Thank you!<br/>ServiceNow Team</p>");

})(current, template, email, email_action, event);

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

 

Regards,
Ankur
Certified Technical Architect  ||  10x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

10 REPLIES 10

martinvirag
Mega Sage

hi!

Why don't you use the OOB PasswordResetUtil() Script include for this?  There is an event called 

password.reset.url , that triggers .

The URL in that util is actually

'/passwordreset.do?sysparm_id=' + user.sys_id + '&sysparm_request_id=' + requestId + '&sysparm_nostack=true&sysparm_token=' + token;

So try to adjust your code to comply this


Regards,
**Martin Virag**
ServiceNow MVP 2026