🛡️ مصادقة البريد وقابلية التسليم

رأس List-Unsubscribe: كيف تُعدّ إلغاء الاشتراك بنقرة واحدة بالطريقة الصحيحة

أعدّ رأسَي List-Unsubscribe وList-Unsubscribe-Post: صيغة RFC 8058، وقواعد نقطة النهاية، وتوقيع DKIM، والاختبار، ومتطلبات Gmail وYahoo.

رسم لزر مضيء واحد على بطاقة بريد
الجواب السريع

لتفعيل إلغاء الاشتراك بنقرة واحدة تُضيف رأسين إلى كل رسالة تسويقية: List-Unsubscribe: <https://example.com/u/TOKEN> وList-Unsubscribe-Post: List-Unsubscribe=One-Click. يجب أن يقبل رابط HTTPS طلب POST ويُلغي الاشتراك فورًا بلا إعادة توجيه ولا ملفات تعريف ارتباط ولا تسجيل دخول، ويجب إدراج الرأسين في توقيع DKIM. يشترطه Gmail من المرسِلين بالجملة (5,000+ رسالة يوميًا) وينصّ على أن mailto: أو رابطًا عاديًا وحده لا يستوفي الشرط؛ ويجب تنفيذ الطلبات خلال 48 ساعة (وYahoo تقول يومين).

رابط «Unsubscribe» الصغير الذي يظهر بجانب اسم المرسِل في Gmail وYahoo ليس سحرًا. إنه يُعرض انطلاقًا من زوج رؤوس بريد يجب أن يضمّنه نظام الإرسال لديك. منذ بدء سريان متطلبات Gmail وYahoo للمرسِلين بالجملة في فبراير 2024 لم يعد إلغاء الاشتراك بنقرة واحدة «ميزة إضافية» للبريد التسويقي: بدونه تخاطر بالتقييد ووصول الرسائل إلى مجلد السبام، ومنذ بدأ Gmail تشديد الإنفاذ في نوفمبر 2025 بالرفض الصريح.

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

ما هي رؤوس List-Unsubscribe

يحدّد السلوكَ مواصفتان:

  • RFC 2369 يعرّف List-Unsubscribe: عنوان URI واحد أو أكثر بين أقواس زاوية تفصل بينها فواصل. يمكن أن يكون mailto: أو https:. تستخدمه عملاء البريد لعرض عنصر «إلغاء الاشتراك».
  • RFC 8058 يضيف List-Unsubscribe-Post ليتمكّن مزوّد البريد من إلغاء اشتراك المستخدم بطلب POST واحد عبر HTTPS دون فتح صفحة ويب.

معًا يبدوان هكذا:

List-Unsubscribe: <mailto:unsubscribe@example.com?subject=unsubscribe>,
 <https://example.com/unsubscribe/6f1c9a7e3b>
List-Unsubscribe-Post: List-Unsubscribe=One-Click

يتشدّد RFC 8058 في الرأس الثاني: يجب أن تحمل الرسالة رأس List-Unsubscribe-Post واحدًا فقط قيمته الزوج الوحيد List-Unsubscribe=One-Click، ويجب أن يحوي رأس List-Unsubscribe عنوان HTTPS واحدًا على الأقل.

مولّد List-Unsubscribeرؤوس إلغاء الاشتراك بنقرة واحدة وفق RFC 2369 وRFC 8058 مع متطلبات Gmail وYahooافتح الأداة →

لماذا تحتاجه: قواعد Gmail وYahoo

GmailYahoo
من يجب أن يلتزممن يرسل قرابة 5,000 رسالة أو أكثر يوميًا إلى حسابات Gmail الشخصية؛ وبعد بلوغها تبقى صفة «مرسِل بالجملة» دائمة«المرسِلون بالجملة» (لا تعطي الصفحة تعريفًا رقميًا)
رؤوس النقرة الواحدةمطلوبة للرسائل التسويقية والمشترَك بها، عبر RFC 8058رأس List-Unsubscribe مطلوب؛ وPOST وفق RFC 8058 موصى به بشدة
mailto: فقطلا يستوفي الشرطمقبول
رابط ظاهر في نص الرسالةمطلوبمطلوب (يجوز أن يقود إلى صفحة تفضيلات)
تنفيذ الطلبات خلال48 ساعةيومين
معدّل السبامأقل من 0.10%، ولا يبلغ 0.30% أبدًاأقل من 0.3% (محسوبًا على البريد الواصل إلى صندوق الوارد)

