如何使用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()}"; ?>
关键说明
- 权限选择:如果是用户登录后操作(比如Web应用),需改用授权码流获取令牌,而非客户端凭证流
- 用户标识:
/users/{用户ID或邮箱}中的占位符必须替换为实际的用户邮箱或Azure AD用户ID - 扩展功能:可以在
Message对象中添加附件、设置邮件优先级等,具体属性可参考Microsoft Graph官方的Message模型文档 - 错误处理:实际使用中建议添加异常捕获,处理令牌获取失败、API请求错误等情况
内容的提问来源于stack exchange,提问作者Mohsin Raza
相关产品推荐
相关产品推荐

