SSD Nodes Learn Hosting plans →
الأدلة Matt Connorبقلم Matt Connor · آخر تحديث في 2026-08-28

استضافة mailcow على VPS يقبل Gmail البريد المرسل

اختبر المنفذ 25 قبل تثبيت mailcow، فحظره يبقي البريد في قائمة الانتظار. واضبط DNS لتفادي خطأ Gmail ‏550 5.7.25 بسبب سجل PTR.

ما الذي ستبنيه

خادم بريد كامل على جهاز تملكه: SMTP لإرسال البريد واستقباله، وIMAP لمزامنة هاتفك وحاسوبك المحمول، وعميل بريد إلكتروني عبر الويب، ومرشح للرسائل المزعجة يمنح كل رسالة درجة في الاتجاهين. يجمع mailcow-dockerized بين Postfix وDovecot وRspamd وبريد SOGo عبر الويب وMariaDB وRedis وعميل ACME في مكدس Docker Compose واحد، لذلك لا تمثل البرمجيات الجزء الأصعب. سيعمل الخادم لديك خلال نصف ساعة.

الجزء الأصعب هو كل ما يحيط به. البريد الإلكتروني هو الخدمة الوحيدة التي لا تثق فيها بقية الإنترنت بنشاط بخادم جديد تماماً، والفارق بين «إنه يعمل» و«Gmail يبتلع كل رسالة بصمت» يتوقف على 4 سجلات DNS وإعداد واحد لسمعة IP قد لا تملك السيطرة الكاملة عليه. اقرأ المتطلبات المسبقة أدناه قبل استئجار أي شيء. إذا قررت بعد قراءتها أن الجهد اللازم لبناء السمعة لا يستحق العناء، فهذا جواب مشروع. يصنّف ملخصنا لما يستحق الاستضافة الذاتية فعلاً في 2026 البريد الإلكتروني ضمن «فقط إذا كنت تعنيه حقاً» لهذه الأسباب تحديداً.

المتطلبات الأساسية هي المشروع

إذا أغفلت أيّاً من هذه المتطلبات، فسترسل بريداً لا يصل أبداً. فيما يلي ترتيب تقريبي حسب مدى تسبب كل متطلب في المشكلات:

يجب أن يكون المنفذ 25 الصادر مفتوحاً. يسلّم خادمك البريد إلى Gmail وMicrosoft عبر TCP port 25. يحظر عدد كبير من موفري VPS وcloud المنفذ 25 الصادر افتراضياً لمكافحة الرسائل المزعجة. يكون الحظر صامتاً؛ فلا تظهر أخطاء عند الإقلاع، ويبدو كل شيء سليماً، لكن البريد يبقى في قائمة الانتظار إلى الأبد. اختبر ذلك قبل تثبيت أي شيء. إذا كان المنفذ محظوراً، فالحل الوحيد هو فتح تذكرة دعم وطلب فتحه من موفرك. يفتح بعض الموفّرين المنفذ للحسابات القديمة، بينما لن يفتحه بعضهم إطلاقاً.

عنوان IP نظيف ذو سمعة قابلة للاستخدام. تكون عناوين IP المعاد تخصيصها في VPS مدرجة مسبقاً في قوائم الحظر بسبب رسائل مزعجة أرسلها مستأجر سابق. افحص عنوانك عبر خدمة مثل Spamhaus lookup أو mxtoolbox قبل الالتزام. يعني إدراج عنوان IP رفضاً لا يمكنك تجاوزه بتعديل الشيفرة.

التحكم في DNS مع سجل PTR صحيح. تحتاج إلى إضافة سجلات إلى zone نطاقك، وتحتاج إلى reverse DNS (PTR) لعنوان IP الخاص بالخادم، بحيث يشير إلى اسم مضيف البريد. لا يُضبط PTR في لوحة DNS لديك في الغالب، بل تديره الجهة المالكة لعنوان IP. لذلك تضبطه من لوحة تحكم موفّر VPS أو عبر تذكرة دعم.

