如何在Laravel 10中通过cPanel UAPI正确创建邮箱并获取成功响应
在Laravel 10中调用cPanel UAPI创建邮箱的正确方式
你当前的代码存在几个关键错误,不符合cPanel UAPI的调用规范:
- 请求URL未指向UAPI的
/execute/Module/function核心路径 - 未添加必填的
Authorization身份验证请求头 - 参数传递方式错误(UAPI不需要用
parameter和value包裹,需直接传递函数要求的参数名,比如email、password)
正确的请求规则
根据cPanel UAPI规范,调用需满足:
- 身份验证头:添加
Authorization头,格式为cpanel 用户名:API令牌(注意cpanel后有一个空格) - 请求地址:
https://你的cPanel服务器域名:2083/execute/Email/add_pop(Email是模块名,add_pop是创建邮箱的函数名) - 参数传递:直接传入
add_pop函数要求的参数,比如邮箱前缀、密码、配额等
Laravel 10中的正确实现代码
以下是两种可行的请求方式,附带响应处理逻辑:
方式1:GET请求(对应官方curl示例格式)
public function createEmail() { $cpanelUser = 'holidays'; $apiToken = 'XPA6V9NSZ5JGKXU5VE2X214U53WROFI0'; $serverDomain = 'example.com'; $response = Http::withHeaders([ 'Authorization' => "cpanel {$cpanelUser}:{$apiToken}" ])->get("https://{$serverDomain}:2083/execute/Email/add_pop", [ 'email' => 'test', // 邮箱前缀,最终生成test@你的主域名 'password' => 'StrongPass123!', // 符合cPanel强度要求的密码 'quota' => 100 // 邮箱配额(单位MB,0表示不限,可选参数) ]); // 处理响应并返回结果 if ($response->successful()) { $result = $response->json(); return response()->json([ 'status' => 'success', 'message' => '邮箱创建成功', 'email_info' => $result['data'] ]); } else { $errorMsg = $response->json()['errors'][0]['message'] ?? '请求失败'; return response()->json([ 'status' => 'error', 'message' => $errorMsg ], $response->status()); } }
方式2:POST请求(UAPI支持表单参数提交)
public function createEmail() { $cpanelUser = 'holidays'; $apiToken = 'XPA6V9NSZ5JGKXU5VE2X214U53WROFI0'; $serverDomain = 'example.com'; $response = Http::withHeaders([ 'Authorization' => "cpanel {$cpanelUser}:{$apiToken}" ])->post("https://{$serverDomain}:2083/execute/Email/add_pop", [ 'email' => 'test', 'password' => 'StrongPass123!', 'domain' => 'sub.example.com', // 可选,指定非主域名创建邮箱 'quota' => 50 ]); // 响应处理逻辑与GET方式一致 if ($response->successful()) { $result = $response->json(); return response()->json([ 'status' => 'success', 'message' => '邮箱创建成功', 'email_info' => $result['data'] ]); } else { $errorMsg = $response->json()['errors'][0]['message'] ?? '请求失败'; return response()->json([ 'status' => 'error', 'message' => $errorMsg ], $response->status()); } }
额外注意事项
- 若需指定非主域名创建邮箱,添加
domain参数即可,比如'domain' => 'sub.example.com' - 密码必须符合cPanel的强度规则(如长度、包含大小写字母/数字/特殊字符),否则会返回验证错误
- UAPI响应为JSON格式,成功时
status字段为1,失败时为0,错误信息存储在errors数组中
内容的提问来源于stack exchange,提问作者Morshedul Aziz
相关产品推荐
相关产品推荐

