microsoft-graph-api - ms graph php sdk消息对象检查是否有附件失败
问题描述
我正在从 Outlook 帐户检索邮件。我正在尝试从这些消息中获取内联文件和附件。
$graph = new Graph();
$graph->setAccessToken($this->getAccessToken());
$messageQueryParams = array (
"\$select" => "subject,receivedDateTime,from,sentDateTime,body,toRecipients,sender,uniqueBody,ccRecipients,bccRecipients,attachments",
"\$orderby" => "receivedDateTime DESC",
"\$top" => "200"
);
$url = '/me/mailfolders/' . $folder . '/messages/delta';
$url_combiner = '?';
$getMessagesUrl = $url . $url_combiner . http_build_query($messageQueryParams);
$response = $graph->createRequest('GET', $getMessagesUrl)->execute();
$messages = $response->getResponseAsObject( \Microsoft\Graph\Model\Message::class );
foreach($messages as $msg) {
echo $msg->getHasAttachments();
}
此代码为 $msg->getHasAttachments(); 返回“null”;我希望它返回真或假。
我从这个文件夹下载的邮件既有内联附件也有邮件附件,所以我正在寻找两者的解决方案。
(非常感谢指向 MS Graph PHP SDK 文档中特定点的响应。)
解决方案
这是预期的行为,在您的情况下getHasAttachments()
方法返回null
,因为hasAttachments
它不包含在$select
查询选项中,因此它不是从服务器请求的。它需要明确包括在内,例如:
$messageQueryParams = array (
"\$select" => "hasAttachments,...",
//another params are omitted for clarity
);
然后可以像这样确定消息是否包含附件:
foreach($messages as $msg) {
if($msg->getHasAttachments() == true){
//...
}
提供的示例还有一个问题,要检索Message.attachments
引用属性(或关系属性),需要通过$expand
查询字符串参数而不是$select
(有关更多详细信息,请参阅官方文档)指定它,如下所示:
$messageQueryParams = array (
"\$expand" => "attachments",
//another params are omitted for clarity
);
然后可以像这样迭代附件集合:
foreach($messages as $msg) {
foreach($msg->getAttachments() as $attachment) {
//...
}
}
推荐阅读
- c# - Windows 窗体系统 FileWatcher C#
- spring - reactor.netty.http.client.PrematureCloseException:连接在响应期间过早关闭
- json - 为什么我的转换列由 JpaAttributeTypeInspection 标记并显示错误消息“'Basic' 属性类型不应是地图”?
- node.js - 在NodeJS中执行Ctrl-C时优雅地结束孩子
- excel - 将两个不同工作表中的 2 列转移到第三列
- android - ViewPager 内的片段中的 ScrollView 不滚动
- selenium - 量角器条件选择器
- reactjs - 对 this.props.history.push 使用流失败的反应类型检查
- c# - 如何在运行时执行 LINQ 查询 c#
- css - 如何在 bootstrap-vue 中覆盖工具提示的最大宽度