通过garethp / php-ews获取单个邮件

时间:2017-07-31 08:03:31

标签: php php-ews

代码:

$api = MailAPI::withUsernameAndPassword($server, $username, $password);
$folder1 = $api->getFolderByDisplayName('PubFolder', DistinguishedFolderIdNameType::PUBLICFOLDERSROOT);
$subFolder1 = $api->getFolderByDisplayName($data['mailfolder'], $folder1->getFolderId());
$api->setFolderId($subFolder1->getFolderId());

$mail = $api->getMailItems($data['id']);

错误:Exception 'Error' with message 'Call to a member function toXmlObject() on string'

描述:我想通过id获取单个邮件项,但是因为我需要从不同的页面调用它并通过JS加载内容我无法发送我可以获得的MailID对象在foreach中使用$singleMail->getItemId()。所以我必须使用$singleMail->getItemId()->getId()将ID作为字符串生成,但是当尝试通过ID获取邮件时,我得到了上述错误。

那么,我该怎么办?请求所有邮件并循环直到我再次找到ID。

我错误地使用getMailItems()了吗?如果是这样,请纠正我。

我能以某种方式创建正确的ID对象吗?

或者是否有另一种通过ID-String查询单个邮件的方法?我可以选择查找查询的manuel构建。

1 个答案:

答案 0 :(得分:2)

getMailItems不会使用电子邮件ID ,而是文件夹ID ,并且它要求它为对象($folderId)第一个参数,你给了一个字符串。如果您去查看MailAPI::getMailItems来源,您就会明白为什么会收到该错误。在line 91我们看到:

'FolderId' => $folderId->toXmlObject()

你的代码试图从字符串中调用成员函数。我搜索了一下,我认为您可以使用可选参数getMailItems通过ID $options来过滤邮件。

首先,尝试将ItemId设置为具有邮件ID的字符串值,如下所示:

$mail = $api->getMailItems($subFolder1->getFolderId(), [
    'ItemIds' => [
        'ItemId' => $data['id'] // Or (new API\Type\ItemIdType($data['id']))
    ]
]);

如果这不起作用,请尝试使用以下代码再次搜索邮件:

$mail = $api->getItem(new API\Type\ItemIdType($data['id']));

我没有EWS来测试这个,但我认为这就是解决问题的方法。