تُعدّ ذاكرة RAM بسعة 6 GiB و2 vCPU الحد الأدنى المريح. الحد الأدنى الذي يحدده mailcow هو 6 GiB من RAM مع 1 GiB من swap لتثبيت خاص، مع التوصية بـ8 GiB عندما يعتمد عليه عدد قليل من المستخدمين. عند النزول عن نحو 2.5 GiB، تعرض generate_config.sh تعطيل برنامج فحص الفيروسات ClamAV حتى لا تبدأ النواة في إنهاء الحاويات. خصص له 20 GB من SSD عند البدء.

اسم DNS، وليس عنوان IP مجرداً. اختر اسم مضيف مثل mail.example.com. يصبح هذا الاسم نفسه MAILCOW_HOSTNAME، وsubject لشهادة TLS، والهدف لسجل PTR، وراية SMTP. حافظ على اتساقه في كل المواضع.

الخطوة 1، أثبت أن المنفذ الصادر 25 مفتوح

نفّذ ذلك أولاً. إذا فشل هذا الاختبار، فكل ما تفعله بعده سيكون بلا جدوى. من VPS جديد، حاول فتح جلسة SMTP مع خادم بريد فعلي:

sudo apt update && sudo apt install -y netcat-openbsd
nc -vz -w 5 gmail-smtp-in.l.google.com 25

تظهر النتيجة الناجحة فوراً:

Connection to gmail-smtp-in.l.google.com (142.250.x.x) 25 port [tcp/smtp] succeeded!

يبقى المنفذ المحظور معلّقاً مدة خمس ثوانٍ كاملة، ثم يفشل:

nc: connect to gmail-smtp-in.l.google.com port 25 (tcp) timed out: Operation now in progress

هذه المهلة هي الحظر. إنّه عامل تصفية للشبكة لدى موفّر الخدمة، وليس جدارك الناري، لذلك لن يعالجه أي تغيير محلي. افتح تذكرة بالنص التالي: "Please enable outbound TCP port 25 for my VPS at <IP>; I am running a legitimate mail server." لا تثبّت mailcow حتى يعرض هذا الاختبار النتيجة "succeeded". لاحظ أن المنفذ الوارد 25، أي وصول الخوادم الأخرى إليك، مسار منفصل ويكون مفتوحاً عادةً؛ فالجهة التي يقيّدها موفّرو الخدمة هي الاتصالات الصادرة.

الخطوة 2، اضبط سجلات DNS الآن

تستغرق تغييرات DNS وقتاً حتى تنتشر، لذلك انشر كل ما يمكنك نشره قبل التثبيت. افترض أن نطاقك هو example.com، وأن مضيف البريد هو mail.example.com، وأن عنوان IP هو 10.0.0.10. أنشئ السجلات التالية في منطقتك:

mail.example.com.        A      10.0.0.10
mail.example.com.        AAAA   2001:db8::10          ; only if you have IPv6
example.com.             MX  10 mail.example.com.
example.com.             TXT    "v=spf1 mx -all"
_dmarc.example.com.      TXT    "v=DMARC1; p=none; rua=mailto:postmaster@example.com"

يسمح سجل SPF بعبارة «لا يُسمح بالإرسال لهذا النطاق إلا إلى MX الخاص بي، وارفض الباقي». ابدأ DMARC بالقيمة p=none حتى تتمكن من مراقبة التقارير دون رفض رسائلك، ثم شدّد السياسة إلى p=quarantine وبعدها إلى p=reject عند التأكد من تطابق المحاذاة. يوجد سجلان غير مضافين عمداً: DKIM، الذي ينشئه mailcow لك في الخطوة 6، وPTR، الذي تضبطه الآن من لوحة مزود الخدمة.

اضبط PTR، أي DNS العكسي، للعنوان 10.0.0.10 على mail.example.com، وهي القيمة المطابقة تماماً لـ MAILCOW_HOSTNAME. هذا هو السجل الوحيد الذي ينساه معظم الأشخاص، وتعتمد عليه مزودات الخدمة الكبرى في الرفض. إذا لم تتضمن لوحتك حقلاً لـrDNS، فأرسل طلب دعم.

الخطوة 3: تثبيت Docker

يحتاج mailcow إلى Docker Engine مع إضافة Compose v2. استخدم سكربت التثبيت الرسمي من Docker بدلاً من حزمة docker.io الخاصة بـUbuntu، لأن هذه الحزمة لا تتضمن إضافة Compose:

