代码:
$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构建。
答案 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来测试这个,但我认为这就是解决问题的方法。