PHP:如何使用msgraph-sdk-php从Outlook中获取电子邮件列表?

xfb7svmp  于 12个月前  发布在  PHP
关注(0)|答案(1)|浏览(115)

我正在尝试检索Outlook电子邮件并使用此库https://github.com/microsoftgraph/msgraph-sdk-php
这是我的代码:

$tenantId     = 'aaaaaaaaaaaaaaa';
$clientId     = 'bbbbbbbbbbbbbbb';
$clientSecret = 'ccccccccccccccc';

$inbox_id = 'dddddddddddddd';

$guzzle      = new \GuzzleHttp\Client();
$url         = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/v2.0/token';
$token       = json_decode($guzzle->post($url, [
    'form_params' => [
        'client_id'     => $clientId,
        'client_secret' => $clientSecret,
        'scope'         => 'https://graph.microsoft.com/.default',
        'grant_type'    => 'client_credentials',
    ],
])->getBody()->getContents());
$accessToken = $token->access_token;

$graph = new Graph();
$graph->setAccessToken($accessToken);

$outlook_emails = $graph->createRequest("GET",
    "/users/xxxxxxxxxxxxxx/mailFolders/" . $inbox_id . "/messages")
    ->setReturnType(Model\User::class)
    ->execute();

这是一个示例响应:

$outlook_emails>>>
[{
    "@odata.etag": "W\/\"CQAAABYAAACR8bcfZf8uSKGEvkK2\"",
    "id": "AAMkAGQOAAAAAAEMAACR8bcfZf8uSKGh7OAAAEvmH6AAA=",
    "createdDateTime": "2023-06-21T21:57:23Z",
    "lastModifiedDateTime": "2023-06-21T21:57:23Z",
    "changeKey": "CQAAABYAAAAEvkK2",
    "categories": [],
    "receivedDateTime": "2023-06-21T21:57:23Z",
    "sentDateTime": "2023-06-21T21:56:42Z",
    "hasAttachments": false,
    "internetMessageId": "<CAsZwAyQ@mail.gmail.com>",
    "subject": "Re: this is a second thread",
    "bodyPreview": "this is a second thread b\r\n\r\n\r\nOn Wed, Jun 21, 2023 at 4:56\u202fPM FNU LNU <developer@xxxxxxx.onmicrosoft.com> wrote:\r\nthis is a second thread",
    "importance": "normal",
    "parentFolderId": "AAMkhTgfAlP7OAAAAAAEMAAA=",
    "conversationId": "AAQkA6vM6AD4=",
    "conversationIndex": "AQHZpUKIgvPq8zoAPq+VzXAA",
    "isDeliveryReceiptRequested": null,
    "isReadReceiptRequested": false,
    "isRead": false,
    "isDraft": false,
    "webLink": "https:\/\/outlook.office365.com\/owa\/?ItemID=AAMAAA%3D&exvsurl=1&viewmodel=ReadMessageItem",
    "inferenceClassification": "focused",
    "body": {
        "contentType": "html",
        "content": "<html><head>\r\n<meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\"><\/head><body><div dir=\"ltr\"><span style=\"color:rgb(0,0,0); font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px\">this is a second thread b<\/span><div class=\"gmail-yj6qo\" style=\"color:rgb(0,0,0); font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px\"><\/div>&nbsp;<\/div><br><div class=\"gmail_quote\"><div dir=\"ltr\" class=\"gmail_attr\">On Wed, Jun 21, 2023 at 4:56\u202fPM FNU LNU &lt;<a href=\"mailto:developer@08fxt.onmicrosoft.com\">developer@08fxt.onmicrosoft.com<\/a>&gt; wrote:<br><\/div><blockquote class=\"gmail_quote\" style=\"margin:0px 0px 0px 0.8ex; border-left:1px solid rgb(204,204,204); padding-left:1ex\"><div class=\"msg-6004113959439972472\"><div dir=\"ltr\"><div style=\"font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)\">this is a second thread<br><\/div><\/div><\/div><\/blockquote><\/div><\/body><\/html>"
    },
    "sender": {
        "emailAddress": {
            "name": "zzzzz",
            "address": "zzzzz@zzzzzz.com"
        }
    },
    "from": {
        "emailAddress": {
            "name": "xxxx",
            "address": "xxxxx"
        }
    },
    "toRecipients": [{
        "emailAddress": {
            "name": "FNU LNU",
            "address": "developer@xxxxt.onmicrosoft.com"
        }
    }],
    "ccRecipients": [],
    "bccRecipients": [],
    "replyTo": [],
    "flag": {
        "flagStatus": "notFlagged"
    }
}
...
]

当我尝试迭代$outlook_emails时,我得到此错误"message": "Cannot use object of type Microsoft\\Graph\\Model\\User as array",

foreach ($outlook_emails as $email) {
     print($email['bodyPreview']);
}

1.如何在遍历$outlook_emails时获得对象的值,例如bodyPreview
1.我需要使用哪个API端点来获取电子邮件线程的消息?

vsmadaxz

vsmadaxz1#

如果你想得到一个消息集合,使用createCollectionRequest代替createRequest。将返回类型更改为Model\Message

$outlook_emails = $graph->createCollectionRequest("GET",
    "/users/xxxxxxxxxxxxxx/mailFolders/" . $inbox_id . "/messages")
    ->setReturnType(Model\Message::class)
    ->execute();

来自同一线程的消息具有相同的conversationId。如果您知道conversationId,则可以过滤消息

$conversationId = "xxx"
$outlook_emails = $graph->createCollectionRequest("GET",
    "/users/xxxxxxxxxxxxxx/mailFolders/" . $inbox_id . "/messages?$filter=conversationId eq " . $conversationId)
    ->setReturnType(Model\Message::class)
    ->execute();

相关问题