2

そのため、php-ewsライブラリを使用して Microsoft Office 365 Exchange メール アカウントに接続し、メールを読んでいます。接続に成功し、必要なメールのリストを取得できました。

問題は、メッセージ本文を取得できないことです。Exchange Web サービスに関するドキュメントを読むと、ボディは FindItem() では取得できず、GetItem() でのみ取得できると書かれていますが、それで問題ありません。

現在、私が目にしている問題は次のとおりです。これについて見つけることができるすべての可能な例を試しましたが、コードにエラーはなく、「Soap クライアントが 404 のステータスを返しました」とだけ表示されます。

誰かが解決策を探す場所を知っている場合は、教えてください。

編集:

$ews = new Client('outlook.office365.com/EWS/OData/Me/Inbox/Messages', '###', '###', ClientEWS::VERSION_2010_SP2);

    $request = new FindItemType();

    $request->ItemShape = new ItemResponseShapeType();
    $request->ItemShape->BaseShape = DefaultShapeNamesType::DEFAULT_PROPERTIES;
    $request->ItemShape->BodyType = BodyTypeResponseType::BEST;

    $request->Traversal = ItemQueryTraversalType::SHALLOW;

    $request->ParentFolderIds = new NonEmptyArrayOfBaseFolderIdsType();
    $request->ParentFolderIds->DistinguishedFolderId = new DistinguishedFolderIdType();
    $request->ParentFolderIds->DistinguishedFolderId->Id = DistinguishedFolderIdNameType::INBOX;

    // sort order
    $request->SortOrder = new NonEmptyArrayOfFieldOrdersType();
    $request->SortOrder->FieldOrder = array();
    $order = new FieldOrderType();
    // sorts mails so that oldest appear first
    // more field uri definitions can be found from types.xsd (look for UnindexedFieldURIType)
    $order->FieldURI = new PathToUnindexedFieldType();
    $order->FieldURI->FieldURI = 'item:DateTimeReceived';
    $order->Order = 'Ascending';
    $request->SortOrder->FieldOrder[] = $order;

    try{
        //getting list of all emails - works perfectly
        $result = $ews->FindItem($request);

        if ($result->ResponseMessages->FindItemResponseMessage->ResponseCode == 'NoError' && $result->ResponseMessages->FindItemResponseMessage->ResponseClass == 'Success') {
            $count = $result->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView;
            $request = new GetItemType();
            $request->ItemShape = new ItemResponseShapeType();
            $request->ItemShape->BaseShape = DefaultShapeNamesType::ALL_PROPERTIES;
            for ($i = 0; $i < $count; $i++){
                $message_id = $result->ResponseMessages->FindItemResponseMessage->RootFolder->Items->Message[$i]->ItemId->Id;

                $messageItem = new ItemIdType();
                $messageItem->Id = $message_id;
                $request->ItemIds->ItemId[] = $messageItem;
            }

            // Here is your response
            // It throws an error here with the message "Soap client returned status of 404"
            $response = $ews->GetItem($request);

            print_r($response);
        }
        //print_r($result);
    } catch(\Exception $e) {
        echo $e->getMessage();
    }
4

2 に答える 2

3

Office365 の新しい REST エンドポイントを使用しようとしているようです

'outlook.office365.com/EWS/OData/Me/Inbox/Messages'

しかし、作成しようとしている EWS SOAP リクエスト、EWS SOAP に使用する必要があるエンドポイントは

https://outlook.office365.com/EWS/Exchange.asmx

EWS/SOAP の代替として新しい REST インターフェイスの使用を検討することもできますが、その場合はhttps://dev.outlook.com/restapiに従って REST library.ouauth などを使用する必要があります。

于 2016-10-28T01:17:33.147 に答える