الرسائل المعاملاتية مثل إعادة تعيين كلمة المرور وتأكيد الطلب مستثناة من شرط النقرة الواحدة في Gmail، مع أن المستلمين لا المرسِلين هم من يقرّر أين يقع الحدّ بين الترويجي والمعاملاتي. أعد دائمًا فحص وثائق المزوّدين الحالية لأن التفاصيل تتغيّر.

الخطوة 1: ابنِ الرؤوس

  1. أنشئ رابط HTTPS فريدًا يصعب تخمينه لكل مستلم، مثل https://example.com/unsubscribe/<token>، حيث يحدّد الرمز المشترك والقائمة. يقول RFC 8058 إن عنوان URI يجب أن يحوي معلومات كافية لتحديد المستلم والقائمة ليكتمل الإلغاء تلقائيًا، وينبغي أن يتضمّن مكوّنًا معتّمًا أو يصعب تزويره.
  2. أضف اختياريًا عنوان mailto: بديلًا للعملاء الذين لا يدعمون النقرة الواحدة. تذكّر أن زوج HTTPS للنقرة الواحدة هو المعتدّ به في Gmail.
  3. أضف List-Unsubscribe-Post: List-Unsubscribe=One-Click. لا يعمل إلا إذا احتوى رأس List-Unsubscribe على رابط HTTPS.
استخدم HTTPS دائمًا

يشترط RFC 8058 عنوان HTTPS للنقرة الواحدة. يُعامَل رابط http:// كرابط عادي غير «نقرة واحدة» وقد يتجاهله Gmail.

الخطوة 2: ابنِ نقطة نهاية تعالج الـ POST

حين ينقر المستخدم «Unsubscribe» يرسل مزوّد البريد إلى رابطك طلبًا كهذا. يقول RFC 8058 إن الجسم هو زوج المفتاح/القيمة، وإن multipart/form-data هو نوع المحتوى الموصى به ويُسمح أيضًا بـ application/x-www-form-urlencoded، وإن الطلب يذهب إلى الرابط نفسه المستخدم للإلغاء اليدوي:

POST /unsubscribe/6f1c9a7e3b HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

List-Unsubscribe=One-Click

يجب أن تقوم نقطة النهاية بما يلي:

  • تقبل POST وتعيد حالة 2xx بسرعة. لا يحدّد الـ RFC رمز حالة بعينه، لكن أي شيء غير النجاح سيعدّه المزوّدون فشلًا.
  • تُلغي الاشتراك فورًا، بلا تسجيل دخول ولا CAPTCHA ولا صفحة تأكيد. الطلب لا يحمل ملفات تعريف ارتباط ولا ترويسات تفويض بالتصميم.
  • لا ترد أبدًا بإعادة توجيه: ينصّ RFC 8058 على أن المرسِل يجب ألا يعيد إعادة توجيه HTTPS للـ POST.
  • تكون متساوية الأثر (idempotent): استدعاؤها مرتين يجب ألا يُحدث خطأ.
  • لا تُلغِ الاشتراك عند GET أبدًا. برامج مكافحة السبام وماسحات الروابط تجلب العناوين الموجودة في رؤوس الرسائل تلقائيًا؛ فإن ألغى GET الاشتراك اختفى مشتركون حقيقيون. اعرض صفحة تأكيد عند GET بدلًا من ذلك.

معالج بسيط في ثلاث بيئات شائعة:

// Node.js (Express)
app.post('/unsubscribe/:token', express.urlencoded({ extended: false }), async (req, res) => {
  if (req.body['List-Unsubscribe'] !== 'One-Click') return res.sendStatus(400);
  await db.suppress({ token: req.params.token });   // idempotent
  res.sendStatus(200);
});
app.get('/unsubscribe/:token', (req, res) => res.send(renderConfirmPage(req.params.token))); // no state change
# Python (Flask)
@app.post('/unsubscribe/<token>')
def unsubscribe(token):
    if request.form.get('List-Unsubscribe') != 'One-Click':
        return '', 400
    suppress(token)          # idempotent
    return '', 200
// PHP
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['List-Unsubscribe'] ?? '') === 'One-Click') {
    suppress($token);        // idempotent
    http_response_code(200);
}

الخطوة 3: وقّع الرأسين بـ DKIM

