SSD Nodes Learn
تعلیمی Matt Connorتحریر: Matt Connor · اپ ڈیٹ شدہ 2026-07-24

VPS پر Mailcow انسٹال کرنے کا طریقہ

Mailcow کے لیے Port 25 کا ٹیسٹ کریں اور Gmail کے 550 5.7.25 PTR error سے بچنے کے لیے صحیح DNS ریکارڈز سیٹ کریں۔ مکمل گائیڈ یہاں موجود ہے۔

آپ کیا بنا رہے ہیں

آپ کے اپنے سرور پر ایک مکمل میل سرور: SMTP پیغام بھیجنے اور وصول کرنے کے لیے، IMAP تاکہ آپ کا فون اور لیپ ٹاپ ہم آہنگ (sync) رہیں، ایک ویب میل کلائنٹ، اور ایک اسپام فلٹر جو دونوں طرف سے ہر پیغام کو اسکور کرتا ہے۔ mailcow-dockerized میں Postfix، Dovecot، Rspamd، SOGo webmail، MariaDB، Redis اور ایک ACME کلائنٹ کو ایک Docker Compose اسٹیک میں اکٹھا کیا گیا ہے، اس لیے سافٹ ویئر کا استعمال مشکل حصہ نہیں ہے۔ آپ اسے آدھے گھنٹے میں چلا لیں گے۔

اصل مشکل کام اس کے ارد گرد کے عوامل ہیں۔ ای میل واحد سروس ہے جہاں انٹرنیٹ کے باقی حصے ایک بالکل نئے سرور پر بھروسہ نہیں کرتے۔ "یہ کام کر رہا ہے" اور "Gmail خاموشی سے ہر پیغام کو ڈیلیٹ کر دیتا ہے" کے درمیان کا فرق چار DNS ریکارڈز اور ایک IP-reputation سیٹنگ پر منحصر ہے جسے آپ شاید مکمل طور پر کنٹرول نہ کر سکیں۔ کوئی بھی چیز کرایے پر لینے سے پہلے نیچے دی گئی شرائط (prerequisites) پڑھ لیں۔ اگر ان کو پڑھنے کے بعد آپ کو لگے کہ reputation کی یہ محنت اس قابل نہیں ہے، تو یہ ایک درست فیصلہ ہے — 2026 میں خود سے ہوسٹ کرنے کے قابل چیزوں کا ہمارا جائزہ میں ای میل کو "صرف اگر آپ واقعی سنجیدہ ہیں" کے تحت ان ہی وجوہات کی بنا پر رکھا گیا ہے۔

ضروری شرائط ہی اصل منصوبہ ہیں

ان میں سے کوئی بھی شرط پوری نہ کرنے پر آپ کے بھیجے گئے ای میلز کبھی نہیں پہنچیں گے۔ نیچے ان شرائط کی فہرست دی گئی ہے، ترتیب ان کے عام ہونے کے لحاظ سے ہے:

Outbound port 25 کھلا ہونا چاہیے۔ آپ کا سرور Gmail اور Microsoft کو TCP port 25 کے ذریعے ای میل بھیجتا ہے۔ بہت سے VPS اور cloud providers spam کو روکنے کے لیے default طور پر outbound 25 کو block رکھتے ہیں۔ یہ block خاموش ہوتا ہے — boot کے وقت کوئی error نہیں آتا، سب کچھ ٹھیک نظر آتا ہے، لیکن ای میل ہمیشہ کے لیے queue میں پھنس جاتی ہے۔ کچھ بھی install کرنے سے پہلے اسے test کریں۔ اگر یہ block ہے، تو واحد حل provider کو support ticket بھیج کر اسے کھولنے کا کہنا ہے؛ کچھ providers پرانے accounts کے لیے ایسا کرتے ہیں، جبکہ کچھ کبھی نہیں کرتے۔