curl -fsSL https://get.docker.com | sudo sh
sudo docker compose version

يجب أن يظهر لك سطر Docker Compose version v2.x. إذا طبع docker compose version القيمة docker: 'compose' is not a docker command، فهذا يعني أن Docker Engine مثبّت، لكن إضافة Compose غير مثبّتة. ثبّت الإضافة من مستودع Docker، أو أعد تشغيل السكربت أعلاه، أو اتبع دليلنا الأساسي حول Docker Compose، الذي يثبت كليهما من مستودع apt الخاص بـDocker.

الخطوة 4: استنساخ mailcow وإنشاء الإعدادات

cd /opt
sudo git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
umask
sudo ./generate_config.sh

تحقق من أن umask يطبع 0022 أولاً. يرفض mailcow إجراء البناء عند استخدام قناع ملفات فردي. تمنحك جلسة root جديدة على Ubuntu 24.04 القيمة 0022 بالفعل. بعد ذلك، يطلب البرنامج المعلومة المهمة الوحيدة: اسم المضيف المؤهل بالكامل. أدخل mail.example.com. يجب أن تطابق القيمة سجل A وسجل PTR تماماً. يكتب البرنامج mailcow.conf، وهو ملف البيئة الوحيد الذي تقرؤه الحزمة كاملة. افتحه إذا احتجت إلى تغيير منافذ الويب (HTTP_PORT وHTTPS_PORT) أو تعطيل ClamAV على خادم محدود الموارد:

MAILCOW_HOSTNAME=mail.example.com
HTTP_PORT=80
HTTPS_PORT=443
SKIP_CLAMD=n          # set to y to drop the virus scanner on a <2.5 GiB box

يُعد SKIP_FTS=y الخيار الآخر على خادم منخفض الذاكرة. البحث في النص الكامل هو ثاني أكثر مكونات mailcow استهلاكاً للذاكرة، وفقاً لوثائق mailcow. وتكلفة تعطيله الوحيدة هي فقدان البحث في نص الرسائل داخل webmail.

اترك HTTP_PORT=80 وHTTPS_PORT=443 كما هما، ما لم تكن خدمة أخرى على المضيف تستخدمهما بالفعل. يحتاج عميل ACME المضمّن في mailcow إلى إمكانية الوصول إلى المنفذ 80 من الإنترنت للحصول على الشهادة. لذلك لا تُشغّل إعداد nginx-plus-Certbot منفصلاً على الخادم نفسه. يُصدر mailcow شهادات TLS الخاصة به ويجددها داخلياً، وستؤدي خدمة ثانية تستحوذ على المنفذين 80 و443 إلى تعطيل ذلك. وينطبق الأمر نفسه على أي خدمة أخرى تريد واجهة ويب عامة. لذلك يجب وضع إعداد مثل إعادة تصميم Halcyon لمكتبة Jellyfin لتصبح متجر فيديو من التسعينيات على مضيف مختلف، لأنه يتوقع وجود Reverse Proxy خاص به على المنفذ 443. الاستثناء هو الخدمة التي لا تطلب منفذ ويب عاماً مطلقاً، مثل مرحل RustDesk مستضاف ذاتياً. فهو يستمع فقط ضمن النطاق الخاص به من 21115 إلى 21119، ولذلك يمكنه مشاركة الخادم، بشرط توفر سعة كافية في النطاق الترددي.

الخطوة 5، بدء المكدس وتسجيل الدخول

sudo docker compose pull
sudo docker compose up -d
sudo docker compose ps

ينزّل الأمر نحو عشرين صورة تقريباً؛ انتظر بضع دقائق حتى يكتمل. عندما يعرض docker compose ps أن جميع الحاويات running (أو healthy)، افتح https://mail.example.com في المتصفح. بيانات دخول المسؤول الافتراضية هي اسم المستخدم admin وكلمة المرور moohoo. غيّر كلمة المرور فوراً من واجهة إدارة النظام ضمن Access → Administrators. إذا حذّر المتصفح من NET::ERR_CERT_AUTHORITY_INVALID، فهذا يعني أن شهادة ACME لم تُصدر بعد. راجع قسم فشل ACME أدناه قبل اعتبار الإعداد معطلاً؛ فمن الطبيعي استخدام شهادة بديلة موقّعة ذاتياً خلال الدقيقة أو الدقيقتين الأوليين.

