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

如何使用PHP在Outlook中创建邮件草稿?

使用PHP在Outlook中创建邮件草稿

要通过PHP在Outlook中创建可后续编辑发送的邮件草稿,推荐使用Microsoft Graph API——这是官方支持的Outlook/Office 365操作接口,稳定性和兼容性都有保障。以下是具体实现步骤:

前提准备

  • 在Azure AD中注册一个应用,获取客户端ID、客户端密钥和租户ID
  • 为应用添加Mail.ReadWrite权限(根据场景选择委托权限或应用权限,应用权限需管理员同意)
  • 安装Microsoft Graph PHP SDK:
composer require microsoft/microsoft-graph

代码实现示例

下面的示例使用客户端凭证流(适合服务器端无用户交互的场景)创建草稿:

<?php
require __DIR__ . '/vendor/autoload.php';

use Microsoft\Graph\Graph;
use Microsoft\Graph\Model;

// 替换为你的Azure应用配置
$tenantId = 'your-tenant-id';
$clientId = 'your-client-id';
$clientSecret = 'your-client-secret';
$userEmail = 'target-user@your-domain.com'; // 要创建草稿的用户邮箱

// 获取访问令牌
$guzzle = new \GuzzleHttp\Client();
$tokenEndpoint = "https://login.microsoftonline.com/{$tenantId}/oauth2/v2.0/token";
$tokenResponse = $guzzle->post($tokenEndpoint, [
    'form_params' => [
        'client_id' => $clientId,
        'client_secret' => $clientSecret,
        'scope' => 'https://graph.microsoft.com/.default',
        'grant_type' => 'client_credentials',
    ],
]);
$tokenData = json_decode($tokenResponse->getBody()->getContents());
$accessToken = $tokenData->access_token;

// 初始化Graph客户端
$graph = new Graph();
$graph->setAccessToken($accessToken);

// 构建邮件草稿内容
$message = new Model\Message();
$message->setSubject('PHP创建的Outlook草稿');
$message->setBody(new Model\ItemBody([
    'contentType' => 'HTML',
    'content' => '<h3>测试草稿</h3><p>这是通过PHP+Microsoft Graph创建的邮件草稿,可在Outlook草稿文件夹中编辑发送。</p>'
]));

// 设置收件人
$recipient = new Model\Recipient();
$emailAddr = new Model\EmailAddress();
$emailAddr->setAddress('recipient@example.com');
$recipient->setEmailAddress($emailAddr);
$message->setToRecipients([$recipient]);

// 可选:添加抄送人
// $ccRecipient = new Model\Recipient();
// $ccEmail = new Model\EmailAddress();
// $ccEmail->setAddress('cc@example.com');
// $ccRecipient->setEmailAddress($ccEmail);
// $message->setCcRecipients([$ccRecipient]);

// 保存草稿到用户的Outlook草稿文件夹
$draft = $graph->createRequest('POST', "/users/{$userEmail}/messages")
    ->attachBody($message)
    ->addHeaders(['Prefer' => 'outlook.allow-unsupported-actions'])
    ->setReturnType(Model\Message::class)
    ->execute();

echo "草稿创建成功,草稿ID:{$draft->getId()}";
?>

关键说明

  1. 权限选择:如果是用户登录后操作(比如Web应用),需改用授权码流获取令牌,而非客户端凭证流
  2. 用户标识:/users/{用户ID或邮箱}中的占位符必须替换为实际的用户邮箱或Azure AD用户ID
  3. 扩展功能:可以在Message对象中添加附件、设置邮件优先级等,具体属性可参考Microsoft Graph官方的Message模型文档
  4. 错误处理:实际使用中建议添加异常捕获,处理令牌获取失败、API请求错误等情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:50:08