ایک صاف IP جس کی reputation اچھی ہو۔ VPS کے recycled IPs اکثر پچھلے tenant کے spam کی وجہ سے پہلے ہی blocklists پر ہوتے ہیں۔ کام شروع کرنے سے پہلے Spamhaus lookup یا mxtoolbox جیسی services پر اپنا IP check کریں۔ اگر IP listed ہے، تو آپ اسے code کے ذریعے ٹھیک نہیں کر سکتے اور ای میلs reject ہو جائیں گی۔

DNS پر کنٹرول اور درست PTR record۔ آپ کو اپنے domain کے zone میں records شامل کرنے ہوں گے، اور سرور کے IP کے لیے reverse DNS (PTR) کی ضرورت ہوگی جو آپ کے mail hostname کی طرف اشارہ کرے۔ PTR عام طور پر DNS panel میں set نہیں ہوتا — یہ اس کے پاس ہوتا ہے جو IP کا مالک ہو، اس لیے یہ آپ کے VPS provider کے control panel میں یا ticket کے ذریعے set کیا جاتا ہے۔

6 GiB RAM اور 2 vCPU کم از کم ضرورت ہے۔ private install کے لیے mailcow کی اپنی minimum requirement 6 GiB RAM اور 1 GiB swap ہے، جبکہ جب کچھ صارفین استعمال کرنا شروع کر دیں تو 8 GiB کا مشورہ دیا جاتا ہے۔ 2.5 GiB سے کم ہونے کی صورت میں، generate_config.sh ClamAV virus scanner کو disable کرنے کا آپشن دیتا ہے تاکہ kernel containers کو kill کرنا شروع نہ کر دے۔ شروع کرنے کے لیے 20 GB SSD دیں۔

ایک DNS name، صرف IP نہیں۔ mail.example.com جیسا hostname منتخب کریں۔ وہی ایک نام آپ کا MAILCOW_HOSTNAME، آپ کا TLS certificate subject، آپ کا PTR target، اور آپ کا SMTP banner بنے گا۔ اسے ہر جگہ یکساں رکھیں۔

Step 1 — Prove outbound port 25 is open

سب سے پہلے یہ کام کریں۔ اگر یہ فیل ہو جائے تو باقی تمام کوششیں ضائع ہیں۔ نئے VPS سے، کسی اصل mail server کے ساتھ 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!

اگر پورٹ بلاک ہے تو یہ پورے 5 سیکنڈ تک رکا رہے گا اور پھر فیل ہو جائے گا:

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

یہ timeout ہی بلاک ہونے کی نشانی ہے۔ یہ provider کی طرف سے network filter ہے، آپ کا firewall نہیں، اس لیے مقامی (local) تبدیلی سے یہ ٹھیک نہیں ہوگا۔ ایک ticket کھولیں: "Please enable outbound TCP port 25 for my VPS at <IP>; I am running a legitimate mail server." جب تک نتیجہ "succeeded" نہ آئے، mailcow انسٹال نہ کریں۔ یاد رکھیں کہ inbound 25 (دوسرے servers کا آپ سے رابطہ کرنا) ایک الگ راستہ ہے اور وہ عام طور پر کھلا ہوتا ہے — providers صرف outbound side کو throttle کرتے ہیں۔

Step 2 — اب DNS records سیٹ کریں

DNS تبدیلیاں پراپیگیٹ (propagate) ہونے میں وقت لیتی ہیں، اس لیے انسٹال کرنے سے پہلے تمام ممکنہ ریکارڈز شائع کر دیں۔ فرض کریں کہ آپ کا ڈومین example.com ہے، آپ کا میل ہوسٹ mail.example.com ہے، اور IP 10.0.0.10 ہے۔ اپنے زون (zone) میں یہ بنائیں:

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 پر شروع کریں تاکہ آپ اپنی میل باؤنس کیے بغیر رپورٹس دیکھ سکیں؛ جب الائنمنٹ (alignment) ثابت ہو جائے تو اسے p=quarantine اور پھر p=reject پر سیٹ کریں۔ دو ریکارڈز جان بوجھ کر چھوڑ دیے گئے ہیں: DKIM, جو mailcow آپ کے لیے Step 6 میں خود تیار کرے گا، اور PTR, جسے آپ ابھی اپنے فراہم کنندہ (provider) کے پینل میں سیٹ کریں گے۔

