Laravel 11用Webklex连接Office 365失败:获Token仍无法建立连接
Office 365 IMAP 连接失败(Webklex v4.1 + OAuth2)
我尝试使用Webklex库v4.1连接Office 365获取邮件,能够成功获取OAuth2认证令牌,但调用connect()建立连接时,始终收到**"connection setup failed"**错误。
获取OAuth2令牌的代码
private function getToken0Auth() { try { $client = new \GuzzleHttp\Client(); // 向Microsoft OAuth2端点请求令牌 $response = $client->post('https://login.microsoftonline.com/'.env('tenant_id').'/oauth2/v2.0/token', [ 'form_params' => [ 'client_id' => env('client_id'), 'client_secret' => env('client_secret'), 'scope' => 'https://outlook.office365.com/.default', 'grant_type' => 'client_credentials', ], ]); $body = json_decode($response->getBody()); if (!$body->access_token) { return ['success' => false, 'message' => '无法生成令牌。']; } return ['success' => true, 'token' => $body->access_token]; } catch (\Throwable $t) { return ['success' => false, 'message' => $t->getMessage()]; } }
令牌响应示例
eyJ0eXAiOiJKV1QiLCJub25jZSI6InNjUWJVeERrY3BvcjNsdVdaa080OERISDNsSDQwSmhEVk5QeXlVanBBb1EiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikg5bmo1QU9Tc3dNcGhnMVNGeDdqYVYtbEI5dyIsImtpZCI6Ikg5bmo1QU9Tc3dNcGhnMVNGeDdqYVYtbEI5dyJ9.eyJhdWQiOiJodHRwczovL291dGxvb2sub2ZmaWNlMzY1LmNvbSIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0L2IzNDdhMGY0LTA3MzQtNDI5Ni05NzU3LTc2NzJkOGFjYjJhNC8iLCJpYXQiOjE3MjU2NDU5ODYsIm5iZiI6MTcyNTY0NTk4NiwiZXhwIjoxNzI1NjQ5ODg2LCJhaW8iOiJFMmRnWUxnbllYVWhjbzlWUU02SGEvM0poNXMvQWdBPSIsImFwcF9kaXNwbGF5bmFtZSI6IkxhcmF2ZWwgT2ZmaWNlIDM2NSBJbnRlZ3JhdGlvbiIsImFwcGlkIjoiMzkwNjJiNjMtZGY4OC00M2ZmLWI3MTktYWQ5M2Q3MjNlNDgxIiwiYXBwaWRhY3IiOiIxIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvYjM0N2EwZjQtMDczNC00Mjk2LTk3NTctNzY3MmQ4YWNiMmE0LyIsImlkdHlwIjoiYXBwIiwib2lkIjoiZmFlZWFjYmEtZjcwZS00MmRjLThhZWYtYjdmNzFmNzBlM2ZiIiwicmgiOiIwLkFWZ0E5S0JIc3pRSGxrS1hWM1p5Mkt5eXBBSUFBQUFBQVBFUHpnQUFBQUFBQUFEeUFBQS4iLCJyb2xlcyI6WyJJTUFQLkFjY2Vzc0FzQXBwIiwiU01UUC5TZW5kQXNBcHAiXSwic2lkIjoiOWU3YjgxODctZmY5ZC00OWRiLTg1N2EtMWJiMDEyZGY4NjgwIiwic3ViIjoiZmFlZWFjYmEtZjcwZS00MmRjLThhZWYtYjdmNzFmNzBlM2ZiIiwidGlkIjoiYjM0N2EwZjQtMDczNC00Mjk2LTk3NTctNzY3MmQ4YWNiMmE0IiwidXRpIjoidWF5bHNEVkZ0VS1TN3luYUpVOEtBQSIsInZlciI6IjEuMCIsIndpZHMiOlsiMDk5N2ExZDAtMGQxZC00YWNiLWI0MDgtZDVjYTczMTIxZTkwIl0sInhtc19pZHJlbCI6IjcgMjgifQ.iZYBRa448-6E0oGNJU4FcXoeiDuhLTgDBQSMmJ-kyY1cOtsf3YHtl3b2HCYcRnanxLSa1v8WHxV2VR0KUH_FRUnDhAIVmHxztt039YvB3mk1znVXB7er6wDK_w07xRxH6ftvqo3ia8KPzXQXYGJ4iz2E8NyJYFlp8J_aj76fK2OncxHnTYe5HxyEkqWN50IKCTDoSFL_bEhmNLRhhAXm6O5od81KVC0sGz8BbhBD-QTLnoZRptb3SG1KTc0H-_uRvO8qAWYpwu3XCzNCETmiIuVVSyDUjafh6CinW8sAVm9kuBCtPpetzoYbljQlLjVyfE5Ppha8DmdFj2xtTYS4XA
连接IMAP服务器的代码
$oClient = Client::make([ 'host' => 'outlook.office365.com', 'port' => 993, 'encryption' => 'ssl', 'validate_cert' => false, 'username' => 'my-email', 'password' => $response['token'], // OAuth2令牌 'protocol' => 'imap', 'authentication' => 'oauth', // 指定OAuth认证方式 ]); $oClient->connect();
已完成的排查步骤
- 在Office 365中注册了应用,并授予IMAP.AccessAsApp权限
- 已启用目标邮箱的IMAP功能
- 应用设置为允许任意账户访问
目前已无排查思路,请求帮助。
内容的提问来源于stack exchange,提问作者Luiz Gustavo Costa Ceolin
相关产品推荐
相关产品推荐

