You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP简便访问Office 365邮箱?(已禁用Basic Authentication)

关于PHP替代Basic Auth访问Office365邮箱的简化方案

不借助第三方工具的话,确实需要在微软开发者平台(Azure AD)注册应用,但可以通过客户端凭证模式的Microsoft Graph API简化开发,不用编写复杂的OAuth交互流程,代码量也能控制在合理范围——刚好满足你读取、删除、移动邮件的需求。

步骤1:注册并配置Azure AD应用

  1. 登录Azure AD门户,注册一个单租户应用(你的邮箱属于特定租户)。
  2. 配置重定向URI:选http://localhost(本地调试用,生产环境可按需修改)。
  3. 添加API权限:搜索并添加Microsoft Graph的Mail.ReadWrite权限(该权限覆盖邮件读取、删除、移动操作),然后点击「授予管理员同意」(必须完成这一步,否则后台脚本无法获取权限)。
  4. 生成客户端密钥:在「证书和密码」页面创建一个客户端密码,保存好租户ID、客户端ID、客户端密钥三个关键信息。

步骤2:获取访问令牌(PHP代码)

用CURL直接请求令牌,无需第三方OAuth库:

$tenantId = '你的租户ID';
$clientId = '你的客户端ID';
$clientSecret = '你的客户端密钥';
$scope = 'https://graph.microsoft.com/.default';

$tokenUrl = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token";
$postData = http_build_query([
    'grant_type' => 'client_credentials',
    'client_id' => $clientId,
    'client_secret' => $clientSecret,
    'scope' => $scope
]);

$ch = curl_init($tokenUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$tokenData = json_decode($response, true);
$accessToken = $tokenData['access_token'] ?? '';

步骤3:实现邮件操作(PHP代码)

读取邮件

$email = '你的Gabohost邮箱地址';
$apiUrl = "https://graph.microsoft.com/v1.0/users/$email/messages";

$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $accessToken",
    "Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$messages = curl_exec($ch);
curl_close($ch);

// 解析邮件列表
$messageList = json_decode($messages, true);
print_r($messageList['value']);

删除邮件

替换{message-id}为实际的邮件ID:

$messageId = '目标邮件ID';
$apiUrl = "https://graph.microsoft.com/v1.0/users/$email/messages/$messageId";

$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $accessToken",
    "Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

移动邮件

先通过GET https://graph.microsoft.com/v1.0/users/$email/mailFolders获取目标文件夹的ID,再执行移动:

$messageId = '目标邮件ID';
$targetFolderId = '目标文件夹ID';
$apiUrl = "https://graph.microsoft.com/v1.0/users/$email/messages/$messageId/move";

$postData = json_encode([
    'destinationId' => $targetFolderId
]);

$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $accessToken",
    "Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

关键说明

  • 客户端凭证模式适合后台运行的脚本,无需用户交互,直接获取权限操作邮箱。
  • 相比原来的IMAP代码,确实多了几步,但都是基础的HTTP请求,没有复杂的依赖。
  • 确保你的服务器CURL支持HTTPS,并且能访问微软的API域名。

内容的提问来源于stack exchange,提问作者Matilda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 02:10:35