يشترط RFC 8058 أن تحمل الرسالة توقيع DKIM صالحًا واحدًا على الأقل يغطّي رأسَي List-Unsubscribe وList-Unsubscribe-Post، وعلى المستقبِلين ألا يعرضوا النقرة الواحدة لرسالة لا يوجد فيها التوقيع. في رأس DKIM-Signature تسرد الوسمة h= الرؤوس الموقَّعة، فتأكد أنها تضمّ الاثنين. أغلب منصّات البريد تفعل ذلك عند تفعيل الميزة؛ وإن كنت ترسل عبر MTA خاص بك فأضفهما إلى قائمة الرؤوس الموقَّعة.

DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=mail;
  h=from:to:subject:date:message-id:list-unsubscribe:list-unsubscribe-post; ...

الخطوة 4: اختبره قبل الحملة

  1. أرسل رسالة اختبار إلى صندوق Gmail وصندوق Yahoo من النظام نفسه الذي يرسل حملاتك.
  2. ابحث عن رابط Unsubscribe بجانب اسم المرسِل (Gmail) أو في منطقة رأس الرسالة (Yahoo). قد يتطلب الأمر عدة رسائل من مرسِل جديد قبل أن يعرضه المزوّدون.
  3. افتح الرسالة الأصلية والصق الرؤوس في محلّل رؤوس للتأكد من وجود الرأسين ونجاح DKIM.
  4. أرسل POST إلى نقطتك بـ curl وتحقّق من استجابة 2xx وسجلّ إلغاء فعلي:
curl -i -X POST -d 'List-Unsubscribe=One-Click' https://example.com/unsubscribe/6f1c9a7e3b
# Expected: HTTP/2 200, and the address now appears in your suppression list.
curl -i https://example.com/unsubscribe/6f1c9a7e3b
# Expected: a confirmation PAGE (200) — and the address is still subscribed.

تصميم قائمة الإيقاف خلف نقطة النهاية

نقطة النهاية مجرّد الباب الأمامي. ما تكتبه هو الذي يحدّد هل يُحترم الإلغاء في كل مكان:

  • النطاق. قرّر هل تُلغي النقرة اشتراك الشخص من قائمة واحدة أم من فئة بريد أم من كل التسويق. شرط Gmail أن يُحترم الإجراء الذي اتخذه المستخدم في واجهة المزوّد، فإلغاء «القائمة فقط» الذي يترك الشخص في تدفقات ترويجية أخرى سيستمر في توليد الشكاوى.
  • اكتب قبل أن ترسل. افحص مخزن الإيقاف وقت الإرسال لا عند بناء الحملة فقط. حملة في الطابور منذ أمس يجب ألا تصل إلى من ألغى اشتراكه هذا الصباح، ونافذة الـ 48 ساعة في أسئلة Gmail قصيرة.
  • احتفظ بالسجلّ لا بالعلَم فقط. خزّن العنوان (أو بصمته) والقائمة والوقت والمصدر (one-click أو صفحة يدوية أو رد mailto). ستحتاج الدليل إن سألك منظِّم أو مزوّد.
  • عامل الرمز كصلاحية. يجب أن يحدّد مستلمًا واحدًا وقائمة واحدة، ويصعب تخمينه، ويُفضَّل ألا تنتهي صلاحيته لأن الناس يستخدمون رسائل قديمة. يلاحظ RFC 8058 أن على الخادم التحقق من صحة الجزء المعتّم.
  • قدّم صفحة تفضيلات عند GET. النقرة الواحدة تزيل الشخص فورًا؛ أما الصفحة البشرية التي تعرضها عند GET فيمكنها السماح بإعادة الاشتراك أو اختيار وتيرة أخف، فتستردّ بعض الجمهور الذي كان سيضيع.

أخطاء شائعة تكسر النقرة الواحدة

الخطأالنتيجةالحل
http:// بدل https://تُتجاهل النقرة الواحدةقدّم نقطة النهاية عبر HTTPS
نقطة النهاية تعيد التوجيه أو تتطلب تسجيل دخوليُعدّ الطلب فاشلًاأعد 200 مباشرة بلا مصادقة ولا توجيه
إلغاء الاشتراك عند GETماسحات الروابط تلغي اشتراك مستخدمين حقيقيينغيّر الحالة عند POST فقط
الرابط نفسه لكل مستلمنقرة واحدة تزيل الجميع، أو يتعذّر تحديد المستخدماستخدم رمزًا فريدًا لكل مستلم وقائمة
الرأسان غير موجودين في قائمة h= لـ DKIMقد يُتجاهل الرأس لأنه غير موقَّعأضف الرأسين إلى المجموعة الموقَّعة
mailto: فقط في الرأس (Gmail)لا يستوفي شرط النقرة الواحدةأضف عنوان HTTPS ورأس Post
معالجة الإلغاءات بعد أيامشكاوى ومخالفات للسياسةأوقف في الوقت الحقيقي، وخلال 48 ساعة كحدّ أقصى

