حدود المعدل
فهم حدود معدل API وحدود إرسال البريد الإلكتروني وكيفية التعامل مع الاستجابات المحدودة المعدل
يفرض MailLand حدود المعدل على مستويات متعددة لضمان الاستخدام العادل واستقرار المنصة. تختلف الحدود حسب نوع التدفق (تعاملي مقابل تسويقي) وطريقة المصادقة ومستوى الخطة.
حدود طلبات API
الحدود المستندة إلى IP
يخضع كل طلب لتحديد المعدل المستند إلى IP، ويُطبّق قبل المصادقة. تحمي هذه الحدود من إساءة الاستخدام وهجمات DDoS.
| نقطة النهاية | الحد | النافذة |
|---|---|---|
| API العام | 300 طلب | في الدقيقة |
| تسجيل دخول المسؤول | 10 طلبات | في الدقيقة |
| دعوات الفريق | 10 طلبات | في الدقيقة |
| فحوصات نطاق SSO | 15 طلبًا | في الدقيقة |
تسجيل دخول المستخدم (غير المسؤول) لا يخضع لهذه النافذة المستندة إلى IP: راجع تحديد معدل تسجيل الدخول أدناه للاطلاع على الحظر بعد 5 محاولات/15 دقيقة الذي يُطبَّق عليه.
تُطبّق الحدود المستندة إلى IP لكل عنوان IP مصدري. إذا كنت تعمل خلف خادم وكيل مشترك، فإن جميع العملاء يتشاركون نفس الحد.
تحديد معدل تسجيل الدخول
تُتتبّع محاولات تسجيل الدخول الفاشلة لكل مزيج من IP وعنوان البريد الإلكتروني:
| المعلمة | القيمة |
|---|---|
| الحد الأقصى للمحاولات الفاشلة | 5 |
| نافذة التتبع | 15 دقيقة |
| مدة الحظر | 15 دقيقة |
بعد 5 محاولات تسجيل دخول فاشلة خلال 15 دقيقة، يُحظر مزيج IP وعنوان البريد الإلكتروني لمدة 15 دقيقة. يؤدي تسجيل الدخول الناجح إلى إعادة تعيين العدّاد.
مصادقة API Key
تُتتبّع محاولات مصادقة API key الفاشلة في بُعدين:
| البُعد | الحد الأقصى للفشل | النافذة | مدة الحظر |
|---|---|---|---|
| لكل بادئة مفتاح | 10 محاولات | 15 دقيقة | 15 دقيقة |
| لكل عنوان IP | 20 محاولة | 15 دقيقة | 15 دقيقة |
إذا تجاوز أي بُعد الحد المسموح به، تُحظر المصادقة مؤقتًا.
حدود إرسال البريد الإلكتروني
تُفرض حدود إرسال البريد الإلكتروني لكل مساحة عمل وتختلف حسب نوع التدفق. تحصل رسائل البريد التعاملية (الإيصالات، إعادة تعيين كلمة المرور) على حدود أعلى من رسائل البريد التسويقية (النشرات الإخبارية، الحملات). الحد في الدقيقة هو القيمة التي تأتي فعليًا من خطتك (راجع ملخص السياسة)؛ أما الحد في الثانية والحد في الساعة فمُشتقّان منه وليسا مضبوطين بشكل مستقل، ولا تُستخدم القيم الافتراضية الثابتة للمنصة إلا للحد اليومي والشهري.
التدفق التعاملي
| النافذة | كيفية الاشتقاق |
|---|---|
| في الثانية | معدل الخطة في الدقيقة ÷ 60 (بحد أدنى 1)؛ يُقبل طلب واحد يصل إلى 5 مستلمين في ثانية لم يُقبل فيها أي طلب آخر، انظر أدناه |
| في الدقيقة | من خطتك (TransactionalRatePerMin) |
| في الساعة | معدل الخطة في الدقيقة × 60 |
| في اليوم | 1,000,000 (القيمة الافتراضية للمنصة) |
| في الشهر | 10,000,000 (القيمة الافتراضية للمنصة) |
الطلبات متعددة المستلمين. يُحتسب كل مستلم في كل نافذة زمنية. يُقبل الطلب التعاملي (5 مستلمين كحد أقصى) الذي يتجاوز عدد مستلميه حدّك في الثانية إذا لم يُقبل أي طلب آخر في تلك الثانية؛ ويتلقى أي طلب آخر في الثانية نفسها 429 مع Retry-After: 1. على سبيل المثال، في خطة بمعدل 60 في الدقيقة (1 في الثانية)، يُقبل طلب واحد إلى 3 مستلمين، ويُرفض طلب آخر في تلك الثانية حتى الثانية التالية. تظل حدود الدقيقة والساعة واليوم والشهر والإحماء وحصتك الشهرية تحتسب المستلمين الثلاثة جميعًا. يطبّق SMTP القاعدة نفسها على كل رسالة، باحتساب عناوين RCPT TO الفريدة فيها.
التدفق التسويقي
| النافذة | كيفية الاشتقاق |
|---|---|
| في الثانية | لا يُتحقق منه: الإرسال التسويقي يتخطى دائمًا فحص المعدل في الثانية، سواء كان دفعة أم لا |
| في الدقيقة | من خطتك (MarketingRatePerMin) |
| في الساعة | معدل الخطة في الدقيقة × 60 |
| في اليوم | 100,000 (القيمة الافتراضية للمنصة) |
| في الشهر | 1,000,000 (القيمة الافتراضية للمنصة) |
معدلات الدقيقة خاصة بكل خطة: تحقق من حدودك الحالية من صفحة الفوترة، المستندة إلى مسار API GET /v1/account/subscription/policy-summary.
أولوية التدفق
تتمتع رسائل البريد التعاملية بأولوية أعلى (الأولوية 1) مقارنة برسائل البريد التسويقية (الأولوية 2). عندما يكون النظام تحت ضغط، تُعالج رسائل البريد التعاملية أولًا.
العمليات المجمّعة
عمليات الإرسال المجمّع (مثل POST /v1/transactional/send-batch) مخصصة للتسويق فقط، وتتخطى فحوصات المعدل لكل ثانية تمامًا كأي إرسال تسويقي: لكنها تظل خاضعة لحدود الدقيقة والساعة واليوم والشهر.
حدود إرسال مساحة العمل
مستوى التحقق لا يحدد سقفًا للحجم، بل يحدد الميزات المتاحة. حجم إرسالك اليومي/الشهري يأتي من خطتك (راجع ملخص السياسة)، لا من مستوى تحققك.
| مستوى التحقق | التعاملي | التسويقي | الوارد |
|---|---|---|---|
| Sandbox | المستلمون المُدرجون في القائمة المسموح بها فقط | لا | لا |
| BasicVerified / SenderVerified | نعم | لا | نعم |
| BusinessVerified | نعم | نعم | نعم |
تُفحص حدود مساحة العمل قبل حدود معدل التدفق. يمكنك عرض حدودك واستخدامك الحاليين من صفحة الفوترة، المُغذّاة من GET /v1/account/subscription/policy-summary.
إحماء IP
يعتمد الإحماء على عائلة الخطة، وليس على جدول زمني ثابت. تمر خطط Free بست مراحل مدة كل منها 5 أيام (50 ← 100 ← 250 ← 500 ← 750 ← 1,000 يوميًا) على مدى 30 يومًا إجمالًا؛ وتمر خطط Pro بالتسلسل 500 ← 1,000 ← 2,500 ← 5,000 ← 10,000 ← 25,000 يوميًا على مدى 14 يومًا؛ ولا يوجد إحماء لخطط Max. راجع جدول الإحماء الخاص بخطتك من صفحة الفوترة أعلاه.
رؤوس تحديد المعدل
تتضمن معظم استجابات API:
| الرأس | الوصف |
|---|---|
X-RateLimit-Limit | الحد الأقصى للطلبات المسموح بها في النافذة الحالية |
X-RateLimit-Remaining | الطلبات المتبقية في النافذة الحالية |
يضيف 429 المستند إلى IP ما يلي:
| الرأس | الوصف |
|---|---|
X-RateLimit-Reset | الطابع الزمني بتوقيت UTC بصيغة ISO-8601 لإعادة تعيين النافذة الحالية |
Retry-After | عدد الثواني للانتظار قبل إعادة المحاولة |
التعامل مع استجابات 429
عند تلقي استجابة 429 Too Many Requests، يحتوي النص على تفاصيل حول الحد الذي تم تجاوزه:
{
"code": "IP_RATE_LIMIT_EXCEEDED",
"message": "Too many requests from this IP. Retry after 45 seconds.",
"details": {
"limit": 300,
"current": 301,
"retryAfter": 45,
"resetAt": "2026-02-18T12:35:00Z"
}
}لحدود معدل إرسال البريد الإلكتروني:
{
"code": "RATE_LIMIT_EXCEEDED",
"message": "Per-minute rate limit exceeded (transactional)"
}نص message أعلاه مثال فقط: يُولَّد من سبب قرار محرك السياسات وليس نصًا حرفيًا مضمونًا. طابق على code، لا على message.
استراتيجية إعادة المحاولة
#!/bin/bash
MAX_RETRIES=3
ATTEMPT=0
while [ $ATTEMPT -le $MAX_RETRIES ]; do
RESPONSE=$(curl -s -D - -o /tmp/body -w "%{http_code}" -X POST https://api.mail.land/v1/transactional/send \
-H "X-API-Key: ml_pet_Ab3Kx9mN2pQ7rT4wL8yD..." \
-H "Content-Type: application/json" \
-d '{ "from": {"email": "[email protected]"}, "to": [{"email": "[email protected]"}], "subject": "Hello", "htmlContent": "<p>Hi</p>" }')
HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
if [ "$HTTP_CODE" -ne 429 ]; then
cat /tmp/body
exit 0
fi
# Read the Retry-After header, not the response body - not every 429 has a `details` block.
RETRY_AFTER=$(echo "$RESPONSE" | grep -i '^Retry-After:' | tr -d '\r' | cut -d' ' -f2)
RETRY_AFTER=${RETRY_AFTER:-60}
ATTEMPT=$((ATTEMPT + 1))
echo "Rate limited. Retrying in ${RETRY_AFTER}s (attempt ${ATTEMPT}/${MAX_RETRIES})"
sleep "$RETRY_AFTER"
done
echo "Max retries exceeded"
exit 1أفضل الممارسات
راقب استخدامك. تحقق من رأس X-RateLimit-Remaining بشكل استباقي لتقييد الطلبات قبل الوصول إلى الحدود.
استخدم التراجع الأسي. عند إعادة المحاولة بعد استجابة 429، احترم دائمًا رأس Retry-After. إذا لم يكن موجودًا، استخدم التراجع الأسي بدءًا من ثانية واحدة.
استخدم نقاط النهاية المجمّعة. للإرسال التسويقي بكميات كبيرة، استخدم POST /v1/transactional/send-batch بدلًا من استدعاء POST /v1/transactional/send في حلقة. تتخطى نقاط النهاية المجمّعة فحوصات المعدل لكل ثانية، كأي إرسال تسويقي، وهي أكثر كفاءة.
افصل بين التعاملي والتسويقي. استخدم بيانات اعتماد API منفصلة لرسائل البريد التعاملية والتسويقية. هذا يضمن عدم تأثير الإرسال التسويقي على تسليم البريد التعاملي.
وزّع الإرسال على مدار الوقت. للحملات الكبيرة، يقوم MailLand تلقائيًا بتنظيم وتيرة التسليم. بالنسبة لعمليات الإرسال المجمّع عبر API، وزّع الطلبات بالتساوي بدلًا من الإرسال على شكل دفعات مفاجئة.
حدود إعادة تعيين كلمة المرور
تمتلك طلبات إعادة تعيين كلمة المرور حدود معدل منفصلة:
| المعلمة | القيمة |
|---|---|
| فترة الانتظار بين الطلبات | 60 ثانية |
| الحد الأقصى للطلبات يوميًا | 5 |
الخطوات التالية
- رموز الأخطاء: مرجع شامل لرموز الأخطاء
- مفاتيح API: إنشاء وإدارة بيانات اعتماد API
- الفوترة: عرض استخدامك وحدودك الحالية