Plesk being unable to process the passwords after the disaster recovery.

The issue with Plesk being unable to process the passwords can be related to the disaster recovery.

Plesk encrypts passwords stored in the Plesk configuration database with a server-specific, randomly generated key. This key is stored in the Windows Registry in HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\PLESK\PSA Config\Config\sym_key. As you referred to this server has been recovered from disaster, this key was perhaps not be restored. Replacing the key to allow Plesk process the passwords will not be possible, as passwords which were generated in Plesk since the recovery will not work anymore instead.

To resolve the issue, set the passwords defined for SmarterMail mailboxes for the mailboxes in Plesk.
It can be done with the following steps:

1. Allow retrieval of SmarterMail mailbox passwords as explained in SmarterMail forums here:

2. Retrieve the passwords of SmarterMail mailboxes. This can be either done in SmarterMail interface or, because there are many mailboxes, via SmarterMail API

It was found that passwords for all mailboxes of a domain can be retrieved with for example this powershell script invoking an API request to SmarterMail:

$url = "http://localhost:9998/Services/svcUserAdmin.asmx"
$smartermail_api = New-WebServiceProxy -Uri $url -namespace WebServiceProxy
$result = $smartermail_api.GetUsers("admin", "admin_password", "")

3. Update the passwords of mailboxes in Plesk to the same as set in SmarterMail

This can be done with for example the following command-line: 

C:\> plesk bin mail --update -passwd mypass 

To avoid passwords from not being set due to Plesk security measurements I suggest you to adjust password strength in Tools & Settings > Security Policy temporarily.


4. Select SmarterMail as the mailserver to be used by Plesk

As an example, the following Powershell script retrieves all domains in Plesk, executes the API request to SmarterMail and prints the according command to update the password in Plesk:

$url = "http://localhost:9998/Services/svcUserAdmin.asmx"
$smartermail_api = New-WebServiceProxy -Uri $url -namespace WebServiceProxy
write-host "Email : Password"
foreach ($domain in `plesk bin domain -l)
    $result = $smartermail_api.GetUsers("admin", "admin_password", "$domain")
    foreach ($user in $result.Users)
        $email= $user.Username
        $pass = $user.Password
        write-host "plesk bin mail --update $email -passwd $pass"

You can develop a script from your side or modify the suggestion above from your side.

Please note these actions must be performed from your side as this is an administrative task.

Comments (0)