وماذا بعد: حافظ على نظافة قوائمك

يعمل إلغاء الاشتراك بنقرة واحدة جنبًا إلى جنب مع نظافة القوائم: من يستطيع المغادرة بسهولة أقلّ احتمالًا بكثير أن ينقر «Report spam»، ومعدّل الشكاوى هو الرقم الذي يراقبه المزوّدون أكثر. اقرن هذا الإعداد بتنظيف دوري للقوائم، وراجع معدّلات الشكاوى والإلغاء بعد كل إرسال. لمجموعة قواعد المزوّدين الكاملة انظر قائمة متطلبات Gmail وYahoo للمرسِلين بالجملة، ولقراءة رؤوس رسالة اختبار مستلَمة انظر كيف تقرأ رؤوس البريد.

أسئلة شائعة

هل أحتاج رابط mailto وHTTPS معًا في List-Unsubscribe؟

رابط HTTPS وحده كافٍ للنقرة الواحدة. إضافة mailto: اختيارية وتعمل بديلًا للعملاء الذين لا يدعمون RFC 8058. ينصّ Gmail على أن mailto أو الرابط العادي وحده لا يستوفي شرطه.

لماذا لا يظهر زر Unsubscribe في Gmail؟

الأسباب الشائعة: غياب رأس List-Unsubscribe-Post أو عدم توقيعه، أو رابط http://، أو فشل SPF أو DKIM أو DMARC، أو حجم إرسال منخفض جدًا، أو سمعة مرسِل جديدة. افحص الرؤوس ونتائج المصادقة أولًا.

هل يحلّ إلغاء الاشتراك بنقرة محلّ رابط الإلغاء في نص الرسالة؟

لا. يتوقّع Gmail وYahoo كليهما: خيار النقرة الواحدة المعتمد على الرأس، ورابط إلغاء اشتراك ظاهر بوضوح في الرسالة.

كم أملك من الوقت لتنفيذ طلب الإلغاء؟

تقول أسئلة Gmail إن الطلبات يجب أن تُنفَّذ خلال 48 ساعة، وتقول متطلبات Yahoo خلال يومين. التنفيذ الفوري هو الأسلوب الآمن.

هل ينطبق List-Unsubscribe على البريد المعاملاتي؟

هو مطلوب للرسائل الترويجية والمشترَك بها. يستثني Gmail الرسائل المعاملاتية البحتة مثل إعادة تعيين كلمة المرور، لكن إضافته إلى الرسائل شبه الاشتراكية لا ضرر منها.

المراجع ومزيد من القراءة

  1. RFC 2369 — The Use of URLs as Meta-Syntax for Core Mail List Commands
  2. RFC 8058 — Signaling One-Click Functionality for List Email Headers
  3. RFC 6376 — DKIM Signatures
  4. Google — Email sender guidelines
  5. Google — Email sender guidelines FAQ
  6. Yahoo — Sender requirements and best practices

مقالات ذات صلة

مصادقة البريد وقابلية التسليم

متطلبات Gmail وYahoo للمرسِلين بالجملة: قائمة الامتثال الكاملة

قائمة عملية لقواعد Gmail وYahoo للمرسِلين بالجملة: SPF وDKIM وDMARC وإلغاء الاشتراك بنقرة وحدّ السبام 0.3%، مع طريقة التحقق من كل بند.

8 دقيقة قراءة
مصادقة البريد وقابلية التسليم

كيف تقرأ رؤوس البريد الإلكتروني: دليل خطوة بخطوة لتتبّع أي رسالة

تعلّم كيف تقرأ رؤوس البريد الإلكتروني: اعرضها في Gmail وOutlook، وتتبّع سلسلة Received، وافهم نتائج SPF وDKIM وDMARC خطوة بخطوة.

11 دقيقة قراءة
مصادقة البريد وقابلية التسليم

سجلّ SPF لـ Google Workspace وSendGrid ومزوّدين آخرين: كيف تدمجهم بأمان

كيف تكتب سجلّ SPF واحدًا لعدة مزوّدي بريد: الصيغة وأمثلة include وحدّ 10 استعلامات وطرح آمن من ~all إلى -all مع أمثلة عملية.

7 دقيقة قراءة