الخطوة 6، إضافة نطاق وصندوق بريد ونشر DKIM

في واجهة الإدارة، افتح صفحة إعداد البريد (Configuration → Mail Setup)، ومن علامة التبويب Domains انقر Add domain وأدخل example.com. بعد ذلك، ضمن Mailboxes، انقر Add mailbox لإنشاء you@example.com مع كلمة مرور. سيكون صندوق البريد هذا جاهزاً للعمل ويمكن الوصول إليه عبر IMAP.

والآن مفتاح DKIM. انتقل إلى Configuration → ARC/DKIM keys؛ قد يكون mailcow أنشأ مفتاحاً تلقائياً عند إضافة النطاق. وإذا لم يكن قد أنشأه، فأنشئه من الصفحة نفسها، واختر النطاق، وأبقِ selector على dkim، واختر 2048-bit، ثم انقر Add. انسخ قيمة TXT الطويلة التي تظهر وانشرها بالشكل التالي:

dkim._domainkey.example.com.  TXT  "v=DKIM1;k=rsa;t=s;s=email;p=MIIBIjANBgkqh...long-key...QAB"

تحتوي صفحة Domains في mailcow على زر DNS يعرض كل سجل يتوقعه النظام، ويُظهر علامة خضراء أو علامة حمراء لما هو منشور فعلياً. استخدمها كقائمة تحقق، واحرص على ظهور اللون الأخضر في كل صف قبل اختبار قابلية تسليم البريد. ظهور صف DKIM باللون الأحمر بعد النشر يعني عادةً أن المفتاح قُسّم بشكل غير صحيح بين أجزاء TXT؛ إذ يتجاوز مفتاح 2048-bit حد 255 محرفاً للسلسلة النصية الواحدة في TXT، لذلك الصقه كقيمة منطقية واحدة، ودَع مزود DNS يقسمه إلى أجزاء نيابةً عنك.

الخطوة 7: اختبر قابلية التسليم واعمل للوصول إلى 10/10

انتقل إلى mail-tester.com، وانسخ العنوان العشوائي الذي يظهره الموقع، ثم أرسل إليه رسالة من صندوق بريدك الجديد. سجّل الدخول إلى بريد SOGo عبر الويب على https://mail.example.com/SOGo، وأرسل الرسالة من هناك. ثم انقر على "Then check your score".

استهدف الحصول على 10/10. فيما يلي أسباب الخصومات الشائعة:

  • لم تتم محاذاة SPF: سجل MX/SPF مفقود، أو أن عنوان IP المرسل غير مشمول فيه. أعد التحقق من سجل SPF بصيغة TXT.
  • تعذّر التحقق من توقيع DKIM: سجل dkim._domainkey بصيغة TXT مفقود، أو لم يكتمل نشره بعد، أو تعرض للتلف. هذا هو الخطأ الأكثر شيوعاً.
  • لا يوجد PTR / عدم تطابق PTR: لا يحل DNS العكسي إلى mail.example.com. أصلح ذلك لدى مزود الخدمة.
  • العنوان مدرج في قائمة حظر: يعود ذلك إلى سمعة عنوان IP السابقة. اطلب إزالة العنوان من القائمة، أو اطلب عنوان IP أنظف.

لا ترسل رسائل فعلية إلى Gmail أو Outlook قبل أن تظهر النتيجة 10/10. تؤدي النتيجة المنخفضة مع عنوان IP جديد إلى وضع نطاقك في قائمة المراقبة منذ اليوم الأول.

الخطوة 8، وصّل برنامج بريد حقيقياً

