وضع Sandbox في Amazon SES: لماذا لا تصل رسائلك للعملاء وكيف تطلب رفع الحد إلى الإنتاج
أعددت كل شيء — قالب البريد الإلكتروني، منطق الإرسال، بيانات الاعتماد — وعندما اختبرت الإرسال لنفسك نجح كل شيء. لكن حين حاولت إرسال رسالة لأحد عملائك الفعليين، اختفت الرسالة تماماً. هذا هو وضع Sandbox في Amazon SES، وهو قيد افتراضي يطبّقه AWS على كل حساب جديد يستخدم خدمة البريد الإلكتروني SES.
ملخص سريع (TL;DR) — وضع Sandbox في SES
| الجانب | وضع Sandbox | وضع الإنتاج |
|---|---|---|
| المستلمون المسموح بهم | عناوين بريد إلكتروني موثّقة (Verified) فقط | أي عنوان بريد إلكتروني |
| حد الإرسال اليومي | محدود — راجع التوثيق الرسمي | أعلى بكثير — يتدرّج حسب السمعة |
| معدل الإرسال | محدود — راجع التوثيق الرسمي | أعلى — يتدرّج حسب الاستخدام |
| طريقة الخروج | طلب رفع الحد عبر AWS Support | — |
| وقت المعالجة المعتاد | — | 24 ساعة في الغالب (غير مضمون) |
كيف يعمل وضع Sandbox في SES
عند إنشاء حساب AWS جديد وتفعيل SES لأول مرة، يضعك AWS تلقائياً في وضع Sandbox. هذا ليس خطأً في الإعداد — إنه سياسة مقصودة لحماية سمعة خوادم البريد الخاصة بـ AWS من الإساءة المبكرة. الفكرة بسيطة: قبل أن تثق بأي مُرسِل جديد بإرسال رسائل لعناوين عشوائية، تتحقق أولاً من نيّته.
في وضع Sandbox، يمكنك الإرسال فقط من وإلى عناوين البريد الإلكتروني أو النطاقات التي وثّقتها مسبقاً في SES. هذا يفسّر لماذا نجح إرسال الرسالة لنفسك — عنوانك موثّق — لكنه فشل مع عميلك الذي لم يُضَف لقائمة التوثيق.
- الحساب الجديد: كل حساب AWS يبدأ في Sandbox تلقائياً عند استخدام SES.
- التحقق من المستلم: SES يتحقق إذا كان عنوان المستلم موثّقاً في حسابك.
- الرفض الصامت: الإرسال لعنوان غير موثّق يُرفض — في بعض الحالات دون رسالة خطأ واضحة.
- طلب الرفع: الخروج من Sandbox يتطلب طلباً صريحاً عبر AWS Support.
- وضع الإنتاج: بعد الموافقة، يمكنك الإرسال لأي عنوان بريد إلكتروني.
التحقق من وضعك الحالي في SES
قبل أي شيء، تأكد من المنطقة التي تستخدمها — SES خدمة إقليمية، ووضع Sandbox مستقل لكل منطقة. حساب في us-east-1 قد يكون في الإنتاج بينما نفس الحساب في eu-west-1 لا يزال في Sandbox.
# التحقق من حالة الإرسال في المنطقة الحالية
aws ses get-send-quota --region us-east-1
الناتج يُظهر Max24HourSend وMaxSendRate وSentLast24Hours. لكن هذا وحده لا يخبرك صراحةً إذا كنت في Sandbox. الطريقة الأوضح هي عبر واجهة AWS Console أو عبر فحص Account-level sending status:
# فحص حالة الحساب في SES v2
aws sesv2 get-account --region us-east-1
في الناتج، ابحث عن ProductionAccessEnabled. إذا كانت القيمة false، أنت لا تزال في Sandbox.
خطوات طلب رفع الحد إلى الإنتاج
الخروج من Sandbox لا يتم تلقائياً — يجب أن تطلب ذلك صراحةً عبر AWS Support. إليك العملية الكاملة.
الخطوة 1: توثيق نطاقك أو عنوان بريدك أولاً
قبل تقديم الطلب، تأكد أن النطاق الذي ستُرسل منه موثّق في SES. AWS لن يوافق على طلبك إذا لم يكن لديك هوية مُرسِل موثّقة — هذا أول ما يتحقق منه فريق المراجعة.
# التحقق من الهويات الموثّقة
aws sesv2 list-email-identities --region us-east-1
إذا لم يظهر نطاقك، وثّقه أولاً:
# توثيق نطاق جديد
aws sesv2 create-email-identity \
--email-identity example.com \
--region us-east-1
بعد التوثيق، تأكد من إعداد سجلات DKIM و SPF في DNS الخاص بنطاقك. طلبات الإنتاج التي تأتي بدون DKIM مُفعَّل غالباً تُرفض أو تتأخر.
الخطوة 2: تقديم طلب رفع الحد عبر AWS Support
الطريقة الرسمية هي عبر AWS Console في قسم SES مباشرةً. انتقل إلى SES Console → Account dashboard → Request production access. هذا يفتح نموذجاً مدمجاً يُنشئ تذكرة AWS Support تلقائياً من النوع Service Limit Increase.
يمكن أيضاً تقديم الطلب مباشرةً عبر AWS Support Center بتحديد:
- Regarding: Service Limit Increase
- Limit Type: SES Sending Limits
- Region: المنطقة التي تريد رفع الحد فيها
الخطوة 3: كتابة طلب مقنع — هذا ما يحدد الموافقة
هنا يخطئ معظم المطورين. يكتبون طلباً مختصراً من سطرين ويتفاجؤون بالرفض أو بطلب معلومات إضافية. فريق مراجعة SES يبحث عن إجابات محددة:
- نوع البريد الإلكتروني: هل هو تسويقي (Marketing)، أم معاملاتي (Transactional)، أم كلاهما؟
- كيف جمعت قائمة المستلمين: هل هم مشتركون اختاروا الاشتراك (Opt-in)؟ متى وكيف؟
- كيف تتعامل مع طلبات إلغاء الاشتراك: هل لديك آلية Unsubscribe واضحة؟
- كيف تتعامل مع الارتداد (Bounce) والشكاوى (Complaint): هل تراقب هذه المعدلات وتتخذ إجراءً؟
- الحجم المتوقع: كم رسالة يومياً أو شهرياً تتوقع إرسالها؟
فكّر في الأمر كأنك تتقدم لاستئجار خادم بريد مشترك — المالك يريد أن يعرف أنك لن تُدمّر سمعة الخادم بإرسال spam. كلما كانت إجاباتك أكثر تفصيلاً وتدل على وعي بمعايير إرسال البريد، زادت فرصة الموافقة السريعة.
الخطوة 4: التحقق من الموافقة بعد تحديث الطلب
بعد موافقة AWS، تحقق مجدداً من حالة الحساب للتأكد من تفعيل وضع الإنتاج:
aws sesv2 get-account --region us-east-1
ابحث عن ProductionAccessEnabled: true في الناتج. إذا لم تتغير القيمة بعد 24 ساعة من إشعار الموافقة، تواصل مع AWS Support مجدداً.
إعداد مراقبة Bounce وComplaint — شرط غير معلن للبقاء في الإنتاج
الحصول على موافقة الإنتاج ليس نهاية القصة. AWS يراقب معدلات الارتداد والشكاوى باستمرار، وإذا تجاوزت حدوداً معينة، قد يُعلّق حسابك تلقائياً — هذه المرة دون إشعار مسبق كافٍ.
الطريقة الصحيحة هي ربط SES بـ SNS لاستقبال إشعارات Bounce وComplaint فور حدوثها:
# ربط هوية البريد بـ SNS لإشعارات Bounce
aws sesv2 put-email-identity-feedback-attributes \
--email-identity example.com \
--email-forwarding-enabled false \
--region us-east-1
ثم اضبط Configuration Set لإرسال أحداث الإرسال لـ SNS أو CloudWatch:
# إنشاء Configuration Set
aws sesv2 create-configuration-set \
--configuration-set-name my-config-set \
--region us-east-1
راجع التوثيق الرسمي لـ SES لإعداد Event Destinations داخل Configuration Set — الخطوات تختلف حسب نوع الوجهة (SNS، CloudWatch، Kinesis).
سيناريو حقيقي: التشخيص الخاطئ الشائع
المشكلة ظهرت في بيئة staging: الرسائل تُرسَل بنجاح لعناوين الفريق الداخلي، لكن لا شيء يصل لعملاء beta. السجلات تُظهر MessageId صحيحاً — أي أن SES قَبِل الرسالة من الناحية التقنية.
التشخيص الأول كان خاطئاً: ظننا أن المشكلة في إعداد SPF أو DKIM لأن بعض رسائل الاختبار وصلت. الواقع أن الرسائل التي وصلت كانت كلها لعناوين موثّقة مسبقاً في حساب SES، والرسائل التي لم تصل كانت لعناوين خارج قائمة التوثيق.
المفتاح كان في فحص SES Event Logs في CloudWatch — ظهر فيها Rendering Failure لبعض الرسائل وSend ناجح لأخرى. لكن الرسائل التي رُفضت بسبب Sandbox لم تظهر في السجلات أصلاً لأنها رُفضت قبل الإرسال الفعلي.
الدرس: MessageId في استجابة SES يعني أن الرسالة قُبلت للمعالجة، لا أنها وصلت. في وضع Sandbox، الرسالة المرسلة لعنوان غير موثّق قد تُرفض بعد القبول الأولي.
- طلب الإرسال: تطبيقك يستدعي SES API.
- القبول الأولي: SES يُعيد
MessageId— هذا لا يعني الوصول. - فحص Sandbox: SES يتحقق إذا كان المستلم موثّقاً.
- الرفض الداخلي: إذا لم يكن موثّقاً، الرسالة تُسقط داخلياً.
- غياب السجل: هذا الرفض لا يظهر دائماً في CloudWatch بشكل واضح.
صلاحيات IAM المطلوبة للعمل مع SES
إذا كنت تُشغّل هذه الأوامر من دور IAM أو مستخدم محدود الصلاحيات، تأكد من وجود الصلاحيات التالية:
🔽 انقر لعرض سياسة IAM المطلوبة
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SESReadAndSend",
"Effect": "Allow",
"Action": [
"ses:GetSendQuota",
"ses:ListIdentities",
"sesv2:GetAccount",
"sesv2:ListEmailIdentities",
"sesv2:CreateEmailIdentity",
"sesv2:PutEmailIdentityFeedbackAttributes",
"sesv2:CreateConfigurationSet",
"sesv2:SendEmail"
],
"Resource": "*"
}
]
}
لاحظ أن عدة عمليات Read/List في SES تتطلب "Resource": "*" لأن Service Authorization Reference لا يدعم تقييد الموارد على مستوى ARN لهذه الإجراءات تحديداً. تحقق دائماً من مرجع تفويض خدمة SES قبل تضييق الصلاحيات.
الخلاصة والخطوات التالية — الخروج من Sandbox في SES
وضع Sandbox في Amazon SES ليس عقبة تقنية — هو بوابة ثقة. AWS يريد أن يرى أنك تفهم معايير إرسال البريد الإلكتروني قبل أن يمنحك وصولاً غير مقيّد لخوادمه.
الخطوات الحاسمة:
- تحقق من وضعك الحالي باستخدام
aws sesv2 get-accountفي كل منطقة تستخدمها. - وثّق نطاقك وفعّل DKIM قبل تقديم الطلب.
- اكتب طلب رفع الحد بتفصيل كافٍ — اشرح نوع البريد، مصدر القائمة، وآلية التعامل مع Bounce وComplaint.
- بعد الموافقة، أعدّ مراقبة Bounce وComplaint فوراً — لا تنتظر حتى تظهر مشكلة.
للمزيد من التفاصيل، راجع التوثيق الرسمي لطلب وصول الإنتاج في SES.
مسرد المصطلحات
| المصطلح | التعريف |
|---|---|
| Sandbox Mode | وضع افتراضي في SES يقيّد الإرسال لعناوين موثّقة فقط، يُطبَّق على كل حساب جديد. |
| Verified Identity | عنوان بريد إلكتروني أو نطاق تم التحقق من ملكيته في SES عبر رابط تأكيد أو سجل DNS. |
| Bounce Rate | نسبة الرسائل التي لم تصل لصناديق البريد المستهدفة — ارتفاعها يُعرّض الحساب للتعليق. |
| Complaint Rate | نسبة المستلمين الذين أبلغوا عن الرسالة كـ spam — تُراقَب بدقة من AWS. |
| Configuration Set | مجموعة قواعد في SES تتحكم في تتبع أحداث الإرسال وتوجيهها لخدمات مثل SNS أو CloudWatch. |
تعليقات
إرسال تعليق