How to send forget pass email programatically?
With  some reverse engineering on core user module  the solution is :

    $name = \Drupal::request()-&gt;get("name");
    $langcode =  \Drupal::languageManager()-&gt;getCurrentLanguage()-&gt;getId();
    // Try to load by email.
    $users = \Drupal::entityTypeManager()-&gt;getStorage('user')-&gt;loadByProperties(array('mail' =&gt; $name));
    if (empty($users)) {
        // No success, try to load by name.
        $users = \Drupal::entityTypeManager()-&gt;getStorage('user')-&gt;loadByProperties(array('name' =&gt; $name));
    }
    $account = reset($users);
    // Mail one time login URL and instructions using current language.
    $mail = _user_mail_notify('password_reset', $account, $langcode);