10.0.0.10 کے لیے PTR (reverse DNS) کو mail.example.com پر سیٹ کریں — جو کہ MAILCOW_HOSTNAME کی بالکل درست ویلیو ہے۔ یہ وہ واحد ریکارڈ ہے جسے اکثر لوگ بھول جاتے ہیں، اور بڑے فراہم کنندہ اس کی بنیاد پر میل ریجیکٹ کر دیتے ہیں۔ اگر آپ کے پینل میں rDNS کا فیلڈ موجود نہیں ہے، تو ایک ٹکٹ (ticket) ریز کر دیں۔

Step 3 — Docker Install کریں

mailcow کو Docker Engine اور Compose v2 plugin کی ضرورت ہوتی ہے۔ Ubuntu کے docker.io package کے بجائے Docker کا official convenience script استعمال کریں، کیونکہ اس package میں Compose plugin شامل نہیں ہوتا:

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 plugin موجود نہیں ہے۔ اس plugin کو Docker کے repository سے انسٹال کریں — اوپر دیا گیا script دوبارہ چلائیں، یا our Docker Compose basics guide پر عمل کریں، جو Docker کے اپنے apt repository سے دونوں چیزیں سیٹ اپ کرتا ہے۔

Step 4 — mailcow کلون کریں اور config بنائیں

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