اضبط Thunderbird أو Apple Mail أو هاتفك للاتصال بالخادم باستخدام هذه الإعدادات. اسم مضيف الخادم هو mail.example.com في جميع الحالات:

  • IMAP: المنفذ 993، مع SSL/TLS (أو المنفذ 143 مع STARTTLS)
  • إرسال SMTP: المنفذ 465، مع SSL/TLS (أو المنفذ 587 مع STARTTLS)
  • اسم المستخدم: العنوان الكامل، you@example.com
  • كلمة المرور: كلمة مرور صندوق البريد التي عيّنتها

لا ترسل رسائل العميل عبر المنفذ 25 مطلقاً. فهذا المنفذ مخصّص للاتصال بين الخوادم فقط. ولا يوفّر mailcow إرسالاً موثّقاً عبره، لذلك سيرفض الخادم العميل الذي يتصل به. إذا أبلغ العميل عن Relay access denied، فهذا يعني أنه يحاول الإرسال عبر المنفذ 25 أو من دون مصادقة. غيّر الإعداد إلى المنفذ 465 أو 587، واستخدم بيانات اعتماد صندوق البريد.

الخطوة 9: انسخ احتياطياً ما يهم فعلياً

يتضمن mailcow برنامجاً نصياً للنسخ الاحتياطي ينشئ لقطة من كل volume يحتوي على بيانات دائمة. شغّله على قرص خارجي أو على وحدة تخزين remote موصولة:

sudo MAILCOW_BACKUP_LOCATION=/opt/mailcow-backups \
  ./helper-scripts/backup_and_restore.sh backup all

يلتقط all ستة عناصر، وفقدان أيٍّ منها يعني فقدان البيانات: vmail (صناديق البريد الفعلية)، وcrypt (المفاتيح التي تفك تشفير vmail، ولا فائدة منها بدونه)، وmysql (قاعدة MariaDB التي تحتوي على النطاقات والمستخدمين والبدائل والإعدادات)، وredis (حالة قوائم الانتظار وذاكرة التخزين المؤقت)، وrspamd (بيانات spam/ham التي تعلّمها النظام)، وpostfix (قائمة انتظار البريد). يعمل البرنامج داخل حاوية مساعدة تكتب أرشيفات مضغوطة، لذلك تظل النسخ الاحتياطية متسقة حتى أثناء تشغيل الـstack. أتمت تشغيله باستخدام cron ليلاً، وأضف --delete-days 14 لحذف مجموعات النسخ القديمة. تتوقف مهمة cron أحياناً عن العمل من دون إصدار أي تنبيه، لذلك أرسل حالة الخروج من البرنامج إلى مكان ستلاحظها فيه فعلياً؛ إذ ينفّذ خادم ntfy مستضاف ذاتياً طلب curl في سطر واحد من إدخال cron نفسه، ويرسل الفشل إلى هاتفك في الليلة التي يحدث فيها. الاستعادة هي تشغيل البرنامج نفسه مع restore؛ إذ يعرض اللقطات ويسمح لك باختيار ما تريد استعادته. النسخة الاحتياطية التي لم تختبر استعادتها قط ليست نسخة احتياطية، بل مجرد أمل. نفّذ اختباراً تجريبياً عليها أولاً إلى VPS مخصص للاختبار.

الخطوة 10، التحديث وفق جدول زمني

يُحدِّث mailcow نفسه عبر البرنامج النصي الخاص به. يسحب البرنامج النصي الشيفرة الجديدة، ويُجري ترحيل mailcow.conf، ويحمّل الصور مسبقاً، ثم يعيد تشغيل الحاويات بالترتيب:

cd /opt/mailcow-dockerized
sudo ./update.sh --check   # reports whether an update exists, changes nothing
sudo ./update.sh           # applies it

أنشئ نسخة احتياطية أولاً (الخطوة 9)، لأن عكس ترحيل المخطط صعب. تصدر التحديثات باستمرار وتتضمن إصلاحات أمنية للخدمات التي يمكن الوصول إليها من الإنترنت، لذلك لا تترك خادم البريد دون تحديث لأشهر. إذا أدى أحد التحديثات إلى جعل حاوية غير سليمة، يحدد sudo docker compose logs --tail=50 <service>-mailcow الخدمة التي فشل تشغيلها مجدداً.

ملاحظة حول تعزيز الأمان

