نظرة عامة للمطورين على REST API من TrekMail
تعرّف على آلية عمل REST API من TrekMail، بما يشمل مصادقة رموز Bearer، والوصول حسب الخطة، وحدود المعدل، وتنسيقات الاستجابة.
تفاصيل المقال
النوع والصعوبة والخطط ومعلومات آخر تحديث.
▼
تفاصيل المقال
النوع والصعوبة والخطط ومعلومات آخر تحديث.
- النوع
- مرجع
- الصعوبة
- متوسط
- الخطط
- Nano · Starter · Pro · Agency
- آخر تحديث
- 10 أكتوبر 2026
افتح TrekMail في Claude، واختر Connect وسجّل الدخول واسمح بالوصول. لا تحتاج إلى إنشاء رمز API. يمكنك مراجعة الصلاحيات أو قطع الاتصال في وكلاء الذكاء الاصطناعي وواجهة API، الرموز، التطبيقات المتصلة.
علامتك الخاصة White Label: استخدم عنوان MCP المعروض في لوحة علامتك وسمّ الموصل باسمها. أضفه كـ custom connector؛ صفحة TrekMail العامة تسجّل الدخول عبر TrekMail ولا تحل محل اتصال علامتك.
تتيح لك TrekMail API إدارة النطاقات وصناديق البريد وإعادة التوجيه وDNS وترحيل البريد الإلكتروني وعمليات بريد الويب من عميل HTTP أو وكيل ذكاء اصطناعي. ويشمل ذلك قراءة البريد وإرساله، والمسودات، والجدولة، والمجلدات، وجهات الاتصال، والتقويمات، والهويات، والقوالب، والمرسلين المحظورين. تستخدم الطلبات المصادق عليها رمز Bearer، وتكون الاستجابات بصيغة JSON، ويجري تدقيق نشاط API.
قراءة البريد بمفتاح واحد
في خطتي Pro وAgency، اختر قراءة البريد عند إنشاء مفتاح API. الصلاحية الصريحة هي mailboxes:messages:read؛ أما mailboxes:read فتعرض العناوين وبيانات الاتصال فقط. اختيار جميع الصناديق يشمل الحالية والمستقبلية، ويمكن قصر الوصول على نطاقات وصناديق محددة. لا تحصل المفاتيح الحالية على صلاحيات جديدة تلقائيًا.
استخدم مفتاح الحساب مع مسارات GET أدناه. لا يزال الإرسال والحذف والتعديل يتطلب بيانات وصلاحيات رسائل منفصلة. يقبل MCP المستضاف OAuth وليس tm_live_ أو tm_msg_. يوضح خطأ نوع الرمز للوكيل المسار أو طريقة التفويض الصحيحة.
GET /api/v1/mailboxes/{mailbox}/messages
GET /api/v1/mailboxes/{mailbox}/folders
GET /api/v1/mailboxes/{mailbox}/messages/{uid}
GET /api/v1/mailboxes/{mailbox}/messages/{uid}/raw
GET /api/v1/mailboxes/{mailbox}/messages/{uid}/attachments/{index}
ما الذي تحصل عليه
- REST API v1 بتنسيق JSON للطلبات والاستجابات.
- مصادقة رمز Bearer: لا ملفات تعريف ارتباط أو جلسات لاستدعاءات API المصادق عليها.
- مفاتيح تكرار آمن في عمليات الكتابة التي تتطلبها، لمنع تكرار العمل أثناء إعادة المحاولة.
- تحديد المعدل لكل رمز مع ترويسات
Retry-After. - سجل تدقيق ظاهر في لوحة التحكم ضمن وكلاء الذكاء الاصطناعي وAPI، سجل التدقيق.
- خادم MCP مزود بكتالوج مصفى وفق بيانات الاعتماد والنقل وإعدادات الأمان للاتصال الحالي. ولذلك لا يرى اتصال المشروع المحدود إلا الأدوات التي يمكنه استخدامها.
- أسماء النطاقات المستعارة: اربط عناوين مخصصة للاستقبال فقط على نطاق ثانوي بالأجزاء المحلية نفسها على نطاق أساسي، مع حالات تسليم محفوظة مقابل نشطة وإزالة آمنة. راجع أسماء النطاقات المستعارة عبر API وMCP.
- بنية الرمزين: رموز عمليات منفصلة للبنية التحتية، ورموز رسائل لعمليات البريد الإلكتروني الكاملة مثل القراءة والإرسال وإنشاء المسودات والجدولة وجهات الاتصال والتقويمات والهويات والقوالب والمجلدات.
- رؤى قابلية التسليم والارتدادات الصادرة: احصل من لوحة التحكم على ملخص الرسائل المرسلة والمسلّمة والارتدادات الدائمة والمؤقتة، إلى جانب رموز SMTP واستجاباته لكل مستلم. راجع قابلية التسليم والارتدادات.
- كلمات مرور تطبيقات البريد: أدر كلمات مرور منفصلة لـIMAP وSMTP والتقويمات وجهات الاتصال، وحدد كلمات المرور التي تقبلها تطبيقات البريد. لا تحل هذه محل رموز Bearer لواجهة API أو رموز Message API. راجع كلمات مرور تطبيقات البريد عبر API وMCP.
- استخدام مساحة صندوق البريد: تعرض
list_mailboxesوget_mailboxالقيمused_mbوquota_mbوallocation_mbوis_pooled، ليتمكن الوكيل من اكتشاف صناديق البريد التي تقترب من حدها دون الوصول إلى لوحة التحكم. - إدارة White Label: افحص الإعداد، وأدر العلامة التجارية لكل نطاق، وادع العملاء، وتحكم في الأدوار والنطاقات، وعلّق الوصول أو استعده، وراجع النشاط عبر API أو MCP. راجع دليل العلامة التجارية ودليل إدارة الفريق.
Drive API وأتمتة الملفات
يعد Drive جزءا من واجهة API العامة. وهو يغطي مساحات Account Drive وDrive الخاصة بصناديق البريد، والاستخدام، وتصفح المجلدات، ورفع الملفات، وإدارة الملفات والمجلدات، وسلة المحذوفات، والإجراءات الجماعية، وروابط المشاركة العامة، وإدارة كلمات مرور أجهزة المزامنة، وحالة إضافة Drive Storage للقراءة فقط.
يستخدم Drive أحد عشر نطاقا لرمز العمليات: drive:account:read وdrive:account:write وdrive:account:share وdrive:account:purge وdrive:mailbox:read وdrive:mailbox:write وdrive:mailbox:share وdrive:mailbox:purge وdrive:addon:read وdrive:devices:read وdrive:devices:write. تظل إجراءات فوترة إضافة Drive وشرائها وتغيير حجمها وإلغائها متاحة عبر لوحة التحكم فقط، ولا تعرض كعمليات كتابة عبر API أو MCP.
ابدأ بـنظرة عامة على Drive API أو البدء السريع مع Drive API.
بنية الرمزين
تستخدم API نوعين مستقلين من الرموز. يمكنك استخدام أحدهما أو كليهما حسب احتياجاتك:
| نوع الرمز | البادئة | ما الذي يتيحه |
|---|---|---|
| رمز العمليات | tm_live_ |
أدوات الحساب والبنية التحتية: White Label والنطاقات وDNS وصناديق البريد والدعوات وDrive وعمليات الترحيل وSMTP والتذاكر والفوترة وCloudflare |
| رمز الرسائل | tm_msg_ |
عمليات بريد الويب: الرسائل والمجلدات والمرفقات والمسودات والإرسال المجدول والإبلاغ عن الرسائل المزعجة وغير المزعجة والإجراءات الجماعية وجهات الاتصال ومجموعاتها والتقويم ومساعدات الإنشاء والهويات والقوالب والمرسلون المحظورون |
لرموز العمليات ورموز الرسائل نطاقات وحدود معدل منفصلة. ويمكن لوكيل واحد استخدام الرمزين في الوقت نفسه من خلال إعدادهما في بيئة خادم MCP.
تتوفر رموز الرسائل في خطتي Pro وAgency.
قبل أن تبدأ
- تتيح جميع الخطط الوصول إلى API:
- Nano: أداة التحقق من البريد الإلكتروني. أضف إضافة Drive Storage للوصول الكامل إلى Drive API وMCP.
- Starter: وصول كامل إلى Drive وأداة التحقق من البريد الإلكتروني، ووصول للقراءة فقط إلى بقية أقسام البنية التحتية. استخدم لوحة التحكم لإجراءات الكتابة فيها.
- Pro / Agency: وصول أساسي كامل إلى API، بما في ذلك رموز الرسائل. تضاف نطاقات White Label أثناء نشاط الفترة التجريبية أو الإضافة المدفوعة.
- هل توصل وكيل ذكاء اصطناعي؟ أضف
https://trekmail.net/mcpكخادم MCP بعيد في أي عميل متوافق. وإذا كان يدعم التفويض عبر المتصفح، فلن تحتاج إلى رمز يدوي. راجع توصيل وكلاء الذكاء الاصطناعي (MCP) لمعرفة خيارات الاتصال البعيد وCLI وسطح المكتب والجسر والاستضافة الذاتية. - هل تكتب تكاملك الخاص؟ أنشئ رمز
tm_live_ضمن وكلاء الذكاء الاصطناعي وAPI، الرموز، إنشاء رمز وأرسله بصيغةAuthorization: Bearer …. راجع إنشاء رموز API وإدارتها. - هل أنت جديد على API؟ انقر على بدء الجولة أعلى صفحة وكلاء الذكاء الاصطناعي وAPI للاطلاع على شرح موجز لطرق الاتصال وإدارة الرموز والتطبيقات المتصلة وسجل التدقيق.
آلية عمل المصادقة
يجب أن يتضمن كل طلب رمزك في ترويسة Authorization:
Authorization: Bearer tm_live_abc123...
تبدأ رموز العمليات بـtm_live_ وتبدأ رموز الرسائل بـtm_msg_. يعرض كلاهما مرة واحدة عند الإنشاء ولا يمكن عرضهما مجددا.
إذا كان الرمز مفقودا أو ملغى أو منتهي الصلاحية، فستعيد API الرمز 401 مع رمز الخطأ unauthenticated.
عنوان URL الأساسي وتحديد الإصدارات
توجد جميع نقاط النهاية ضمن:
https://trekmail.net/api/v1
يظهر عنوان URL الأساسي في لوحة تحكم وكلاء الذكاء الاصطناعي وAPI ضمن المرجع السريع. يظهر الإصدار في مسار URL. وعند تقديم v2، إن حدث ذلك، سيستمر v1 في العمل.
تنسيق الاستجابة
تعيد الاستجابات الناجحة JSON مع مفتاح data للمورد الفردي أو القائمة المقسمة إلى صفحات:
{
"data": [
{ "id": 1, "domain": "example.com", "status": "active" }
],
"links": { "next": "...", "prev": null },
"meta": { "current_page": 1, "last_page": 1, "total": 1 }
}
تتبع استجابات الأخطاء بنية موحدة:
{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired API token",
"hint": "Check that your token is correct and has not been revoked.",
"request_id": "req_abc123",
"retryable": false
}
}
معرّفات الطلبات
تتضمن كل استجابة ترويسة X-Request-Id. ويمكنك أيضا تمرير معرّفك عبر X-Request-Id في الطلب. سيعاد إليك ويسجل في مسار التدقيق.
حدود المعدل
يطبق حد معدل لكل دقيقة على كل رمز. وعند بلوغ الحد، تعيد API الرمز 429 مع ترويسة Retry-After التي تحدد موعد إعادة المحاولة.
للعمليات المدمرة، أي طلبات الحذف، حد يومي إضافي لكل رمز وفترة انتظار بين عمليات الحذف المتتالية.
لعمليات كتابة الترحيل، البدء والإلغاء وإعادة المحاولة، حد مخصص قدره 10 طلبات في الدقيقة لكل رمز، إلى جانب سقف تزامن على مستوى الخادم يعيد 503 عندما تعمل عمليات ترحيل كثيرة عالميا.
تستخدم رموز الرسائل حدودا منفصلة. القيم الافتراضية هي 30 طلب قراءة في الدقيقة لكل رمز، و60 طلب إرسال في الدقيقة لكل رمز، و5,000 قراءة ناجحة يوميا لكل رمز، و100 عملية إرسال عبر API يوميا لصندوق بريد واحد. ولعداد أمان إرسال ثان حد افتراضي قدره 500 لكل رمز يوميا، وعادة يطبق حد صندوق البريد الأقل أولا. لا تحل إجراءات حماية API هذه محل حدود SMTP المُدار لخطتك أو حدود مزود خارجي.
التكرار الآمن
تتطلب نقاط النهاية التي تغير الحالة والمعلّمة بأنها آمنة التكرار ترويسة Idempotency-Key. ويشمل ذلك عمليات الإنشاء والتحديث والإرسال والحذف التي قد يؤدي تكرارها تلقائيا إلى ازدواج العمل. لا تتطلب إجراءات POST الشبيهة بالقراءة، مثل اكتشاف المزود أو اختبار الاتصال، هذه الترويسة؛ تحقق من جدول نقاط النهاية أو مواصفات OpenAPI. وإذا أرسلت المفتاح نفسه مع النص نفسه، تعيد API الاستجابة الأصلية دون إنشاء نسخ مكررة. ويُستثنى من ذلك إرسال الرسائل إذا فشل تسليمها (بسبب حد إرسال مثلا): عندها لا تعيد API الاستجابة 202 السابقة، فيمكن إرسال الرسالة نفسها لاحقا بالمحتوى نفسه. وإذا كنت تمرر معرّفك الخاص عبر X-Request-Id، فاستخدم معرّفا جديدا لهذه المحاولة: إذ تعدّ API أيضا الإرسال من صندوق البريد نفسه بقيمة X-Request-Id نفسها تكرارا، فلا يعيد المعرّف القديم إلا التسليم الأصلي الفاشل، ولا يُرسل شيء. أما إعادة محاولة إرسال ما زال معلقا أو تم تسليمه فتحصل على الاستجابة الأصلية كما كانت.
Idempotency-Key: create-mailbox-alice-2024
إذا أرسلت المفتاح نفسه مع نص مختلف، تعيد API الخطأ 409 Conflict.
تخصيص مساحة صندوق البريد
تقبل كل نقطة نهاية تنشئ صندوق بريد أو دعوة، POST /api/v1/mailboxes و/api/v1/mailboxes:bulk و/api/v1/mailboxes/invites و/api/v1/mailboxes/invites:bulk، عددا صحيحا اختياريا باسم storage_allocation_mb.
| القيمة | المعنى |
|---|---|
محذوفة (أو null) |
يستخدم صندوق البريد مجموعة الحساب المشتركة، وهذا هو الإعداد الافتراضي. |
| عدد صحيح موجب (MB) | صندوق البريد مخصص. يقتطع ذلك المقدار بالضبط من مجموعة الحساب لهذا الصندوق وحده. |
يجري التحقق من التخصيصات مقابل المجموعة النشطة بعد طرح صناديق البريد المخصصة الحالية والدعوات المخصصة المعلقة. وتتحقق نقاط النهاية الجماعية أيضا من مجموع التخصيصات في الدفعة، وترفض الدفعة بأكملها مع 422 storage_pool_exceeded إذا كانت ستتجاوز السعة. تتجدد المجموعة عند حذف صندوق بريد مخصص، أو استرداد دعوة، حيث ينتقل التخصيص إلى صندوق البريد الجديد، أو انتهاء صلاحية دعوة معلقة.
بالنسبة إلى الدعوات، يسجل التخصيص على رمز الوصول وينسخ إلى صندوق البريد الجديد وقت الاسترداد. وإذا لم تعد المجموعة تستوعب التخصيص المطلوب وقت الاسترداد، مثلا لأن مسؤولا آخر زاد تخصيصه المخصص في هذه الأثناء، فإن الاسترداد يخفض بسلاسة صندوق البريد الجديد إلى الوضع المشترك بدلا من الفشل، ويرى المستلم إشعارا في صفحة النجاح.
تتبع صناديق البريد العادية الجديدة، بما فيها الإنشاء الجماعي والدعوات والإنشاء بواسطة وكلاء الذكاء الاصطناعي، الإعداد إعدادات الحساب > صناديق البريد الجديدة > تحتاج تطبيقات البريد إلى كلمات مرور التطبيقات المفعّل افتراضيًا. لا يؤدي تغييره إلى تغيير الصناديق الموجودة. يمكن لـPOST /api/v1/mailboxes اختيار client_auth_mode بالقيمة app_password_only أو password_or_app_password؛ وإذا أُغفل الحقل، يُطبّق إعداد الحساب. تعرض موارد قائمة الصناديق وتفاصيلها client_auth_mode وapp_passwords_count (كلمات مرور التطبيقات النشطة). لا تملك الصناديق المشتركة كلمات مرور تطبيقات أو وضع تسجيل دخول خاصًا بها.
أدوات MCP الست لإدارة كلمات مرور التطبيقات هي list_mailbox_app_passwords، create_mailbox_app_password، rotate_mailbox_app_password، revoke_mailbox_app_password، set_mailbox_client_auth_mode، update_account. update_account: عيّن new_mailbox_client_auth_mode للصناديق المستقبلية؛ تحتفظ الصناديق الحالية بوضعها. يتطلب mailboxes:write ورمز صاحب الحساب أو موصله دون قيود على الموارد، وTREKMAIL_ALLOW_DESTRUCTIVE=true في stdio المستضاف ذاتيا.
وصول صندوق البريد إلى Drive
يحمل كل صندوق بريد مستوى drive_access يحدد مقدار ما يصل إليه مستخدمه من Drive في بريد الويب. يظهر المستوى في مورد صندوق البريد ويمكن تعيينه عبر PATCH /api/v1/mailboxes/{id} أو، لعدة صناديق دفعة واحدة، عبر POST /api/v1/mailboxes:drive-access.
| القيمة | المعنى |
|---|---|
full |
كل شيء: علامة تبويب Drive والرفع والمشاركة والبحث عن الملفات والمزامنة مع الكمبيوتر. وهذا هو الإعداد الافتراضي. |
attachments_only |
لا Drive في بريد الويب ولا مزامنة. يظل الإرسال متاحا، ويرسل الملف الذي يتجاوز حد المرفقات كرابط تنزيل، وتحذف تلك النسخة بعد مدة الاحتفاظ. |
disabled |
لا Drive، ولا يمكن إرفاق ملف يتجاوز الحد على الإطلاق. |
مساحة التخزين مشتركة على مستوى الحساب، ولذلك يحدد هذا الخيار مقدار ما يستطيع شخص واحد ملؤه من تلك المجموعة بالملفات.
تعليق تسجيل الدخول إلى صندوق البريد
يمكن تعليق تسجيل الدخول إلى صندوق بريد مع استمرار استلامه للبريد: يرفض بريد الويب وIMAP وSMTP وكلمات مرور الأجهزة، وتنتهي الجلسات المفتوحة، لكن التسليم لا يتأثر، فلا يرتد شيء وتنتظر الرسائل حتى استعادة تسجيل الدخول. اضبطه عبر POST /api/v1/mailboxes/{id}:suspend-login ومعه :resume-login، أو لعدة صناديق عبر POST /api/v1/mailboxes:login-access.
يعرض مورد صندوق البريد الحالة في login_suspended وlogin_suspended_at وlogin_suspended_reason. اقرأ login_suspended لمعرفة ما إذا كان الشخص يستطيع تسجيل الدخول، وstatus لمعرفة ما إذا كان صندوق البريد نفسه يعمل. يبقى الصندوق المعلق active لأنه ما زال يستقبل البريد. أما :pause فهو مختلف: يضبط status على disabled ويوقف التسليم أيضا.
يلغي تعليق تسجيل الدخول جميع كلمات مرور التطبيقات نهائيًا. ولا تعيدها استعادة تسجيل الدخول. كما تُلغى جميعها عندما يعيّن مسؤول كلمة مرور جديدة للصندوق من لوحة التحكم أو API أو وكيل ذكاء اصطناعي، وعند استرداد كلمة المرور أو التحويل إلى صندوق مشترك أو النقل إلى المحذوفة مؤخرًا. ولا تعيدها استعادة صندوق محذوف.
راجع تعليق تسجيل الدخول إلى صندوق البريد عبر API.
تقبل نقطة النهاية الجماعية محددا واحدا بالضبط من mailbox_ids أو domain_id أو all، وتعيد ما نفذته:
{ "data": { "drive_access": "attachments_only", "matched": 24, "updated": 21, "skipped_shared": 3 } }
domain_id هو المحدد المناسب عندما يمثل النطاق عميلا واحدا. تعد صناديق البريد الموجودة بالفعل على المستوى المطلوب ضمن matched لا updated، ولذلك يمكن تكرار الاستدعاء بأمان.
ترفض صناديق البريد المشتركة في نقطة النهاية الفردية مع 422 drive_access_not_applicable، وتتجاوزها نقطة النهاية الجماعية وتحسبها: فليس لها مستخدم بريد ويب خاص بها، بل يفتحها الأعضاء بمستوياتهم، ولن تغير قيمة مخزنة في صف الصندوق المشترك شيئا.
ينطبق القيد على API والواجهة معا. لا تظهر مساحة Drive لصندوق البريد المقيد في GET /api/v1/drive/spaces، وتجيب ملفاته بالرمز 404 عند طلبها بالمعرّف، ولا يمكن إنشاء جهاز مزامنة له.
عناوين إعادة التوجيه
تعيد GET /api/v1/domains/{id}/forwarding-addresses أكثر من القائمة، لأن أمرين يتعلقان بعنوان إعادة التوجيه لا يظهران في العنوان نفسه:
{
"data": [ { "id": 8, "address": "sales@acme.com", "local_part": "sales",
"domain_id": 4, "recipients": ["team@example.net"], "is_active": true } ],
"limits": { "used": 1, "max": 100, "recipients_per_address": 15 },
"delivery": { "active": true, "requires_plan": "pro",
"paused_until": null, "paused_reason": null }
}
- يطبق
limits.maxلكل نطاق ويعتمد على الخطة: 100 في Pro، و300 في Agency، و25 محفوظة ولكن غير نشطة في Nano أو Starter. - يوضح
delivery.activeما إذا كانت هذه القواعد تنقل البريد الآن. تكون قيمتهfalseفي خطة أدنى منrequires_plan، وتكونfalseأثناء تعيينpaused_until، أي عندما تجاوز الحساب معدل الإرسال بالساعة؛ راجع حدود الإرسال لكل خطة. يمكن أن تكون القاعدةis_active: trueومع ذلك لا تسلّم، لذا اقرأdeliveryوليسis_activeفقط قبل الإبلاغ بأن إعادة التوجيه تعمل.
يسمح بالإنشاء في خطة لا تستطيع التسليم، ويعيد 201: تحفظ القاعدة وتبدأ العمل عند الترقية. وهذا يماثل لوحة التحكم التي تعرض تلك القواعد كمحفوظة وغير نشطة.
تعود حالات الرفض بالرمز 422 مع تعيين error.code إلى validation_error أو limit_exceeded، وذلك إذا كان العنوان مستخدما بالفعل في النطاق، أو كان المستلم على النطاق نفسه مما ينشئ حلقة، أو لم يكن لنطاق المستلم MX عامل، أو امتلأت حصة النطاق.
يتطلب POST وDELETE في نقاط النهاية هذه مفتاح Idempotency-Key، بينما لا يتطلبه PATCH.
سجل التسليم
تعيد GET /api/v1/domains/{id}/forwarding-addresses/{addressId}/log ما حدث فعليا للبريد الحديث، بدءا بالأحدث:
{
"data": [
{ "id": 91, "occurred_at": "2026-07-27T09:12:04+00:00", "outcome": "delivered",
"from": "rfq@northgatesupply.com", "to": "sales@example.net",
"smtp_code": "2.0.0", "smtp_response": "250 2.0.0 OK" }
],
"address": "sales@acme.com",
"window": { "retention_days": 30, "max_events": 200 }
}
تكون outcome واحدة من delivered أو deferred، أي فشل مؤقت مع استمرار إعادة المحاولة، أو failed، أي أن خادم المستلم رفضها، أو blocked. وتعني الأخيرة أن مرشح الرسائل المزعجة لدينا أوقف الرسالة قبل إعادة التوجيه، فلم تصل إلى المستلم أصلا. ومعاملة blocked كارتداد ستدفع شخصا إلى ملاحقة خادم الاستلام بسبب مشكلة حدثت لدينا.
limit بين 1 و200، والقيمة الافتراضية 100، هو المعامل الوحيد. وتمثل النافذة مدة الاحتفاظ للخطة: 30 يوما في Agency و7 أيام في غيرها. ولا توجد أحداث أقدم للاستعلام عنها لأن أحداث إعادة التوجيه تحذف دوريا.
صناديق البريد المشتركة للفريق
للصندوق المشترك وارد فريق خاص به. can_read هي قراءة وcan_send هي إرسال باسم. فتح المجلدات المشتركة يحتاج إلى قراءة، والإرسال من الصندوق عبر Message API يحتاج إلى الصلاحيتين. لا توجد كلمة مرور مشتركة أو دخول منفصل أو أدوار للأعضاء.
تعيد GET /api/v1/mailboxes وGET /api/v1/mailboxes/{id} الآن mailbox_type بقيمة "user" أو "shared"، والقيمة المنطقية is_shared، كما تتضمن صناديق البريد المشتركة shared_member_count. استخدم هذه الحقول لتمييز صندوق الفريق عن الصندوق العادي قبل استدعاء نقاط نهاية الأعضاء.
| نقطة النهاية | الطريقة | النطاق المطلوب | ما الذي تفعله |
|---|---|---|---|
/api/v1/mailboxes/{id}/members |
GET | mailboxes:read |
تسرد أعضاء صندوق بريد مشترك، ولكل منهم member_mailbox_id وemail وcan_read وcan_send وaccess (read_send, read_only, send_only) |
/api/v1/mailboxes/{id}/members |
POST | mailboxes:write |
إضافة عضو بالنص {member_mailbox_id, can_read?, can_send?}. القيمة الافتراضية لكلا الإذنين هي true. |
/api/v1/mailboxes/{id}/members/{member} |
PATCH | mailboxes:write |
تغيير الوصول؛ {can_read?, can_send?, custom_label?}. يمكن إيقاف قراءة فقط عند توفر الوصول للإرسال فقط. |
/api/v1/mailboxes/{id}/members/{member} |
DELETE | mailboxes:write |
إزالة عضو؛ يجب أن يحتفظ شخص واحد على الأقل بصلاحية قراءة. |
/api/v1/shared-mailboxes |
POST | mailboxes:create |
تنشئ صندوق بريد مشتركا، بالنص {domain_id, local_part, display_name, member_mailbox_ids[], storage_shared?, storage_mb?} |
/api/v1/mailboxes/{id}/convert-to-shared |
POST | mailboxes:write |
تحول صندوق بريد موجودا إلى مشترك، بالنص {member_mailbox_ids[]}، وتغير كلمة المرور القديمة حتى لا يعود قادرا على تسجيل الدخول؛ وتعيد 202 conversion_pending مع إعادة محاولة تلقائية إن لم تتأكد مزامنة الخلفية بعد |
/api/v1/mailboxes/{id}/convert-to-regular |
POST | mailboxes:write |
تحول صندوق بريد مشتركا إلى عادي، بالنص {password}، وتزيل الأعضاء وتعين كلمة مرور جديدة لتسجيل الدخول |
تؤدي العودة إلى صندوق عادي إلى إزالة جميع الأعضاء. حدد كلمة مرور جديدة لبريد الويب، ثم أنشئ كلمات مرور تطبيقات لتطبيقات البريد في علامة الأمان.
قد يعيد تغيير الأذونات 422 no_access_left إذا كان سيوقف الإذنين، أو 422 send_only_disabled إذا كان التغيير المطلوب في صلاحية قراءة غير متاح، أو 422 last_reader إذا كان آخر قارئ نشط سيفقد الوصول. استخدم إزالة لإنهاء الوصول كله، وامنح عضوا نشطا آخر صلاحية قراءة قبل إزالة آخر قارئ. تعيد كل هذه الأخطاء أيضًا shared_mailbox_id، وmember_id للعضو الموجود، وhint يذكر الطلب الذي يصلح المشكلة.
تعيد نقاط نهاية الأعضاء استخدام نطاقي mailboxes:read وmailboxes:write الحاليين. ولا يوجد نطاق منفصل لصندوق البريد المشترك.
لاكتشاف الوصول الأصلي من تطبيق البريد، استدع GET /api/v1/mailboxes/{member_mailbox_id}/client-setup لصندوق بريد عضو عادي. يعرض كائن shared_mailboxes جاهزية الوصول الأصلي الدائمة، وجاهزية الإرسال الفعلية باسم العنوان وسببها، ومسارات Inbox والمرسل وArchive وJunk الدقيقة، والعمليات المسموح بها. تمثل can_send صلاحية إرسال باسم المعينة، وليست دليلا على جاهزية SMTP حاليا. لا تعيد نقطة النهاية كلمة مرور مطلقا. ويؤدي استدعاؤها بمعرّف صندوق البريد المشترك إلى 422 direct_login_unavailable لأن العنوان المشترك لا يمكنه المصادقة مباشرة.
تشمل shared_mailboxes.items[] العضويات التي لديها صلاحية قراءة عند تفعيل الوصول الأصلي للمجلدات فقط. delegated_send_addresses قائمة منفصلة بعناوين المرسل المتاحة للفريق في حقل من، ولكل منها id وemail وdisplay_name؛ قد تكون فارغة. لا تمنح وصولا للمجلدات ولا تؤكد جاهزية الإرسال. هذه العناوين ليست هويات Message API. استخدم الخوادم المعادة، بما في ذلك White Label، بدلا من نسخ اسم خادم المنصة.
تؤدي إزالة عضو أو تغيير can_read / can_send أو تحويل صندوق مشترك إلى عادي إلى مزامنة أذونات خادم البريد عند تمكين الوصول الأصلي. ويمكن إعادة محاولة استجابة 503 native_access_sync_failed، وهي تضمن بقاء العضوية أو الإذن أو نوع صندوق البريد دون تغيير بدلا من تطبيق العملية جزئيا.
نقاط النهاية المتاحة
لدى Drive مرجعه الخاص ولا يتكرر هنا، راجع نظرة عامة على Drive API. وتوصف نقاط نهاية SMTP على مستوى الحساب، المحفوظة للتوافق مع الإصدارات السابقة، ضمن توجيه SMTP لكل نطاق بدلا من إدراجها كنقاط حالية.
| نقطة النهاية | الطريقة | النطاق المطلوب |
|---|---|---|
/api/v1/domains |
GET | domains:read |
/api/v1/domains/{id} |
GET | domains:read |
/api/v1/domains/{id}/matching-addresses |
GET | domains:read |
/api/v1/domains/{id}/matching-addresses |
PUT | domains:write |
/api/v1/domains/{id}/matching-addresses |
DELETE | domains:write |
/api/v1/domains/{id}/dns-requirements |
GET | domains:dns:read |
/api/v1/domains/{id}/dns-recheck |
POST | domains:dns:recheck |
/api/v1/domains/{id}/spam-metrics |
GET | domains:read |
/api/v1/domains/{id}/spam-metrics/summary |
GET | domains:read |
/api/v1/domains/{id}/deliverability |
GET | domains:read |
/api/v1/domains/{id}/bounces |
GET | domains:read |
/api/v1/domains/{id}/signature |
GET | domains:read |
/api/v1/domains/{id}/forwarding-addresses |
GET | domains:read |
/api/v1/domains/{id}/forwarding-addresses/{addressId}/log |
GET | domains:read |
/api/v1/dns-checks/{id} |
GET | domains:dns:read |
/api/v1/mailboxes |
GET | mailboxes:read |
/api/v1/mailboxes |
POST | mailboxes:create |
/api/v1/mailboxes/{id} |
PATCH | mailboxes:write |
/api/v1/mailboxes/invites |
POST | mailboxes:invites:create |
/api/v1/mailboxes/invites:bulk |
POST | mailboxes:invites:create |
/api/v1/mailboxes:bulk |
POST | mailboxes:create |
/api/v1/mailboxes/{id}/forwarding |
GET | mailboxes:forwarding:read |
/api/v1/mailboxes/{id}/forwarding |
PUT | mailboxes:forwarding:write |
/api/v1/mailboxes/{id}/rules |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/rules |
POST | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/{ruleId} |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/rules/{ruleId} |
PUT | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/{ruleId} |
DELETE | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/reorder |
PATCH | mailboxes:rules:write |
/api/v1/mailboxes/{id}/auto-reply |
GET | mailboxes:auto-reply:read |
/api/v1/mailboxes/{id}/auto-reply |
PUT | mailboxes:auto-reply:write |
/api/v1/mailboxes/{id}/sieve |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/sieve |
PUT | mailboxes:rules:write |
/api/v1/mailboxes/{id}:delete-intent |
POST | mailboxes:delete |
/api/v1/delete-intents/{id}:confirm |
POST | mailboxes:delete |
/api/v1/me |
GET | (أي رمز عمليات صالح) |
/api/v1/mailboxes/{id}/message-tokens |
POST | mailboxes:message-tokens:manage |
/api/v1/mailboxes/{id}/message-tokens |
GET | mailboxes:message-tokens:manage |
/api/v1/message-tokens/{id} |
DELETE | mailboxes:message-tokens:manage |
/api/v1/message-tokens/{id} |
PATCH | mailboxes:message-tokens:manage |
/api/v1/messages |
GET | messages:read (رمز رسائل) |
/api/v1/messages/{uid} |
GET | messages:read (رمز رسائل) |
/api/v1/messages/{uid} |
PATCH | messages:write (رمز رسائل) |
/api/v1/messages/send |
POST | messages:send (رمز رسائل) |
/api/v1/messages/deliveries/{requestId} |
GET | messages:read (رمز رسائل) |
/api/v1/messages/sending-limits |
GET | messages:read (رمز رسائل) |
/api/v1/messages/_ping |
GET | messages:read (رمز رسائل، تشخيصي) |
/api/v1/messages/{uid}/attachments/{index} |
GET | messages:read (رمز رسائل) |
/api/v1/messages/{uid}/attachments |
GET | messages:read (رمز رسائل) |
/api/v1/messages/{uid}/raw |
GET | messages:read (رمز رسائل؛ يعيد raw_base64 وencoding وcontent_type وsize_bytes) |
/api/v1/messages/folders |
POST | messages:write (رمز رسائل) |
/api/v1/messages/folders/{path} |
PATCH | messages:write (رمز رسائل) |
/api/v1/messages/folders/{path} |
DELETE | messages:write (رمز رسائل) |
/api/v1/messages/{uid}:spam |
POST | messages:write (رمز رسائل) |
/api/v1/messages/{uid}:ham |
POST | messages:write (رمز رسائل) |
/api/v1/messages/bulk |
POST | messages:write (رمز رسائل) |
/api/v1/messages/folders:empty |
POST | messages:write (رمز رسائل) |
/api/v1/messages/drafts |
POST | messages:write (رمز رسائل)؛ يعيد uid + uidvalidity |
/api/v1/messages/drafts/{uid} |
PUT | messages:write (رمز رسائل)؛ يتطلب uidvalidity للمسودة |
/api/v1/messages/scheduled |
POST | messages:send (رمز رسائل) |
/api/v1/messages/scheduled |
GET | messages:read (رمز رسائل) |
/api/v1/messages/scheduled/{id} |
PATCH | messages:send (رمز رسائل) |
/api/v1/messages/scheduled/{id} |
DELETE | messages:send (رمز رسائل) |
/api/v1/messages/contacts |
GET | messages:read (رمز رسائل) |
/api/v1/messages/contacts |
POST | messages:write (رمز رسائل) |
/api/v1/messages/contacts/{id} |
PATCH | messages:write (رمز رسائل) |
/api/v1/messages/contacts/{id} |
DELETE | messages:write (رمز رسائل) |
/api/v1/messages/contacts/import |
POST | messages:write (رمز رسائل) |
/api/v1/messages/contacts/export |
GET | messages:read (رمز رسائل) |
/api/v1/messages/contact-groups |
GET | messages:read (رمز رسائل) |
/api/v1/messages/contact-groups/{id}/members |
GET | messages:read (رمز رسائل) |
/api/v1/messages/external-accounts |
GET | messages:read (رمز رسائل) |
/api/v1/messages/external-accounts |
POST | messages:write (رمز رسائل) |
/api/v1/messages/external-accounts/{id} |
PATCH | messages:write (رمز رسائل) |
/api/v1/messages/external-accounts/{id} |
DELETE | messages:write (رمز رسائل) |
/api/v1/messages/external-accounts/detect |
POST | messages:read (رمز رسائل) |
/api/v1/messages/external-accounts/test |
POST | messages:write (رمز رسائل) |
/api/v1/messages/external-accounts/{id}/test |
POST | messages:write (رمز رسائل) |
/api/v1/messages/_me |
GET | أي رمز رسائل (استبطان) |
/api/v1/messages/calendar/events |
GET | messages:read (رمز رسائل) |
/api/v1/messages/calendar/events |
POST | messages:write (رمز رسائل) |
/api/v1/messages/calendar/events/{id} |
PATCH | messages:write (رمز رسائل) |
/api/v1/messages/calendar/events/{id} |
DELETE | messages:write (رمز رسائل) |
/api/v1/messages/{uid}/reply |
GET | messages:read (رمز رسائل) |
/api/v1/messages/{uid}/reply-all |
GET | messages:read (رمز رسائل) |
/api/v1/messages/{uid}/forward |
GET | messages:read (رمز رسائل) |
/api/v1/messages/contact-groups |
POST | messages:write (رمز رسائل) |
/api/v1/messages/contact-groups/{id} |
PATCH | messages:write (رمز رسائل) |
/api/v1/messages/contact-groups/{id} |
DELETE | messages:write (رمز رسائل) |
/api/v1/messages/contact-groups/{id}/members |
POST | messages:write (رمز رسائل) |
/api/v1/messages/contact-groups/{id}/members |
DELETE | messages:write (رمز رسائل) |
/api/v1/messages/identities |
GET | messages:read (رمز رسائل) |
/api/v1/messages/identities |
POST | messages:write (رمز رسائل) |
/api/v1/messages/identities/reply-policy |
PATCH | messages:write (رمز رسائل) |
/api/v1/messages/identities/{id} |
PATCH | messages:write (رمز رسائل) |
/api/v1/messages/identities/{id} |
DELETE | messages:write (رمز رسائل) |
/api/v1/messages/templates |
GET | messages:read (رمز رسائل) |
/api/v1/messages/templates |
POST | messages:write (رمز رسائل) |
/api/v1/messages/templates/{id} |
PATCH | messages:write (رمز رسائل) |
/api/v1/messages/templates/{id} |
DELETE | messages:write (رمز رسائل) |
/api/v1/messages/blocked-senders |
GET | messages:read (رمز رسائل) |
/api/v1/messages/blocked-senders |
POST | messages:write (رمز رسائل) |
/api/v1/messages/blocked-senders/{id} |
DELETE | messages:write (رمز رسائل) |
/api/v1/mailboxes/{id}/enable-imap |
POST | mailboxes:write (رمز عمليات) |
/api/v1/migrations/test-connection |
POST | migrations:write |
/api/v1/migrations |
GET | migrations:read |
/api/v1/migrations/{id} |
GET | migrations:read |
/api/v1/migrations |
POST | migrations:write |
/api/v1/migrations/{id}:cancel |
POST | migrations:write |
/api/v1/migrations/{id}:retry |
POST | migrations:write |
/api/v1/migrations/{id} |
DELETE | migrations:write |
/api/v1/migrations/bulk/preview |
POST | migrations:write |
/api/v1/migrations/bulk |
POST | migrations:write |
/api/v1/migrations/bulk |
GET | migrations:read |
/api/v1/migrations/bulk/{batch} |
GET | migrations:read |
/api/v1/migrations/bulk/{batch}:cancel |
POST | migrations:write |
/api/v1/migrations/bulk/{batch}:retry |
POST | migrations:write |
/api/v1/migrations/bulk/{batch}:resume |
POST | migrations:write |
/api/v1/migrations/bulk/{batch} |
DELETE | migrations:write |
/api/v1/migrations/bulk/{batch}/jobs/{job}/password |
PATCH | migrations:write |
/api/v1/account |
GET | account:read |
/api/v1/account |
PATCH | mailboxes:write (صاحب الحساب فقط، رمز دون قيود على الموارد; MCP: update_account) |
/api/v1/sending-limits |
GET | account:read |
/api/v1/billing/status |
GET | billing:read |
/api/v1/billing/invoices |
GET | billing:read |
/api/v1/domains |
POST | domains:create |
/api/v1/domains/{id} |
DELETE | domains:delete |
/api/v1/domains/{id}/catch-all |
PATCH | domains:write |
/api/v1/domains/{id}/mail-hosting |
PATCH | domains:write |
/api/v1/domains/{id}/forwarding-addresses |
POST | domains:write |
/api/v1/domains/{id}/forwarding-addresses/{addressId} |
PATCH | domains:write |
/api/v1/domains/{id}/forwarding-addresses/{addressId} |
DELETE | domains:write |
/api/v1/domains/{id}/dkim:retry |
POST | domains:write |
/api/v1/domains/{id}/note |
PATCH | domains:write |
/api/v1/domains/{id}/signature |
PATCH | domains:write |
/api/v1/domains/{id}/branding |
GET | domains:read |
/api/v1/domains/{id}/branding |
PATCH | domains:write |
/api/v1/domains/{id}/branding/logo/{slot} |
PUT | domains:write |
/api/v1/domains/{id}/branding/logo/{slot} |
DELETE | domains:write |
/api/v1/domains/{id}/branding/verify-dns |
POST | domains:write |
/api/v1/domains/{id}/branding/preview |
POST | domains:write |
/api/v1/domains/{id}/branding |
DELETE | domains:write |
/api/v1/domains:bulk-add |
POST | domains:create |
/api/v1/mailboxes/{id} |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/client-setup |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/apple-mail-profile |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/bounces |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/password |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/app-passwords |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/app-passwords |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/app-passwords/{appPasswordId}:rotate |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/app-passwords/{appPasswordId} |
DELETE | mailboxes:write |
/api/v1/mailboxes/{id}:client-auth-mode |
POST | mailboxes:write |
/api/v1/mailboxes:client-auth-mode |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/note |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}:pause |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:restore |
POST | mailboxes:delete |
/api/v1/mailboxes/{id}:resume |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:suspend-login |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:resume-login |
POST | mailboxes:write |
/api/v1/mailboxes:login-access |
POST | mailboxes:write |
/api/v1/mailboxes:drive-access |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/members |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/members |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/members/{member} |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}/members/{member} |
DELETE | mailboxes:write |
/api/v1/shared-mailboxes |
POST | mailboxes:create |
/api/v1/mailboxes/{id}/convert-to-shared |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/convert-to-regular |
POST | mailboxes:write |
/api/v1/tickets |
GET | tickets:read |
/api/v1/tickets/{id} |
GET | tickets:read |
/api/v1/tickets/{id}/messages |
GET | tickets:read |
/api/v1/tickets |
POST | tickets:write |
/api/v1/tickets/{id}:mark-seen |
POST | tickets:write |
/api/v1/tickets/{id}/reply |
POST | tickets:write |
/api/v1/tickets/{id}:close |
POST | tickets:write |
/api/v1/domains/{id}/smtp |
GET | smtp:read |
/api/v1/domains/{id}/smtp |
PUT | smtp:write |
/api/v1/domains/{id}/smtp/profiles |
GET | smtp:read |
/api/v1/domains/{id}/smtp/profiles |
POST | smtp:write |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
PUT | smtp:write |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
DELETE | smtp:write |
/api/v1/domains/{id}/smtp:test |
POST | smtp:write |
/api/v1/domains/{id}/smtp:test-status/{jobId} |
GET | smtp:read |
/api/v1/smtp/default |
GET | smtp:read |
/api/v1/smtp/default |
PUT | smtp:write |
/api/v1/smtp (قديم، للتوافق) |
GET | smtp:read |
/api/v1/smtp (قديم، للتوافق) |
PUT | smtp:write |
/api/v1/smtp/{id} (قديم، للتوافق) |
DELETE | smtp:write |
/api/v1/smtp:test (قديم، للتوافق) |
POST | smtp:write |
/api/v1/smtp:test-status/{jobId} (قديم، للتوافق) |
GET | smtp:read |
/api/v1/messages/{uid} |
DELETE | messages:write (رمز رسائل) |
/api/v1/messages/{uid}:move |
POST | messages:write (رمز رسائل) |
/api/v1/messages/folders |
GET | messages:read (رمز رسائل) |
/api/v1/mailboxes/{id}/aliases |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/aliases |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/aliases/{aliasId} |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}/aliases/{aliasId} |
DELETE | mailboxes:write |
/api/v1/verify |
POST | verify:write |
/api/v1/verify/bulk |
POST | verify:write |
/api/v1/verify/bulk/{jobId} |
GET | verify:read |
/api/v1/verify/bulk/{jobId}/download |
GET | verify:read |
/api/v1/verify/credits |
GET | verify:read |
/api/v1/verify/bulk |
GET | verify:read |
/api/v1/verify/bulk/{jobId}/cancel |
POST | verify:write |
/api/v1/verify/bulk/{jobId} |
DELETE | verify:write |
/api/v1/cloudflare/validate-token |
POST | cloudflare:read |
/api/v1/cloudflare/zones |
POST | cloudflare:read |
/api/v1/cloudflare/connect |
POST | cloudflare:write |
/api/v1/cloudflare/preview |
POST | cloudflare:read |
/api/v1/cloudflare/apply |
POST | cloudflare:write |
/api/v1/cloudflare/tokens |
GET | cloudflare:read |
/api/v1/cloudflare/tokens/{id} |
DELETE | cloudflare:delete |
تتبع نقاط نهاية Cloudflare التدفق نفسه في لوحة التحكم: تحقق من الرمز، واسرد المناطق، واربط النطاقات، وعاين تغييرات DNS، ثم طبقها. تقبل كل من /cloudflare/preview و/cloudflare/apply عنصري تحكم اختياريين لكل نطاق:
included_records، وهي قائمة سماح بالسجلات التي ستتأثر، مفهرسة بمعرّف النطاق:{ "123": ["mx_primary", "spf_record"] }. يتم تجاوز السجلات التي لا تدرجها، لذا يمكنك تطبيق MX وSPF فقط والعودة إلى DKIM لاحقا. احذف الحقل لتطبيق كل سجل.confirmed_conflicts، عندما تشير المعاينة إلى سجل موجود بالفعل بقيمة مختلفة، أدرج معرّف سجله هنا، بالبنية نفسها{ domain_id: [record_ids] }، للسماح باستبداله.
تأتي معرّفات السجلات (mx_primary وspf_record وdkim_primary وdmarc_main و…) مباشرة من استجابة المعاينة، ولذلك يستدعي الوكيل المعتاد المعاينة أولا ويمرر المعرّفات التي يريدها إلى التطبيق:
POST /api/v1/cloudflare/apply
{
"domain_ids": [123],
"included_records": { "123": ["mx_primary", "spf_record"] },
"confirmed_conflicts": { "123": ["dmarc_main"] }
}
توجيه SMTP لكل نطاق والإعداد الافتراضي للحساب
يضبط SMTP لكل نطاق. يختار كل نطاق واحدا من ثلاثة مسارات: الإرسال المُدار عبر المنصة، أو ملف تعريف SMTP محفوظ، أي مزودك الخاص القابل لإعادة الاستخدام عبر النطاقات، أو "غير مضبوط"، ويحدد إعداد افتراضي واحد على مستوى الحساب المسار الذي تبدأ عليه النطاقات الجديدة.
نقاط النهاية لكل نطاق (smtp:read / smtp:write):
| نقطة النهاية | الطريقة | ما الذي تفعله |
|---|---|---|
/api/v1/domains/{id}/smtp |
GET | المسار الحالي: smtp_mode وeffective_smtp_mode وprofile وeffective_profile |
/api/v1/domains/{id}/smtp |
PUT | تضبط المسار، بالنص {smtp_mode: platform|profile|not_configured|inherit, smtp_connection_id?, set_account_default?, apply_to_all?} |
/api/v1/domains/{id}/smtp/profiles |
GET | تسرد ملفات تعريف SMTP المحفوظة للحساب |
/api/v1/domains/{id}/smtp/profiles/{connectionId}/usage |
GET | تسرد النطاقات وعناوين إرسال باسم الدقيقة التي تستخدم ملف التعريف، دون بيانات اعتماد |
/api/v1/domains/{id}/smtp/profiles |
POST | تنشئ ملف تعريف وتستخدمه لهذا النطاق |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
PUT | تحدث ملف تعريف، مما يؤثر في كل نطاق يستخدمه |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
DELETE | تحذف ملف تعريف، ويعاد تعيين النطاقات التي تستخدمه إلى إعداد الحساب الافتراضي |
/api/v1/domains/{id}/smtp:test |
POST | تختبر مسارا، وتعيد {job_id, poll_url} |
/api/v1/domains/{id}/smtp:test-status/{jobId} |
GET | تستعلم عن مهمة اختبار |
بعض الملاحظات حول نص المسار:
- يحدد
smtp_mode=platformالإرسال المُدار؛ ويتطلبsmtp_mode=profileالقيمةsmtp_connection_id؛ أماnot_configuredفيمسح المسار. - تجعل
smtp_mode=inheritالنطاق يتبع مباشرة إعداد الحساب الافتراضي، فكلما تغير الافتراضي تغير هذا النطاق معه. تكتب واجهة الويب دائما مسارات محددة، لكن الخلفية ما زالت تدعمinherit، ولهذا يعيدGETالحقلeffective_smtp_modeليبين القيمة التي يحل إليهاinheritحاليا. - تمثل
set_account_default: trueفي API مفتاح اجعل هذا إعداد الحساب الافتراضي في لوحة التحكم، فتبدأ النطاقات الجديدة على هذا المسار. وتمثلapply_to_all: trueزر تطبيق على جميع النطاقات، أي تحويل جميع النطاقات إلى هذا المسار مرة واحدة.
نقاط نهاية الإعداد الافتراضي على مستوى الحساب (smtp:read / smtp:write):
| نقطة النهاية | الطريقة | ما الذي تفعله |
|---|---|---|
/api/v1/smtp/default |
GET | تعيد default_smtp_mode، وقيمته null حتى تعيينه، وeffective_default_smtp_mode، وهو أساس الخطة المستخدم عند عدم التعيين، وdefault_smtp_connection_id وprofile |
/api/v1/smtp/default |
PUT | تضبط الإعداد الافتراضي، بالنص {smtp_mode: platform|profile|not_configured, smtp_connection_id?, apply_to_all?} |
يعيد حذف ملف تعريف كان إعداد الحساب الافتراضي ذلك الإعداد إلى أساس الخطة.
نقاط النهاية القديمة. تظل GET/PUT /api/v1/smtp على مستوى الحساب، ومعها DELETE /api/v1/smtp/{id} وPOST /api/v1/smtp:test وGET /api/v1/smtp:test-status/{jobId}، متاحة للتوافق مع الإصدارات السابقة، لكنها لم تعد تتحكم في التوجيه لكل نطاق: استخدم نقاط النهاية لكل نطاق و/smtp/default أعلاه. كما أصبحت أداتا MCP القديمتان get_smtp_config وupdate_smtp_config مهملتين للسبب نفسه.
علامة White Label التجارية والعملاء ووصول الفريق
تضبط العلامة التجارية لكل نطاق باستخدام branding:read / branding:write. يشغل النطاق علامته الخاصة (mode=custom)، أو يرث إعداد الحساب الافتراضي (mode=inherit)، أو تكون العلامة متوقفة. يلزم توفر فترة تجريبية نشطة لـWhite Label أو إضافة مدفوعة. وبعد الإلغاء، يحتفظ المالك بوصول استرداد للقراءة فقط أثناء مهلة السماح المعروضة. اقرأ dns_records للنطاق وانشر السجلات المعادة كما هي تماما. لا تستنتج أسماء المضيفين أو أهداف CNAME من مثال.
| نقطة النهاية | الطريقة | ما الذي تفعله |
|---|---|---|
/api/v1/domains/{id}/branding |
GET | تقرأ العلامة التجارية: mode وwhite_label_addon_active وbrand وhosts وdns_records المطلوب إنشاؤها وcname_target وmail_zone |
/api/v1/domains/{id}/branding |
PATCH | تحديث دمج جزئي: mode وname وprimary_color/accent_color وdashboard_enabled/dashboard_label وwebmail_enabled/webmail_label وmail_zone_enabled وsupport_email وsupport_url وsender_email وscope |
/api/v1/domains/{id}/branding/logo/{slot} |
PUT | ترفع شعار base64، حيث slot = light|dark|favicon؛ بصيغة PNG/JPG وICO للأيقونة، وبحجم ≤1 MB، ولا يقبل SVG. يتطلب scope=domain الافتراضي وضع custom؛ أما scope=account_default الصريح في نطاق inherit فيتطلب رمزا غير مقيد. |
/api/v1/domains/{id}/branding/logo/{slot} |
DELETE | تزيل موضع شعار. وتستخدم قواعد نطاق المجال أو إعداد الحساب الافتراضي نفسها؛ يأخذ DELETE القيمة scope كمعامل استعلام. |
/api/v1/domains/{id}/branding/verify-dns |
POST | تضع التحقق من DNS لمضيفي العلامة ومنطقة بريدها في قائمة الانتظار |
/api/v1/domains/{id}/branding/preview |
POST | تنشئ عنوان URL قصير الأجل للمعاينة، مع 422 no_brand إذا لم تضبط العلامة التجارية |
/api/v1/domains/{id}/branding?scope=domain|all |
DELETE | تمسح العلامة التجارية لهذا النطاق أو للحساب كله |
يمثل PATCH دمجا جزئيا، ولذلك تبقى الحقول المحذوفة محفوظة. وإذا كانت العلامة التجارية متوقفة حاليا، فمرر mode لإعادة تمكينها. يجب أن يكون sender_email المخصص على نطاق له مفتاح DKIM متحقق منه. يوفر mail_zone_enabled تطبيقات البريد ومزامنة DAV ضمن نطاق العلامة نفسه. وهو يتبع العلامة لا نطاقا واحدا، ولذلك يحتاج إلى mode=custom أو scope=account_default؛ ويعيد نطاق inherit الخطأ 422 inherited_brand. اقرأ mail_zone.dns_status وmail_zone.client_hosts_status وmail_zone.records وmail_zone.dav_url وmail_zone.dav_ready لتتبع التجهيز، ولا تستخدم إلا عنوان DAV جاهزا. للاطلاع على سير العمل الكامل للوكيل، راجع دليل White Label Branding عبر API وMCP.
تضيف واجهة White Label على مستوى الحساب 13 مسارا ضمن /api/v1/white-label: الحالة وتقدم الإعداد، وكتالوج وصول مباشر، وقائمة الأعضاء وإجراءات دورة حياتهم، ونشاط الحساب، وسجل الإجراءات وتسجيل الدخول لكل عضو. تستخدم members:read وmembers:write وactivity:read. يكون الوصول دائما تقاطع استحقاق الحساب وعضوية الشخص الحالية ومنحة بيانات الاعتماد وأي قيد على النطاق. راجع إدارة فرق White Label باستخدام API وMCP للاطلاع على جدول المسارات وانتقالات الحالة.
تتوفر مواصفات OpenAPI في /api/openapi.json لاستيرادها إلى Postman أو Insomnia أو مولدات التعليمات البرمجية.
إصلاحات سريعة
- 401 "unauthenticated": تحقق من وجود الترويسة
Authorization: Bearer <token>ومن أن الرمز لم يلغ أو تنته صلاحيته. - 403 "plan_api_disabled": النطاق المطلوب غير متاح في خطتك. تغطي Nano أداة التحقق من البريد الإلكتروني، وDrive إذا اشتريت إضافة Drive Storage. قم بالترقية إلى Starter أو أعلى لبقية API.
- 403 "token_scope_blocked_by_plan": يحتوي رمزك على نطاقات غير متاحة في خطتك الحالية. ألغ الرمز وأنشئ رمزا جديدا بالنطاقات المسموح بها.
- 403 "scope_blocked_by_entitlement": منحة White Label المحفوظة غير متاحة لأن الإضافة غير نشطة أو لأن العملية كتابة أثناء فترة السماح. أعد تنشيط White Label، ثم أعد إصدار بيانات الاعتماد أو تفويضها.
- 403 "scope_blocked_by_membership": دور العضو الحالي أضيق من الإجراء المطلوب. اطلب من المالك تغييره؛ لا يمكن لإعادة التفويض وحدها توسيع العضوية.
- 422 "missing_idempotency_key": أضف ترويسة
Idempotency-Keyإلى عملية الكتابة المذكورة في مرجع نقطة النهاية. - 403 "mailbox_sending_paused": توقف الإرسال من صندوق البريد لأن بريده الصادر لم يعد يبدو صادرا عن مالكه، وعادة يكون السبب وقوع كلمة المرور في أيد غير صحيحة. تظل القراءة والسرد وجميع نقاط النهاية الأخرى عاملة؛ يرفض الإرسال وحده، ولن تؤدي إعادة المحاولة إلى رفع الإيقاف. يجب تغيير كلمة مرور صندوق البريد، وبعد ذلك يعيد الدعم تشغيل الإرسال. راجع لماذا لا يمكنني إرسال البريد الإلكتروني؟.
- 429 تجاوز حد المعدل: انتظر المدة المحددة في ترويسة
Retry-Afterقبل إعادة المحاولة. وعند بلوغ الحد اليومي لـAPI لكل صندوق بريد، تعيد API أيضا الرمزrate_limited، لكن معretryableبقيمةfalseوdimensionبقيمةapi_mailbox_dailyووقت فيresets_at: لن تنجح إعادة المحاولة قبل ذلك، فانتظر حتى هذا الوقت. - 429 "sending_limit_exceeded": نفد أحد حدود الإرسال. يذكر
dimensionأي حد هو، ويذكرresets_atموعد تجدده. لا يمكن أن تنجح إعادة المحاولة قبل ذلك، ولهذا تكون قيمةretryableهيfalse. يبينremaining_todayفيGET /api/v1/messages/sending-limitsعدد المستلمين الإضافيين الذين يمكن لصندوق البريد الإرسال إليهم اليوم. وعندما يكون أدنى حد هو المجموع اليومي للحساب، تكون قيمةlimit_todayهيnull، وكذلكremaining_todayإلى أن ينفد ذلك المجموع (فتصبح0)؛ ويقرأ رمز العمليات هذا المجموع عبرGET /api/v1/sending-limits. وإذا كانت قيمةdimensionهيrecipients_per_message، فقسّم الرسالة إلى رسائل أصغر. راجع حدود الإرسال لكل خطة.
إرسال البريد الإلكتروني: النص والترويسات وقابلية التسليم
تأخذ POST /api/v1/messages/send بنية الطلب {to, subject, body: {text, html}, attachments, reply_to_message_id, headers}.
- كل من
body.textوbody.htmlاختياري، لكن يلزم واحد منهما على الأقل. إذا قدمتbody.textفقط، فإننا ننشئ تلقائيا بديلا بصيغة HTML باستخدام فقرات<p>، حيث تفصل الأسطر الفارغة بين الفقرات وتصبح الأسطر الجديدة المفردة<br>، لكي تظهر الرسالة كبريد عادي في كل عميل حديث. وإذا احتجت إلى خط ثابت العرض، فأرسل<pre>...</pre>حرفيا فيbody.html. headersكائن اختياري للترويسات الصادرة التي يقدمها المستخدم. قائمة السماح هيList-UnsubscribeوList-Unsubscribe-PostوReply-Toوأي ترويسة تتبع مخصصة منX-*. تدير المنصة الأسماء الأخرى مثلFromوSubjectوMessage-IdوAuthentication-Results، وترفضها مع422. وترفض أيضا القيم التي تحتوي على CR/LF للحماية من حقن الترويسات. ويبلغ حد القيم 998 محرفا وفقا لـRFC 2822.- لحالات الاستخدام الجماعي والأتمتة، راجع قسم ترويسات قابلية التسليم للمرسل الجماعي لإعداد
List-Unsubscribeومفتاحauto_list_unsubscribeعلى مستوى الحساب.
تعني الاستجابة 202 أن الرسالة قُبلت ولم تُرسل بعد. تُفحص حدود الإرسال مرة أخرى عند خروج الرسالة من قائمة الانتظار، لذا تحقق من النتيجة عبر GET /api/v1/messages/deliveries/{request_id} باستخدام request_id الوارد في الاستجابة 202. ويمكن لأي رمز رسائل لصندوق البريد نفسه التحقق منها، لا الرمز الذي أرسل الرسالة فقط؛ ويعيد request_id غير معروف الخطأ 404. وإذا أوقفها حد ما، فستكون قيمة status هي failed، ويذكر failure الحد (dimension) وموعد تجدده (resets_at). ويمكن إعادة إرسال رسالة فشل إرسالها لاحقا بالمحتوى نفسه. وإذا كنت تمرر معرّفك الخاص عبر X-Request-Id، فاستخدم معرّفا جديدا، لأن المعرّف القديم لا يعيد إلا التسليم الأصلي. والرسالة المجدولة التي تبلغ حدا عند موعدها تُحتجز بالحالة limit_reached وتُحفظ لمدة 7 أيام: اعرض هذه الرسائل عبر GET /api/v1/messages/scheduled?status=limit_reached، وأرسل إحداها لاحقا بتحديد scheduled_for جديد عبر PATCH /api/v1/messages/scheduled/{id}، أو احذفها عبر DELETE.
مقالات ذات صلة
انتقل إلى الأدلة القريبة التي تُكمل سير العمل.