پہلے چیک کریں کہ umask، 0022 پرنٹ کر رہا ہے — اگر فائل ماسک درست نہ ہو تو mailcow بلڈ کرنے سے انکار کر دیتا ہے، اور Ubuntu 24.04 کے نئے root shell میں آپ کو پہلے سے 0022 مل جاتا ہے۔ اس کے بعد اسکرپٹ ایک اہم چیز پوچھے گا: مکمل طور پر کوالیفائیڈ hostname۔ mail.example.com درج کریں — یہ ویلیو آپ کے A record اور PTR کے بالکل برابر ہونی چاہیے۔ یہ mailcow.conf لکھتا ہے، جو وہ واحد environment file ہے جسے پورا stack پڑھتا ہے۔ اگر آپ کو web ports (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

کم RAM والے سسٹم کے لیے SKIP_FTS=y ایک اور آپشن ہے: mailcow کی دستاویزات کے مطابق full-text search دوسری سب سے زیادہ میموری استعمال کرنے والی چیز ہے، اور اسے چھوڑنے سے صرف webmail میں body-text سرچ کا نقصان ہوگا۔

HTTP_PORT=80 اور HTTPS_PORT=443 کو ویسے ہی رہنے دیں، جب تک کہ ہوسٹ پر کوئی اور سروس انہیں استعمال نہ کر رہی ہو — mailcow کے اندرونی ACME client کو سرٹیفکیٹ حاصل کرنے کے لیے انٹرنیٹ سے port 80 تک رسائی درکار ہوتی ہے۔ یہی وجہ ہے کہ آپ اسی سسٹم پر a separate nginx-plus-Certbot setup نہیں چلاتے؛ mailcow اپنا TLS خود اندرونی طور پر جاری اور رینیو کرتا ہے، اور اگر کوئی دوسری سروس 80/443 پر چل رہی ہو تو وہ عمل ناکام ہو جاتا ہے۔

Step 5 — Stack شروع کریں اور لاگ ان کریں

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

Pull کے عمل میں تقریباً دو درجن امیجز ڈاؤن لوڈ ہوں گی؛ اس کے لیے چند منٹ دیں۔ جب docker compose ps تمام کنٹینرز running (یا healthy) دکھا دے، تو براؤزر میں https://mail.example.com کھولیں۔ ڈیفالٹ ایڈمن لاگ ان کے لیے یوزر نیم admin اور پاس ورڈ moohoo ہے۔ ایڈمن UI میں Access → Administrators کے تحت اس پاس ورڈ کو فوری طور پر تبدیل کریں۔ اگر براؤزر NET::ERR_CERT_AUTHORITY_INVALID کا وارننگ دے، تو اس کا مطلب ہے کہ ACME سرٹیفکیٹ ابھی جاری نہیں ہوا — یہ فرض کرنے سے پہلے کہ سسٹم خراب ہے، نیچے دی گئی ACME کی خرابی (failure) دیکھ لیں۔ پہلے ایک یا دو منٹ کے لیے self-signed placeholder کا ہونا معمول کی بات ہے۔

Step 6 — Add a domain, a mailbox, and publish DKIM

Admin UI میں، Mail Setup صفحہ کھولیں (Configuration → Mail Setup)۔ Domains ٹیب کے تحت Add domain پر کلک کریں اور example.com درج کریں۔ اس کے بعد، Mailboxes کے تحت، you@example.com بنانے کے لیے Add mailbox پر کلک کریں اور پاس ورڈ سیٹ کریں۔ یہ ایک فعال mailbox ہے جو IMAP کے ذریعے دستیاب ہے۔

اب DKIM key کے لیے: Configuration → ARC/DKIM keys پر جائیں۔ ڈومین شامل کرتے وقت mailcow پہلے سے ہی key generate کر چکا ہو سکتا ہے۔ اگر نہیں، تو وہیں ایک نئی key بنائیں — ڈومین کا انتخاب کریں، selector dkim رکھیں، 2048-bit منتخب کریں، اور Add پر کلک کریں۔ اس کے بعد ظاہر ہونے والی طویل TXT value کو کاپی کریں اور اسے اس طرح publish کریں:

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

mailcow کے Domains صفحے پر ایک DNS بٹن ہوتا ہے۔ یہ ان تمام records کی فہرست دکھاتا ہے جن کی اسے ضرورت ہے، اور جو records پہلے سے publish ہو چکے ہیں ان کے سامنے green tick یا red cross دکھاتا ہے۔ اسے بطور checklist استعمال کریں — deliverability test کرنے سے پہلے تمام rows کو green کر لیں۔ اگر publish کرنے کے بعد DKIM row red نظر آئے، تو اس کا مطلب ہے کہ key کے TXT chunks غلط طریقے سے تقسیم ہوئے ہیں۔ 2048-bit key، single TXT string کی 255-character حد سے زیادہ لمبی ہوتی ہے، اس لیے اسے ایک ہی logical value کے طور پر paste کریں اور اپنے DNS host کو اسے chunks میں تقسیم کرنے دیں۔

Step 7 — Test deliverability and chase 10/10

mail-tester.com پر جائیں، وہاں دکھائی گئی رینڈم (random) ایڈریس کو کاپی کریں، اور اپنے نئے میل باکس سے اس پر ایک پیغام بھیجیں — https://mail.example.com/SOGo پر SOGo webmail میں لاگ ان کریں اور وہاں سے بھیجیں۔ اس کے بعد "Then check your score" پر کلک کریں۔

آپ کا مقصد 10/10 اسکور حاصل کرنا ہے۔ عام طور پر اسکور کم ہونے کی وجوہات یہ ہیں:

  • SPF not aligned — آپ کا MX/SPF ریکارڈ موجود نہیں ہے یا بھیجنے والا IP اس میں شامل نہیں ہے۔ SPF TXT ریکارڈ کو دوبارہ چیک کریں۔
  • DKIM signature does not verifydkim._domainkey TXT ریکارڈ موجود نہیں ہے، ابھی پراپیگیٹ (propagating) ہو رہا ہے، یا خراب ہے۔ یہ سب سے عام غلطی ہے۔
  • No PTR / PTR mismatch — ریورس DNS، mail.example.com پر ریزولو (resolve) نہیں ہو رہا۔ اسے فراہم کنندہ (provider) کے پاس درست کریں۔
  • Listed on a blocklist — آپ کے IP کی پرانی ساکھ (reputation)۔ ڈی لسٹنگ (delisting) کی درخواست کریں یا نیا صاف IP مانگیں۔

جب تک اسکور 10/10 نہ ہو جائے، Gmail یا Outlook پر اصل ای میلز نہ بھیجیں۔ کم اسکور اور نیا IP مل کر آپ کے ڈومین کو پہلے ہی دن فلیگ (flag) کروا سکتے ہیں۔

Step 8 — ایک حقیقی میل کلائنٹ منسلک کریں

Thunderbird، Apple Mail، یا اپنے فون کو ان سیٹنگز کے ساتھ سرور پر پوائنٹ کریں۔ تمام کلائنٹس کے لیے سرور ہوسٹ mail.example.com ہے:

  • IMAP: port 993, SSL/TLS (یا 143 STARTTLS کے ساتھ)
  • SMTP submission: port 465, SSL/TLS (یا 587 STARTTLS کے ساتھ)
  • Username: مکمل ایڈریس، you@example.com
  • Password: آپ کا سیٹ کیا ہوا میل باکس پاس ورڈ

کبھی بھی port 25 پر کلائنٹ میل نہ بھیجیں — یہ port صرف سرور-to-سرور کے لیے ہے، mailcow وہاں authenticated submission کی اجازت نہیں دیتا، اور اس پر پوائنٹ کیے گئے کلائنٹ کو مسترد کر دیا جاتا ہے۔ اگر کوئی کلائنٹ Relay access denied رپورٹ کرتا ہے، تو وہ 25 پر یا بغیر authentication کے میل بھیجنے کی کوشش کر رہا ہے؛ اسے اپنے میل باکس credentials کے ساتھ 465 یا 587 پر سوئچ کریں۔

Step 9 — اہم ڈیٹا کا بیک اپ لیں

mailcow ایک بیک اپ اسکرپٹ فراہم کرتا ہے جو تمام stateful volumes کا snapshot لیتا ہے۔ اسے کسی external disk یا mounted remote پر چلائیں:

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

all چھ چیزوں کو محفوظ کرتا ہے، اور ان میں سے کسی ایک کا کھو جانا ڈیٹا کے نقصان کا باعث بن سکتا ہے: vmail (اصل mailboxes)، crypt (وہ keys جو vmail کو decrypt کرتی ہیں — ان کے بغیر vmail بیکار ہے)، mysql (MariaDB جو domains، users، aliases اور settings کو رکھتا ہے)، redis (queue اور cache state)، rspamd (learned spam/ham)، اور postfix (mail queue)۔ یہ ایک helper container کے اندر چلتا ہے جو compressed archives لکھتا ہے، اس لیے stack کے live ہونے کے باوجود backups درست رہتے ہیں۔ اسے nightly cron job کے ذریعے automate کریں، اور پرانے sets کو حذف کرنے کے لیے --delete-days 14 کا استعمال کریں۔ Restore کرنے کے لیے وہی اسکرپٹ restore کے ساتھ استعمال کریں، جو snapshots کی فہرست دکھاتا ہے اور آپ کو مطلوبہ ڈیٹا منتخب کرنے کی اجازت دیتا ہے۔ وہ بیک اپ جسے آپ نے کبھی test-restore نہ کیا ہو، وہ صرف ایک امید ہے، بیک اپ نہیں۔ کسی scratch VPS پر ایک dry run ضرور کریں۔

Step 10 — Update on a schedule

mailcow اپنے مخصوص script کے ذریعے اپ ڈیٹ ہوتا ہے۔ یہ script نیا code ڈاؤن لوڈ کرتی ہے، mailcow.conf کو migrate کرتی ہے، images کو prefetch کرتی ہے، اور containers کو اس ترتیب میں restart کرتی ہے:

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

پہلے backup لیں (Step 9)، کیونکہ schema migration کو واپس (reverse) کرنا مشکل ہوتا ہے۔ اپ ڈیٹس اکثر آتی ہیں اور ان میں internet-facing daemons کے لیے security fixes شامل ہوتے ہیں۔ اس لیے mail server کو مہینوں تک اپ ڈیٹ کے بغیر نہ چھوڑیں۔ اگر کوئی اپ ڈیٹ کسی container کو unhealthy چھوڑ دیتی ہے، تو sudo docker compose logs --tail=50 <service>-mailcow اس daemon کا نام بتاتا ہے جو دوبارہ شروع ہونے میں ناکام رہا۔

hardening کے بارے میں ایک نوٹ

mailcow اپنا netfilter service (netfilter-mailcow) استعمال کرتا ہے جو mail اور webmail ports پر حملے کرنے والے IPs کو ban کر دیتا ہے۔ اس طرح mail side default طور پر محفوظ رہتا ہے۔ یہ طریقہ host پر موجود SSH کو محفوظ نہیں بناتا، جو اب بھی exposed ہے اور اس پر brute-force حملے ہو سکتے ہیں۔ اس کے لیے Fail2ban کے ذریعے SSH auth log کی نگرانی اور key-only login استعمال کریں۔ mailcow admin UI کے لیے ایک مضبوط password استعمال کریں، اور بہتر یہ ہے کہ اسے public internet سے دور یا VPN کے پیچھے رکھیں۔

Failure modes, with the exact strings

Mail queues and never delivers. sudo docker compose exec postfix-mailcow postqueue -p چلائیں، یا admin UI میں mail queue دیکھیں؛ entries اس اسٹیٹس کے ساتھ deferred رہیں گی:

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

اس کا مطلب ہے کہ آپ کا provider outbound port 25 کو block کر رہا ہے (Step 1)۔ کوئی بھی configuration اسے ٹھیک نہیں کر سکتی — ایک ticket open کریں۔ یہ DNS یا TLS کا مسئلہ نہیں ہے؛ اس کی نشانی port 25 پر remote MX کے خلاف timed out کا لفظ ہے۔

Gmail marks everything spam, or bounces it. Gmail میں message کھولیں، "Show original" پر کلک کریں، اور auth results پڑھیں۔ dkim=fail یا dkim=none کا مطلب ہے کہ آپ کا dkim._domainkey TXT ریکارڈ موجود نہیں ہے، خراب ہے، یا ابھی tak propagate نہیں ہوا — ARC/DKIM پیج پر موجود معلومات کو بالکل ویسے ہی دوبارہ publish کریں اور TTL کا انتظار کریں۔ spf=fail کا مطلب ہے کہ SPF/MX records آپ کے IP کو cover نہیں کرتے۔ Alignment سب سے اہم ہے؛ ایک check کا fail ہونا بھی spam میں جانے کے لیے کافی ہے۔

Rejected by large providers on connect. Bounces یا Postfix logs میں Gmail کا PTR rejection نظر آئے گا:

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 code کا مطلب ہے کہ reverse DNS missing ہے یا mismatch کر رہا ہے۔ اپنے IP کے لیے provider کے پاس PTR کو mail.example.com پر set کریں (Step 2)۔ Forward (A) اور reverse (PTR) کا ایک جیسا ہونا ضروری ہے، اور دونوں کو وہی host name ہونا چاہیے جو mailcow دوسرے servers کو greeting کے وقت استعمال کرتا ہے۔

Browser shows a certificate warning that never clears. acme-mailcow container اصل certificate حاصل کرنے میں ناکام رہا ہے۔ اس کا log چیک کریں:

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

Cannot validate any hostnames, skipping Let's Encrypt for 1 hour. جیسی line یا challenge failure کا مطلب ہے کہ internet سے port 80 تک رسائی ممکن نہیں ہے، یا A record اس server کی طرف point نہیں کر رہا۔ Confirm کریں کہ mail.example.com اس box کو resolve کرتا ہے، host firewall میں 80 اور 443 ports open کریں، اور یقینی بنائیں کہ کوئی اور service ان ports کو use نہیں کر رہی۔ وجہ ٹھیک کرنے کے بعد، ایک گھنٹے کے back-off کا انتظار کرنے کے بجائے sudo docker compose restart acme-mailcow کے ساتھ client کو restart کریں۔

FAQ

کیا ای میل کا self-hosting کرنا واقعی فائدہ مند ہے؟

اگر آپ ڈیٹا کی ملکیت، لامحدود aliases، اور مکمل کنٹرول چاہتے ہیں، تو جی ہاں — mailcow آپ کو ایک VPS کی قیمت پر پروفیشنل اسٹیک فراہم کرتا ہے۔ لیکن deliverability ایک مسلسل کام ہے: IP reputation، DNS alignment، اور blocklist monitoring کبھی ختم نہیں ہوتے۔ اگر آپ کا بزنس ایڈریس mission-critical ہے اور اسپیم فولڈر میں ایک دن کا نقصان بھی آپ کے لیے اہم ہے، تو managed provider کا انتخاب کرنا زیادہ عملی ہے۔ self-host تب کریں جب آپ سہولت کے مقابلے کنٹرول کو اہمیت دیتے ہوں اور آپ اس کی دیکھ بھال کر سکیں۔

مجھے کیسے پتہ چلے گا کہ outbound port 25 بلاک ہے؟

سرور سے nc -vz -w 5 gmail-smtp-in.l.google.com 25 چلائیں۔ اگر "succeeded!" لکھا آئے تو پورٹ اوپن ہے؛ اگر وقفے کے بعد timed out آئے تو اس کا مطلب ہے کہ آپ کا provider اسے بلاک کرتا ہے۔ یہ وہ سب سے عام وجہ ہے جس کی وجہ سے self-hosted سرور ای میل وصول تو کر سکتا ہے لیکن بھیج نہیں سکتا، اور اس کا واحد حل آپ کے provider کی طرف سے پورٹ اوپن کروانا ہے — کوئی بھی local setting اسے ٹھیک نہیں کر سکتی۔

میری ای میل اب بھی Gmail کے spam فولڈر میں کیوں جاتی ہے؟

عام طور پر یہ authentication chain کی خرابی کی وجہ سے ہوتا ہے۔ Gmail میں "Show original" استعمال کریں اور spf=pass، dkim=pass، اور dmarc=pass کو چیک کریں۔ dkim=fail کا مطلب ہے کہ dkim._domainkey TXT record موجود نہیں ہے یا خراب ہے۔ PTR mismatch یا بغیر sending history والا نیا IP بھی اس کا سبب بن سکتا ہے۔ پہلے mail-tester.com پر 10/10 اسکور حاصل کریں، پھر IP کو آہستہ آہستہ warm up کریں — پہلے دن ہی زیادہ ای میلز بھیجنے کے بجائے روزانہ چند پیغامات سے آغاز کریں۔

مجھے اصل میں کن چیزوں کا backup لینا چاہیے؟

backup_and_restore.sh backup all چلائیں اور اس پورے سیٹ کو سرور سے باہر محفوظ رکھیں۔ یہ vmail (mailboxes)، crypt (وہ keys جو انہیں decrypt کرتی ہیں)، MariaDB database (domains، users، aliases، settings)، Redis، Rspamd کا learned data، اور Postfix queue کو محفوظ کرتا ہے۔ لوگ اکثر crypt volume کو بھول جاتے ہیں — اس کے بغیر vmail backup ناقابلِ قرائت ciphertext ہوگا۔ کم از کم ایک بار کسی علیحدہ مشین پر restore کر کے اسے ٹیسٹ ضرور کریں۔

کیا میں mailcow کو 2 GB VPS پر چلا سکتا ہوں؟

آرام دہ طریقے سے نہیں۔ generate_config.sh تقریباً 2.5 GiB سے کم میموری پر ClamAV کو disable کرنے کا مشورہ دیتا ہے، لیکن اس کے باوجود Rspamd، ClamAV، Dovecot اور MariaDB میموری کے لیے مقابلہ کرتے ہیں، اس لیے زیادہ لوڈ کی صورت میں آپ swap اور OOM kills کا سامنا کریں گے۔ ایک مستحکم single-user install کے لیے 6 GiB میموری اور 1 GiB swap کو کم از کم حد سمجھیں، اور جیسے ہی صارفین کی تعداد بڑھے، 8 GiB پر منتقل ہو جائیں۔

#mailcow#email#self-hosting#docker#dns