يشغّل mailcow خدمة netfilter الخاصة به (netfilter-mailcow)، وهي تحظر عناوين IP التي تكرر محاولات الاتصال بمنافذ البريد وwebmail، لذلك تكون جهة البريد محمية تلقائياً. لكن ذلك لا يشمل SSH على الخادم نفسه، إذ يظل مكشوفاً أمام الإنترنت ومعرّضاً لمحاولات التخمين القسري. اجمع هذا الإعداد مع Fail2ban لمراقبة سجل مصادقة SSH، واستخدم تسجيل الدخول بالمفاتيح فقط. احمِ واجهة إدارة mailcow بكلمة مرور قوية، ويفضل أن تمنع الوصول إليها من الإنترنت العام أو تضعها خلف VPN.

أوضاع الفشل، مع السلاسل النصية الدقيقة

تتراكم الرسائل في قائمة البريد ولا تُسلَّم أبداً. شغّل sudo docker compose exec postfix-mailcow postqueue -p، أو اقرأ قائمة انتظار البريد في واجهة الإدارة؛ ستبقى الإدخالات مؤجلة مع ظهور:

status=deferred (connect to gmail-smtp-in.l.google.com[142.250.x.x]:25: Connection timed out)

يعني ذلك أن مزوّد الخدمة يحظر المنفذ الصادر 25 (الخطوة 1). لا يمكن لأي إعداد إصلاح ذلك، لذا افتح تذكرة دعم. المشكلة ليست في DNS ولا في TLS؛ والعلامة الفارقة هي الكلمة timed out مقابل MX بعيد على المنفذ 25.

يضع Gmail كل الرسائل في البريد العشوائي أو يرفض تسليمها. افتح الرسالة في Gmail، واختر "Show original"، ثم اقرأ نتائج المصادقة. يعني ظهور dkim=fail أو dkim=none أن سجل TXT الخاص بـ dkim._domainkey مفقود أو مشوّه أو لم ينتشر بعد. أعد نشر القيمة نفسها تماماً كما تعرضها صفحة ARC/DKIM، وانتظر مدة TTL. يعني ظهور spf=fail أن سجلات SPF/MX لا تشمل عنوان IP الخاص بك. التوافق بين النطاقات هو العامل الحاسم؛ يكفي فشل فحص واحد لوضع الرسالة في البريد العشوائي.

يرفض المزوّدون الكبار الاتصال. تتضمن رسائل الارتداد أو سجلات Postfix رفض Gmail لسجل PTR:

550-5.7.25 [10.0.0.10] The IP address sending this message does not have a PTR
550-5.7.25 record setup, or the corresponding forward DNS entry does not match
550 5.7.25 the sending IP. As a policy, Gmail does not accept messages from IPs
550 5.7.25 with missing PTR records.

يعني رمز 550 5.7.25 أن DNS العكسي مفقود أو غير متطابق. اضبط سجل PTR لعنوان IP الخاص بك على mail.example.com لدى المزوّد (الخطوة 2). يجب أن يتطابق السجل الأمامي (A) مع السجل العكسي (PTR)، ويجب أن يشيرا كلاهما إلى اسم المضيف نفسه الذي يعرّف به mailcow نفسه للخوادم الأخرى.

يعرض المتصفح تحذيراً بشأن الشهادة ولا يختفي أبداً. فشلت حاوية acme-mailcow في الحصول على شهادة حقيقية. افحص سجلها:

sudo docker compose logs acme-mailcow | tail -n 40

تعني سطرية مثل Cannot validate any hostnames, skipping Let's Encrypt for 1 hour. أو فشل التحدي أن المنفذ 80 غير قابل للوصول من الإنترنت، أو أن سجل A لا يشير إلى هذا الخادم. تأكد من أن mail.example.com يحل إلى هذا الخادم، وافتح المنفذين 80 و443 عبر أي جدار ناري على المضيف، وتأكد من عدم وجود عملية أخرى تستمع على هذين المنفذين. بعد إصلاح السبب، أعد تشغيل العميل باستخدام sudo docker compose restart acme-mailcow بدلاً من انتظار انتهاء فترة التراجع التي تمتد ساعة.

FAQ

هل يستحق تشغيل خادم البريد ذاتياً فعلاً؟

