¡Hola Carlos Rodríguez Proyectos Linktech!
Bienvenido a Microsoft Q&A.
Parece que estás muy cerca de lograrlo. El error "Access is denied" generalmente indica que los permisos necesarios no están configurados correctamente o que el token de acceso no tiene los permisos adecuados. Aquí hay algunos pasos que puedes seguir para solucionar este problema:
- Verificar Permisos:
- Asegúrate de que la aplicación registrada en Azure AD tenga los permisos necesarios para acceder al correo. Los permisos comunes incluyen
Mail.Read
,Mail.ReadWrite
,Mail.Send
, etc. Puedes verificar y agregar estos permisos en el portal de Azure bajo "API permissions".
- Asegúrate de que la aplicación registrada en Azure AD tenga los permisos necesarios para acceder al correo. Los permisos comunes incluyen
- Conceder Consentimiento Administrativo:
- Después de agregar los permisos, asegúrate de conceder el consentimiento administrativo para que los permisos sean efectivos. Esto se puede hacer en el portal de Azure o mediante un enlace de consentimiento.
- Usar el Endpoint Correcto:
- Asegúrate de que estás usando el endpoint correcto para obtener el token de acceso. Para la autenticación de cliente, el endpoint debe ser
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
.
- Asegúrate de que estás usando el endpoint correcto para obtener el token de acceso. Para la autenticación de cliente, el endpoint debe ser
- Verificar el Scope:
- El scope en tu solicitud de token debe incluir
https://graph.microsoft.com/.default
para asegurarte de que todos los permisos configurados en Azure AD sean incluidos en el token.
- El scope en tu solicitud de token debe incluir
Usar la API de REST de Correo de Outlook
Información general sobre la API de correo de Outlook
Aquí tienes un ejemplo de cómo debería verse tu código PHP para obtener el token y acceder a los correos:
$client = new Client();
try {
$response = $client->post('https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token', [
'form_params' => [
'client_id' => $client_id,
'client_secret' => $client_secret,
'grant_type' => 'client_credentials',
'scope' => 'https://graph.microsoft.com/.default'
]
]);
$accessToken = json_decode($response->getBody(), true)['access_token'];
} catch (\Exception $e) {
echo 'Error obteniendo el token de acceso: ' . $e->getMessage();
return;
}
$client = new Client([
'base_uri' => 'https://graph.microsoft.com/v1.0/',
'headers' => [
'Authorization' => "Bearer $accessToken",
'Content-Type' => 'application/json',
],
]);
$response = $client->get("users/$sharedMailbox/mailFolders/Inbox/messages", [
'query' => [
'$filter' => "isRead eq false",
'$top' => 10,
'$select' => 'id,subject,from,hasAttachments',
],
]);
$messages = json_decode($response->getBody(), true);
print_r($messages);
Espero que estos consejos ayuden a resolver el problema. Si necesitas más asistencia, estoy a tu disposición.
Saludos,
Jonathan.
----------*
Tu opinión es muy importante para nosotros! Si esta respuesta resolvió tu consulta, por favor haz clic en 'SÍ'. Esto nos ayuda a mejorar continuamente la calidad y relevancia de nuestras soluciones.