PHP-EWS 处理多个附件失败

标签 php exchangewebservices php-ews

我使用 James Armes's PHP-EWS library .

以下代码对单个附件工作正常,但对多个文件无效。

<?php
$msgRequest->MessageDisposition = 'SaveOnly';

$msgResponse = $ews->CreateItem($msgRequest);
$msgResponseItems = $msgResponse->ResponseMessages->CreateItemResponseMessage->Items;

// Create attachment(s)
$attachments = array();
$i = 0;
foreach ($message_details['attachment'] as $attachment) {
    $attachments[$i] = new EWSType_FileAttachmentType();
    $attachments[$i]->Content = file_get_contents($attachment['path'] . '/' . $attachment['file']);
    $attachments[$i]->Name = $attachment['file'];
    $i++;
}
//
// Attach files to message
$attRequest = new EWSType_CreateAttachmentType();
$attRequest->ParentItemId = $msgResponseItems->Message->ItemId;
$attRequest->Attachments = new EWSType_NonEmptyArrayOfAttachmentsType();
$attRequest->Attachments->FileAttachment = $attachments;

$attResponse = $ews->CreateAttachment($attRequest);
$attResponseId = $attResponse->ResponseMessages->CreateAttachmentResponseMessage->Attachments->FileAttachment->AttachmentId;

// Save message id from create attachment response
$msgItemId = new EWSType_ItemIdType();
$msgItemId->ChangeKey = $attResponseId->RootItemChangeKey;
$msgItemId->Id = $attResponseId->RootItemId;

// Send and save message
$msgSendRequest = new EWSType_SendItemType();
$msgSendRequest->ItemIds = new EWSType_NonEmptyArrayOfBaseItemIdsType();
$msgSendRequest->ItemIds->ItemId = $msgItemId;
$msgSendRequest->SaveItemToFolder = true;
$msgSendResponse = $ews->SendItem($msgSendRequest);
$response = $msgSendResponse->ResponseMessages->SendItemResponseMessage;
?>

$ews->SendItem() 返回此错误:

Uncaught SoapFault exception: [a:ErrorSchemaValidation] The request failed schema validation: The required attribute 'Id' is missing.

我在这里错过了什么?

最佳答案

在这里找到答案:

https://github.com/jamesiarmes/php-ews/issues/132

如果只有一个附件,Exchange 基本上不使用数组,因此需要进行额外检查以确定从何处获取 ID。

if(!is_array($attResponse->ResponseMessages->CreateAttachmentResponseMessage))
    $attResponseId = $attResponse->ResponseMessages->CreateAttachmentResponseMessage->Attachments->FileAttachment->AttachmentId;
else {
    $attResponseId = $attResponse->ResponseMessages->CreateAttachmentResponseMessage[0]->Attachments->FileAttachment->AttachmentId;
}

Exchange 使用与收件人相同的结构。我发现这不一致,但我确信它背后有一个原因。

我希望有人能从中受益。

关于PHP-EWS 处理多个附件失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26213725/

相关文章:

php - 在 Laravel Eloquent 中,为什么选择不正确(没有 where 条件)?

php - 我无法从 MYsql 检索图像并将其显示到表列

c# - 如何使用 OAuth 进行身份验证以访问 EWS API

java - 如何使用 EWS Java API 访问 MAPI 属性?

php - php-ews 中的 DistinguishedFolderId->Mailbox->EmailAddress 是什么?

javascript - PHP EWS 创建回调 token

php - 验证 php 中的 javascript 对象

php - Javascript 和 AJAX POST 之后使用 PHP 功能刷新浏览器

exchangewebservices - 使用 EWS 一次从 Exchange 2010 服务器获取所有通知

php - 使用 php-ews 回复邮件