إذا كنت تريد امتلاك البيانات، وإنشاء aliases غير محدودة، والتحكم الكامل، فنعم. يوفّر لك mailcow حزمة احترافية بتكلفة VPS. لكن ضمان وصول الرسائل يتطلب عملاً مستمراً: سمعة IP، وتوافق إعدادات DNS، ومراقبة قوائم الحظر لا تنتهي تماماً. إذا كان العنوان التجاري بالغ الأهمية، وكان وجود رسالة واحدة في مجلد الرسائل غير المرغوب فيها لدى شخص ما ليوم واحد يسبب لك خسارة، فإن استخدام مزود مُدار هو الخيار العملي. شغّل البريد ذاتياً عندما تقدّر التحكم أكثر من الراحة، وتكون مستعداً لإدارته فعلياً. إذا كان هدفك الحقيقي هو إبقاء بياناتك بعيداً عن خوادم الآخرين، وليس البريد تحديداً، فابدأ بخدمة لا يملك الآخرون حق التصويت بشأنها: لا تواجه مكتبة الصور أي مشكلة في وصول الرسائل، وتغطي مقارنتنا بين PhotoPrism وImmich الحد الأدنى من RAM وأوامر النسخ الاحتياطي لهذا الإعداد على النوع نفسه من VPS.

كيف أعرف ما إذا كان المنفذ الصادر 25 محجوباً؟

شغّل nc -vz -w 5 gmail-smtp-in.l.google.com 25 من الخادم. تعني العبارة "succeeded!" أن المنفذ مفتوح؛ أما ظهور timed out بعد الانتظار فيعني أن مزود الخدمة يحجبه. هذا هو السبب الأكثر شيوعاً لعجز خادم مستضاف ذاتياً عن إرسال البريد رغم قدرته على استقباله، والحل الوحيد هو أن يفتح مزود الخدمة المنفذ؛ ولا يمكن لأي إعداد محلي تغييره.

لماذا تصل رسائلي إلى مجلد الرسائل غير المرغوب فيها في Gmail؟

يكون السبب في الغالب هو تعطل سلسلة المصادقة. استخدم "Show original" في Gmail وابحث عن spf=pass وdkim=pass وdmarc=pass. يشير dkim=fail إلى سجل dkim._domainkey من نوع TXT مفقود أو غير صحيح؛ كما يضر عدم تطابق PTR أو استخدام IP جديد بلا سجل إرسال سابق بسمعة الخادم. ارفع نتيجة mail-tester.com إلى 10/10 أولاً، ثم حسّن سمعة IP تدريجياً بإرسال بضع رسائل يومياً وزيادة العدد لاحقاً، بدلاً من إرسال كمية كبيرة منذ اليوم الأول.

ما الذي أحتاج إلى نسخه احتياطياً تحديداً؟

شغّل backup_and_restore.sh backup all واحتفظ بالمجموعة كاملة خارج الخادم. يلتقط الأمر vmail، أي صناديق البريد، وcrypt، أي المفاتيح التي تفك تشفيرها، وقاعدة بيانات MariaDB التي تحتوي على النطاقات والمستخدمين وaliases والإعدادات، وRedis، والبيانات التي تعلمها Rspamd، وقائمة Postfix. يكون crypt volume هو العنصر الذي يتجاهله الناس غالباً؛ فمن دونه تصبح نسخة vmail الاحتياطية ciphertext غير قابلة للقراءة. اختبر استعادة النسخة على خادم تجريبي مرة واحدة على الأقل.

هل يمكنني تشغيل mailcow على VPS بسعة 2 GB؟

ليس بشكل مريح. يعرض generate_config.sh تعطيل ClamAV عندما تقل الذاكرة عن نحو 2.5 GiB، وحتى عندئذ تتنافس Rspamd وClamAV وDovecot وMariaDB على الذاكرة، ما يؤدي إلى استخدام swap وإنهاء العمليات بسبب OOM تحت أي حمل فعلي. اعتبر 6 GiB مع 1 GiB من swap الحد الأدنى لتثبيت مستقر لمستخدم واحد، وانتقل إلى 8 GiB فور اعتماد أكثر من شخصين عليه.