Développement et bases de données
Générer des rapports CSV de messagerie et de cron depuis cPanel
Vous pouvez utiliser UAPI pour inventorier les boîtes mail, les redirections et les réponses automatiques de votre compte. Les exemples suivants s'exécutent avec PHP 8 en SSH ; ce ne sont pas des pages à publier sur le web. Consultez d'abord l'introduction à UAPI.
Préparer un dossier privé
Enregistrez les scripts et leurs résultats en dehors de public_html et des racines de vos autres domaines, par exemple dans /home/usuario_cpanel/reportes. Limitez l'accès à votre utilisateur : les rapports contiennent des adresses et peuvent inclure des commandes avec des informations privées.
Avant d'automatiser, exécutez chaque appel de consultation sur votre compte et vérifiez quels champs renvoie la version installée. Les fonctions dépendent des services et des permissions disponibles. Un rapport vide ne prouve pas qu'il n'existe aucun compte si l'appel a échoué.
Fonctions communes
Enregistrez ce fichier sous le nom funciones.php dans le dossier privé. Vérifiez que exec est disponible dans le PHP du terminal. La fonction n'autorise que les consultations fixes utilisées par ces exemples et vérifie à la fois le processus et l'état UAPI.
<?php function ejecutar(string $comando): string { $lineas = []; $codigo = 0; exec($comando, $lineas, $codigo); if ($codigo !== 0) { throw new RuntimeException('La requête a échoué.'); } return implode("\n", $lineas); } function uapi(string $funcion, array $parametros = []): array { $permitidas = [ 'list_pops_with_disk', 'list_forwarders', 'list_auto_responders', 'get_auto_responder', ]; if (!in_array($funcion, $permitidas, true)) { throw new InvalidArgumentException('Fonction non autorisée.'); } $comando = '/usr/local/cpanel/bin/uapi --output=json Email ' . escapeshellarg($funcion); foreach ($parametros as $clave => $valor) { if (!in_array($clave, ['domain', 'email'], true)) { throw new InvalidArgumentException('Paramètre non autorisé.'); } $comando .= ' ' . escapeshellarg($clave . '=' . $valor); } $respuesta = json_decode(ejecutar($comando), true, 512, JSON_THROW_ON_ERROR); $resultado = $respuesta['result'] ?? []; if ((int) ($resultado['status'] ?? 0) !== 1) { throw new RuntimeException('Requête refusée par UAPI ; vérifiez les permissions et les paramètres.'); } if (!is_array($resultado['data'] ?? null)) { throw new RuntimeException('Format de données inattendu renvoyé par UAPI.'); } return $resultado['data']; } function escribirCsv(array $filas): void { foreach ($filas as $fila) { $valores = array_map(static function ($valor): string { $texto = (string) ($valor ?? ''); // Empêche que les textes du rapport soient interprétés comme des formules. if (preg_match('/^[\s]*[=+@-]/u', $texto)) { $texto = "'" . $texto; } return $texto; }, $fila); if (fputcsv(STDOUT, $valores, ';', '"', '') === false) { throw new RuntimeException('Écriture du CSV impossible.'); } } }
fputcsv gère correctement les délimiteurs, les guillemets et les sauts de ligne. Importez en outre les colonnes comme texte dans le tableur quand c'est pertinent ; évitez d'ouvrir des rapports d'origine inconnue avec les formules activées.
Boîtes mail et espace utilisé
Enregistrez sous buzones.php :
<?php require __DIR__ . '/funciones.php'; $filas = [['E-mail', 'Espace utilisé', 'Quota']]; foreach (uapi('list_pops_with_disk') as $cuenta) { $filas[] = [ $cuenta['email'] ?? '', $cuenta['humandiskused'] ?? '', $cuenta['humandiskquota'] ?? '', ]; } escribirCsv($filas);
Les champs d'espace sont formatés pour une lecture humaine et peuvent inclure des unités ou une valeur de quota illimité. Ne les additionnez pas comme s'il s'agissait de nombres d'octets. Consultez les champs disponibles dans list_pops_with_disk si vous avez besoin d'un autre format.
Redirections d'un domaine
Enregistrez sous reenviadores.php et changez le domaine :
<?php require __DIR__ . '/funciones.php'; $filas = [['Source', 'Destination']]; foreach (uapi('list_forwarders', ['domain' => 'example.com']) as $regla) { $filas[] = [$regla['dest'] ?? '', $regla['forward'] ?? '']; } escribirCsv($filas);
L'exemple filtre explicitement un domaine. Répétez la consultation pour chaque domaine à inclure et vérifiez que vous ne dupliquez pas de résultats. Une adresse de destination peut être externe ; la liste ne prouve pas qu'elle reçoit effectivement le courrier. Référence : list_forwarders.
Réponses automatiques
La liste par domaine identifie les réponses configurées. Enregistrez-la sous respuestas.php :
<?php require __DIR__ . '/funciones.php'; $filas = [['Compte', 'Objet']]; foreach (uapi('list_auto_responders', ['domain' => 'example.com']) as $respuesta) { $filas[] = [$respuesta['email'] ?? '', $respuesta['subject'] ?? '']; } escribirCsv($filas);
Consultez list_auto_responders pour le format de votre serveur. Si vous avez besoin des dates, consultez aussi get_auto_responder : vérifiez l'identifiant accepté et validez une réponse connue avant de répéter cette consultation pour tous les comptes. Ne retirez pas automatiquement le domaine d'une adresse e-mail ; vous pourriez consulter une autre identité ou ne pas obtenir le résultat prévu.
Les champs de début et de fin peuvent être nuls. Si vous exportez des horodatages Unix, convertissez-les avec un fuseau horaire explicite et indiquez ce fuseau dans l'en-tête. Une réponse configurée n'est pas forcément active au moment du rapport.
Tâches cron
Vous pouvez consulter les tâches de l'utilisateur avec crontab -l. Conservez d'abord sa sortie d'origine comme référence privée. Pour générer un CSV des lignes de programmation habituelles, enregistrez cron.php :
<?php require __DIR__ . '/funciones.php'; $filas = [['Planification', 'Commande']]; foreach (explode("\n", ejecutar('crontab -l')) as $linea) { $linea = trim($linea); if ($linea === '' || str_starts_with($linea, '#') || preg_match('/^[A-Za-z_][A-Za-z0-9_]*\s*=/', $linea)) { continue; } if (preg_match('/^(@\S+)\s+(.+)$/', $linea, $partes)) { $filas[] = [$partes[1], $partes[2]]; } else { $partes = preg_split('/\s+/', $linea, 6); if (count($partes) !== 6) { throw new RuntimeException('Ligne cron non reconnue.'); } $filas[] = [implode(' ', array_slice($partes, 0, 5)), $partes[5]]; } } escribirCsv($filas);
Si l'utilisateur n'a pas de crontab, la commande peut se terminer par une erreur : vérifiez le message dans le terminal avant d'interpréter le résultat. Ce CSV omet les variables d'environnement et les commentaires ; il sert d'inventaire, pas à restaurer une programmation complète. Il ne représente ni les tâches des autres utilisateurs ni celles du système.
Générer et vérifier chaque rapport
Par exemple :
umask 077 php /home/usuario_cpanel/reportes/buzones.php > /home/usuario_cpanel/reportes/buzones.csv
Utilisez un nouveau nom de sortie et vérifiez que la commande se termine sans erreur. N'utilisez pas le fichier si elle a échoué : la redirection peut laisser un CSV vide ou partiel. Vérifiez l'en-tête, une ligne connue et le nombre de lignes avant de le télécharger. Supprimez les copies temporaires quand vous n'en avez plus besoin.
Cela peut aussi vous aider
- API de cPanel (UAPI) : automatiser la messagerie, le FTP et les redirections depuis SSH, cURL ou PHP Utilisez l'API de cPanel avec la commande uapi en SSH ou avec un jeton depuis un autre serveur. Exem...
- Binaires et outils disponibles : FFmpeg, Tesseract, ImageMagick, cURL et plus Consultez les binaires disponibles pour la vidéo, les images, les PDF, l'OCR, le réseau, le DNS, le...
- Configurer des URL conviviales et des règles mod_rewrite Activez mod_rewrite depuis .htaccess et appliquez les règles fournies par chaque application pour ré...
- Créer et exécuter des tâches cron (cron jobs) dans cPanel Configurez des tâches cron dans cPanel, définissez intervalles et commandes, gérez les notifications...
Quelque chose cloche ou a changé ? Racontez-nous et nous le vérifions.