docs: public static boolean sendPasswordResetLink(CmsObject cms, String fullUserName, String email) {
  
          LOG.info("Trying to find user for email " + email);
          email = email.trim();
  
          try {
              CmsUser foundUser = null;
              try {
                  foundUser = cms.readUser(fullUserName);
              } catch (CmsException e) {
                  LOG.error(e.getLocalizedMessage(), e);
              }
              if ((foundUser == null)
                  || CmsStringUtil.isEmptyOrWhitespaceOnly(email)
                  || !email.equals(foundUser.getEmail())
                  || foundUser.isManaged()
                  || foundUser.isWebuser()) {
                  Notification.show(
                      CmsVaadinUtils.getMessageText(Messages.GUI_PWCHANGE_EMAIL_MISMATCH_0),
                      Type.ERROR_MESSAGE);
                  return false;
              }
              long now = System.currentTimeMillis();
              long expiration = OpenCms.getLoginManager().getTokenLifetime() + now;
              String expirationStr = CmsVfsService.formatDateTime(cms, expiration);
              String token = CmsTokenValidator.createToken(cms, foundUser, now);
              String link = OpenCms.getLinkManager().getWorkplaceLink(cms, CmsWorkplaceLoginHandler.LOGIN_HANDLER, false)
                  + "?at="
                  + token;
              LOG.info("Sending password reset link to user " + foundUser.getName() + ": " + link);
              CmsPasswordChangeNotification notification = new CmsPasswordChangeNotification(
                  cms,
                  foundUser,
                  link,
                  expirationStr);
              try {
                  notification.send();
              } catch (EmailException e) {
                  Notification.show(
                      Messages.get().getBundle(A_CmsUI.get().getLocale()).key(Messages.GUI_PWCHANGE_MAIL_SEND_ERROR_0),
                      Type.ERROR_MESSAGE);
                  LOG.error(e.getLocalizedMessage(), e);
                  return false;
              }
  
          } catch (Exception e) {
              LOG.error(e.getLocalizedMessage(), e);
              Notification.show(e.getLocalizedMessage(), Type.ERROR_MESSAGE);
              return false;
          }
          return true;
      }