MAPI over HTTP

السلام عليكم ورحمة الله وبركاته

المقالة هذه تشرح MAPI over HTTP ،

على الأغلب سيصادفك هذا الـ API في حال تعاملت مع الـ Exchange Server

المقالة بإذن الله ستكون تلخيص لبعض النقاط المذكورة في الورقة الخاصة بالـ MAPI over HTTP ، الورقة نُشرت من قبل فريق مايكروسوفت

أهدف لشرح النقاط الآتية :

  • مقدمة ، ماهو MAPI ؟
  • ماهو MAPI over HTTP وكيف يعمل ؟

بسم الله ، لنبدأ

مقدمة ، ماهو MAPI ؟

بدايةً، MAPI اختصار لـ Microsoft Messaging API (MAPI)

في كتاب Microsoft Windows Architecture Training (Training Kit) عرّفت مايكروسوفت MAPI بالنقاط الآتية :

The Windows operating system includes the Messaging Application Programming Interface (MAPI) that allows information from mail, fax, documents, and other systems to be accessible to users across an entire organization.

With the MAPI subsystem, you can easily add messaging features to any Windows-based application.

فـ MAPI هو API قامت بتطويره مايكروسوفت ضمن نظام التشغيل الخاص بها،

ماذا يقدّم هذا الـ API ؟

يتيح هذا الـ API للبرامج التي تعمل ضمن نظام الويندوز أن تكون messaging-aware أي أن البرنامج يستطيع التعامل أو التواصل مع Mail Server لجلب أو معالجة البيانات

ولا نقصد هنا فقط أن يكون البرنامج mail Client مثل الـ Outlook ، الـ Outlook هو أحد الأمثلة الشائعة لاستخدام هذا الـ API ، لكن مايكروسوفت طوّرت هذا الـ API ليتيح لأي تطبيق يعمل ضمن بيئتها من الوصول الى الـ Mail Server أو كما أسمتها مايكروسوفت أيضًا بالـMessaging System

وعلى ذكر الـ Messaging System ، في بيئة ويندوز يمثلها الـ Exchange Server

عرفنا الآن أن MAPI ماهو إلا نظام طوّرته مايكروسوفت لتتيح لتطبيقاتها أن تكون messaging-aware وتستطيع التواصل مع الـ Messaging System

فما هو الـ MAPI over HTTP ؟

ماهو MAPI over HTTP وكيف يعمل ؟

نعود الآن للورقة المعنيّة في هذه المقالة، نجد في الورقة التعريف الآتي

The Messaging Application Programming Interface (MAPI) Extensions for HTTP enable a client to access personal messaging data and directory data on a server by sending HTTP requests and receiving responses returned on the same HTTP connection.

إذًا MAPI over HTTP ماهو إلا إضافة أخرى طورتها مايكروسوفت حتى تتيح للتطبيقات إستخدام هذا الـ API لكن ضمن الـ HTTP Protocol

لعل الصورة التالية توضح الفكرة أكثر

1

عرفنا سابقًا أن في الـ MAPI system لدينا طرفان ، الـ Messaging System ونقصد به الـ Exchange Server والـ Messaging Client ولنأخذ الـ Outlook كمثال ولدينا أيضًا الـ API نفسه

فكيف ستبدو الصورة في حال انتقلنا الى الـ HTTP Protocol ؟

لو أكملنا القراءة في الورقة سنجد المعلومة الآتية

When the client initiates communication with the server, the server creates a virtual Session Context and returns a session context cookie to the client. Once established, the Session Context allows the client to perform operations on the server

نعرف من العبارة أعلاه أن في الـ MAPI over HTTP تُدار الـ Session عبر الـ Cookie

وبمجرّد أن يُتم الـ Client  الـ Authentication مع الـ Server سيتمكن من إجراء العمليات التي يريدها .. فما هي هذه العمليات ؟

الصورة التالية تلخّص كيف يتواصل الـ Client مع الـ Server في الـ MAPI over HTTP

2

في البداية يجب أن نعرف أن جميع الـ Requests التي يرسلها الـ Client هي عبارة عن POST Request كما تم ذكره في الورقة

All requests MUST use the POST method. POST supports uploading a request block and returning a response block.

وهذه الـ POST Requests تتبع الصيغة الآتية

    POST <Autodiscover-provided endpoint> HTTP/1.1
    Host: <URL of the host server>
    Content-Length: <length of REQUEST BODY>
    Content-Type: application/mapi-http
    X-RequestType: <?>
    X-RequestId: <id>
    X-ClientApplication:<client version>

    <REQUEST BODY>

و يتواصل الـ Client  مع الـ Server كالآتي :

1 - يبدأ الـ Client في البداية بإرسال Connect Request

هذا مثال على الـ Connect Request

    POST domain.com/mapi/emsmdb/?MailboxId=8f0a9c7c-fa0f-4b6f-bd9e-ea1c9d3b7e8c@domain.com HTTP/1.1
    Content-Type: application/mapi-http
    X-RequestType: Connect
    X-ClientInfo: {6F29FC82-34A0-40A1-A5A8-760E9D6BD9EB}:14.0.4760.1000
    X-ClientApplication: Outlook/14.0.4760.1000
    X-RequestId: {C715155F-2BE8-44E0-BD34-2960067874C8}:2
    X-RequestVersion: 2.0
    Content-Length: 32

    00000000000000000000000000000000

2 - يقوم الـ Client بإرسال EXECUTE Request

يبدو هذا الـ Request كالآتي :

    POST https://domain.com/mapi/emsmdb/?MailboxId=8f0a9c7c-fa0f-4b6f-bd9e-ea1c9d3b7e8c@domain.com HTTP/1.1
    Content-Type: application/mapi-http
    X-RequestType: Execute
    X-ClientInfo: {6F29FC82-34A0-40A1-A5A8-760E9D6BD9EB}:14.0.4760.1000
    X-ClientApplication: Outlook/14.0.4760.1000
    X-RequestId: {C715155F-2BE8-44E0-BD34-2960067874C8}:3
    X-RequestVersion: 2.0
    Content-Length: 32

    00000000000000000000000000000000

3 - وآخرًا سيقوم الـ Client بإرسال Disconnect Request  لإنهاء الإتصال مع الـ Server

سيكون الـ Request كالآتي :

    POST https://domain.com/mapi/emsmdb/?MailboxId=8f0a9c7c-fa0f-4b6f-bd9e-ea1c9d3b7e8c@domain.com HTTP/1.1
    Content-Type: application/mapi-http
    X-RequestType: Disconnect
    X-ClientInfo: {6F29FC82-34A0-40A1-A5A8-760E9D6BD9EB}:14.0.4760.1000
    X-ClientApplication: Outlook/14.0.4760.1000
    X-RequestId: {C715155F-2BE8-44E0-BD34-2960067874C8}:4
    X-RequestVersion: 2.0
    Content-Length: 32

    00000000000000000000000000000000

لعلك لاحظت أنه نستطيع تحديد نوع الـ Request بالنظر الى الـ X-RequestType Header

وسنجد في الـ X-ClientApplication Header معلومات عن الـ Messaging Client

نكتفي بالتلخيص الى هنا و لعلنا نكمل في مقالة أخرى إن شاء الله

ختامًا، أود الإشارة بأن هذه المقالة تمّت كتابتها خلال دراسة هذه المواضيع، فكل ما تم ذكره هنا قد يحتمل الخطأ، لكن بالإمكان العودة إلى المراجع التي إستندت عليها هذه المقالة

وإن أصبت فمن توفيق الله وحده، وإن أخطأت فمن نفسي والشيطان

المراجع