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
لعل الصورة التالية توضح الفكرة أكثر

عرفنا سابقًا أن في الـ 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

في البداية يجب أن نعرف أن جميع الـ 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
نكتفي بالتلخيص الى هنا و لعلنا نكمل في مقالة أخرى إن شاء الله
ختامًا، أود الإشارة بأن هذه المقالة تمّت كتابتها خلال دراسة هذه المواضيع، فكل ما تم ذكره هنا قد يحتمل الخطأ، لكن بالإمكان العودة إلى المراجع التي إستندت عليها هذه المقالة
وإن أصبت فمن توفيق الله وحده، وإن أخطأت فمن نفسي والشيطان