使用php-ews回复电子邮件

4

我正在使用php-ews来读取交换邮箱。然而,我想从收件箱中选择一封电子邮件并回复该电子邮件,包括电子邮件历史记录并发送响应。以下是我用于从收件箱获取特定电子邮件的代码。

$ews = new ExchangeWebServices($account_array['server'], $account_array['username'], $account_array['password'], ExchangeWebServices::VERSION_2010_SP1);
$message_id = 'AAMkADU3ZDdmZmY3LWI3OGMtNDRmMy1hYTdlLTBlZjkwOGE3NTU5MwBGAAAAAADkJRKCdlaES7sRqf3veO/UBwCgoREk6zyqQqi6KC/gJMy0AAAAvGoCAACgoREk6zyqQqi6KC/gJMy0AAAAvGpQAAA=';
$change_id = 'CQAAABYAAACgoREk6zyqQqi6KC/gJMy0AAAAvMEZ';

$request = new EWSType_GetItemType();
$request -> ItemShape = new EWSType_ItemResponseShapeType();
$request -> ItemShape -> BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES;

$request -> ItemShape -> BodyType = EWSType_BodyTypeResponseType::HTML;

$body_property = new EWSType_PathToUnindexedFieldType();
$body_property -> FieldURI = 'item:Body';
$request -> ItemShape -> AdditionalProperties = new EWSType_NonEmptyArrayOfPathsToElementType();
$request -> ItemShape -> AdditionalProperties -> FieldURI = array($body_property);

$request -> ItemIds = new EWSType_NonEmptyArrayOfBaseItemIdsType();
$request -> ItemIds -> ItemId = array();

$message_item = new EWSType_ItemIdType();
$message_item -> Id = trim($message_id);
$request -> ItemIds -> ItemId[] = $message_item;

$response = $ews -> GetItem($request);
//print '<pre>' . print_r($response, true) . '</pre><hr/>';
$message = $response -> ResponseMessages -> GetItemResponseMessage -> Items -> Message;

print '<pre>' . print_r($message, true) . '</pre><hr/>';

现在我已经收到了需要回复的信息,那么如何进一步起草回复信息并为此电子邮件创建一个回复项。
我已经在谷歌上搜索了这个问题,但没有找到答案。我花了好几个小时研究php-ews类,看了EWSType_ReplyAllToItemType、EWSType_PostReplyItemType、EWSType_PostReplyItemBaseType等代码,但是不知道如何使用它们。
请帮忙!任何帮助都将不胜感激。
我相信对这篇文章的任何回复都会有所帮助,因为没有论坛讨论这个问题。 :)
谢谢。

2个回答

3

最终找到了如何使用PHP-EWS回复电子邮件的答案。

首先,我们需要修改EWSType / MessageType.php文件,并在类结束之前添加以下行:

public $NewBodyContent;

回复功能的实现如下:

Public function replyToMessage($id,$changeKey)
    {
        $ews = new ExchangeWebServices($this->server_url, $this->username, $this->password, ExchangeWebServices::VERSION_2010_SP1);

        //$msg = new EWSType_ReplyAllToItemType();
        $msg = new EWSType_MessageType();

//In Case you need to add anyone in CC
        $cc = new EWSType_ArrayOfRecipientsType();
        $cc->Mailbox = new EWSType_EmailAddressType();
        $cc->Mailbox->EmailAddress = 'emailaddresshere';
        $cc->Mailbox->Name = 'displaynamehere';
        $msg->CcRecipients = $cc;

        $msg->ReferenceItemId = new EWSType_ItemIdType();
        $msg->ReferenceItemId->Id = $id;
        $msg->ReferenceItemId->ChangeKey = $changeKey;

        $msg->NewBodyContent = new EWSType_BodyType();
        $msg->NewBodyContent->BodyType = 'HTML';
        $msg->NewBodyContent->_ = 'HTML Content Goes Here';

        $msgRequest = new EWSType_CreateItemType();
        $msgRequest->Items = new EWSType_NonEmptyArrayOfAllItemsType();
        $msgRequest->Items->ReplyAllToItem = $msg;
        $msgRequest->MessageDisposition = 'SendAndSaveCopy';
        $msgRequest->MessageDispositionSpecified = TRUE;

        $response = $ews->CreateItem($msgRequest);

        return $response->ResponseMessages->CreateItemResponseMessage->ResponseCode;

    }

这将向指定的ID和ChangeKey发送回复。

1

嘿,bencoder,感谢您的及时回复。我们还有其他方法可以做到这一点吗?我不想手动包含先前电子邮件的正文! - Guns
1
我不知道是否还有其他方法,因为我不熟悉php-ews,这只是一个帮助你前进的想法/建议。我怀疑是否有任何特定的功能可以自动包含以前的正文。这并没有什么意义,因为这将是一个依赖于客户端的功能。 - bencoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接