【问题标题】:Getting Single Mail via garethp/php-ews通过 garethp/php-ews 获取单个邮件
【发布时间】:2017-08-02 21:21:13
【问题描述】:

代码:

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

那么,我该怎么做呢?请求所有邮件并循环直到我再次找到 ID 不是一种选择。

我是否错误地使用了getMailItems()?如果有请指正。

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

或者是否有其他方法可以通过 ID 字符串查询单个邮件?或者,我会寻找查询的手动构建。

【问题讨论】:

    标签: php php-ews


    【解决方案1】:

    getMailItems 不采用 email id,而是采用 文件夹 id,它要求它是第一个参数的对象 ($folderId),您'正在给一个字符串。如果你去查看MailAPI::getMailItems 源代码,你就会明白为什么会出现这个错误。在line 91,我们看到:

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

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

    首先,尝试将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 来测试这个,但我认为这就是你要解决问题的方式。

    【讨论】:

    • @Shaeldon 您是否尝试将第一种方法的$data['id'] 更改为new API\Type\ItemIdType($data['id'])?您确定第二种方法也不会返回单个项目吗? $mail = $api->getItem(new API\Type\ItemIdType($data['id']));
    • 对你的评论:是的,我都试过了。我对您的答案进行了一些试验,并将其更改为: $newId = new API\Type\ItemIdType($data['id']); $mail = $api->getItem($newId);但是我收到'不能使用 garethp\ews\API\Type\MessageType 类型的对象作为数组'
    • ItemIdType 有一个toArray() 方法。尝试使用这样的$mail = $api->getItem($newId->toArray());
    • 算了,我是个白痴。你的代码工作正常,我在 die() 之前有一些其他的调试问题;
    • 感谢您的帮助,我会在大约 18 小时内尽可能奖励赏金
    猜你喜欢
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2015-07-06
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多