
If you’re using WHMCS with Plesk and wondering why clients receive only FTP credentials when ordering additional hosting packages – you’re not alone.
This behavior is expected and happens by design, due to how Plesk handles user accounts.
The Problem
Your client orders their first hosting package – they receive a welcome email with full Plesk panel login.
Later, they order a second domain or hosting service under the same client account. WHMCS sends another welcome email… but this time, the credentials are only for FTP.
They try to log into Plesk – but it doesn’t work.
Why This Happens
Plesk uses a single customer account per client. All services (domains, subscriptions) under that client are grouped in one place.
When a second service is provisioned, Plesk does not create a new panel user. Instead, it just adds a new subscription under the same user – and WHMCS generates FTP credentials for that specific subscription.
WHMCS has no way of knowing that the user already exists and already has control panel access.
The Solution
You can’t change how Plesk groups services under one user, but you can improve the messaging.
Add this logic to your WHMCS Hosting Welcome Email template:
{if $mergefields.HasOldHosting eq "1"}This is not your first Web Hosting account with us, the login details below are for FTP access only and cannot be used to log in to the Plesk control panel. All your hosting packages are managed under the same Plesk account that was created with your initial hosting order!
FTP Server: {$service_server_name}
Port: 21
Username: {$service_username}
Password: {$service_password}
{else}Username: {$service_username}
Password: {$service_password}
Control Panel URL: https://{$service_server_name}:8443/{/if}
(And set the HasOldHosting
variable using a hook to check whether the client already has another hosting package.)
The Hook (placed inside includes/hooks):
<?php
// Made by https://dcx.rs/en/
use WHMCS\Database\Capsule;
add_hook('EmailPreSend', 1, function($vars) {
if ($vars['messagename'] !== 'Hosting Account Welcome Email') {
return;
}
$clientId = $vars['mergefields']['client_id'] ?? 0;
$currentServiceId = $vars['mergefields']['service_id'] ?? 0;
if (!$clientId) {
return;
}
$otherHostingCount = Capsule::table('tblhosting')
->where('userid', $clientId)
->where('id', '!=', $currentServiceId)
->count();
$hasOldHosting = $otherHostingCount > 0 ? '1' : '0';
return [
'mergefields' => array_merge($vars['mergefields'], [
'HasOldHosting' => $hasOldHosting,
]),
];
});
Need Help?
Want us to implement this logic in your WHMCS system or explain it to your clients with custom templates?
📩 Contact DCX Hosting – we make Plesk + WHMCS work the right way.