SSD Nodes Learn
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-07-24

VPS-এ Mailcow সেটআপ এবং Gmail ডেলিভারি গাইড

Mailcow ইনস্টল করার আগে Port 25 চেক করুন। Gmail-এর 550 5.7.25 PTR error এড়াতে সঠিক DNS setting এবং IP reputation বজায় রাখার নিয়মগুলো এখানে জানুন।

আপনি যা তৈরি করছেন

আপনার নিজস্ব সার্ভারে একটি পূর্ণাঙ্গ mail server তৈরি করা: SMTP (বার্তা পাঠানো এবং গ্রহণের জন্য), IMAP (আপনার ফোন এবং ল্যাপটপ sync রাখার জন্য), একটি webmail client, এবং একটি spam filter যা উভয় দিকেই প্রতিটি মেসেজ স্কোর করবে। mailcow-dockerized প্যাকেজে Postfix, Dovecot, Rspamd, SOGo webmail, MariaDB, Redis এবং একটি ACME client একটি Docker Compose stack হিসেবে থাকে, তাই সফটওয়্যার সেটআপ করা কঠিন নয়। আপনি এটি আধা ঘণ্টার মধ্যে চালু করতে পারবেন।

আসল চ্যালেঞ্জ হলো এর চারপাশের অন্যান্য বিষয়গুলো। ইমেইল এমন একটি সার্ভিস যেখানে ইন্টারনেটের অন্যান্য অংশগুলো একটি নতুন সার্ভারকে সরাসরি অবিশ্বাস করে। "এটি কাজ করছে" এবং "Gmail প্রতিটি মেসেজ চুপচাপ মুছে ফেলছে" — এই দুটির মাঝখানের পার্থক্য মূলত চারটি DNS record এবং একটি IP-reputation setting-এর ওপর নির্ভর করে, যা আপনার সম্পূর্ণ নিয়ন্ত্রণে নাও থাকতে পারে। কোনো সার্ভার রেন্ট করার আগে নিচের prerequisites গুলো পড়ে নিন। এগুলো পড়ার পর যদি আপনি মনে করেন যে reputation বজায় রাখার ঝামেলা নেওয়া সম্ভব নয়, তবে সেটি একটি যৌক্তিক সিদ্ধান্ত — ২০২৬ সালে আসলে কী self-hosting করা উচিত তার আমাদের তালিকা এ "only if you mean it" সেকশনে ঠিক এই কারণগুলোর জন্যই ইমেইল নিয়ে আলোচনা করা হয়েছে।

পূর্বশর্তগুলোই হলো প্রকল্পের মূল ভিত্তি

এর মধ্যে যেকোনো একটি অনুপস্থিত থাকলে আপনার পাঠানো ইমেইল কখনোই পৌঁছাবে না। নিচে সমস্যাগুলো হওয়ার সাধারণ ক্রম দেওয়া হলো:

Outbound port 25 অবশ্যই খোলা থাকতে হবে। আপনার সার্ভার TCP port 25 ব্যবহার করে Gmail এবং Microsoft-এ ইমেইল পাঠায়। স্প্যাম রোধ করতে অনেক VPS এবং ক্লাউড প্রোভাইডার ডিফল্টভাবে outbound 25 ব্লক করে রাখে। এই ব্লকটি নিঃশব্দে ঘটে — বুট করার সময় কোনো এরর দেখায় না, সবকিছু স্বাভাবিক মনে হয়, কিন্তু ইমেইল চিরকাল queue-তে আটকে থাকে। কিছু ইনস্টল করার আগেই এটি পরীক্ষা করে নিন। যদি এটি ব্লক করা থাকে, তবে একমাত্র সমাধান হলো আপনার প্রোভাইডারকে একটি support ticket পাঠিয়ে এটি খোলার অনুরোধ করা; কিছু প্রোভাইডার পুরনো অ্যাকাউন্টের জন্য এটি করে, আবার কেউ কখনো করে না।

একটি পরিষ্কার IP এবং ভালো reputation থাকতে হবে। রিসাইকেল করা VPS IP গুলো প্রায়ই আগের ব্যবহারকারীর স্প্যামের কারণে ইতিমধ্যে blocklist-এ থাকে। কাজ শুরু করার আগে Spamhaus lookup বা mxtoolbox-এর মতো সার্ভিস দিয়ে আপনার IP চেক করে নিন। একটি listed IP মানে হলো আপনার ইমেইল রিজেক্ট হবে, যা কোডিং দিয়ে সমাধান করা সম্ভব নয়।

DNS নিয়ন্ত্রণ এবং সঠিক PTR record থাকতে হবে। আপনাকে আপনার ডোমেইনের zone-এ রেকর্ড যোগ করতে হবে। এছাড়া সার্ভারের IP-এর জন্য reverse DNS (PTR) প্রয়োজন যা আপনার mail hostname-কে নির্দেশ করবে। PTR সাধারণত আপনার DNS প্যানেলে সেট করা থাকে না — এটি IP মালিকের নিয়ন্ত্রণে থাকে, তাই এটি আপনার VPS প্রোভাইডারের control panel অথবা ticket-এর মাধ্যমে সেট করতে হয়।

6 GiB RAM এবং 2 vCPU হলো একটি আরামদায়ক সর্বনিম্ন সীমা। প্রাইভেট ইনস্টলেশনের জন্য mailcow-এর নিজস্ব সর্বনিম্ন রিকয়ারমেন্ট হলো 6 GiB RAM এবং 1 GiB swap; কিছু ব্যবহারকারী ব্যবহার করলে 8 GiB ব্যবহারের পরামর্শ দেওয়া হয়। 2.5 GiB-এর নিচে হলে, generate_config.sh ClamAV ভাইরাস স্ক্যানার ডিজেবল করার প্রস্তাব দেয় যাতে kernel কন্টেইনারগুলো বন্ধ করে না দেয়। শুরুতে 20 GB SSD দিন।

একটি DNS name প্রয়োজন, শুধু bare IP নয়। mail.example.com-এর মতো একটি hostname নির্বাচন করুন। এই একটি নামই আপনার MAILCOW_HOSTNAME, আপনার TLS certificate subject, আপনার PTR target, এবং আপনার SMTP banner হিসেবে কাজ করবে। সব জায়গায় এটি সামঞ্জস্যপূর্ণ রাখুন।

Step 1 — প্রমাণ করুন যে outbound port 25 খোলা আছে

এটি সবার আগে করুন। যদি এটি ব্যর্থ হয়, তবে পরবর্তী সব কাজই বৃথা। নতুন VPS থেকে একটি আসল mail server-এর সাথে SMTP conversation শুরু করার চেষ্টা করুন:

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

এই timeout নির্দেশ করে যে পোর্টটি ব্লক করা আছে। এটি provider-এর network filter দ্বারা করা হয়, আপনার firewall দ্বারা নয়; তাই লোকাল কোনো পরিবর্তন দিয়ে এটি ঠিক করা সম্ভব নয়। একটি ticket ওপেন করুন: "Please enable outbound TCP port 25 for my VPS at <IP>; I am running a legitimate mail server." যতক্ষণ না "succeeded" লেখা আসছে, ততক্ষণ mailcow ইনস্টল করবেন না। মনে রাখবেন, inbound 25 (অন্যান্য server থেকে আপনার কাছে আসা সংযোগ) একটি আলাদা পথ এবং এটি সাধারণত খোলা থাকে — provider সাধারণত outbound side-টি throttle করে।

Step 2 — এখন DNS records সেট করুন

DNS পরিবর্তন প্রোপাগেট হতে সময় লাগে, তাই ইনস্টল করার আগেই যতটা সম্ভব সব রেকর্ড পাবলিশ করে রাখুন। ধরে নিন আপনার ডোমেইন হলো 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 এই ডোমেইনের জন্য মেইল পাঠাতে পারবে, বাকি সব রিজেক্ট করো"। p=none থেকে DMARC শুরু করুন যাতে আপনি নিজের মেইল বাউন্স না করিয়ে রিপোর্টগুলো পর্যবেক্ষণ করতে পারেন; অ্যালাইনমেন্ট নিশ্চিত হওয়ার পর একে p=quarantine এবং পরে p=reject এ পরিবর্তন করুন। দুটি রেকর্ড ইচ্ছাকৃতভাবে রাখা হয়নি: DKIM, যা mailcow আপনার জন্য Step 6-এ তৈরি করে দেবে, এবং PTR, যা আপনাকে এখন আপনার প্রোভাইডারের প্যানেল থেকে সেট করতে হবে।

10.0.0.10 এর জন্য PTR (reverse DNS) হিসেবে mail.example.com সেট করুন — যা হলো MAILCOW_HOSTNAME এর সঠিক মান। এটি এমন একটি রেকর্ড যা বেশিরভাগ মানুষ ভুলে যায় এবং বড় প্রোভাইডাররা এর অভাবে মেইল রিজেক্ট করে দেয়। যদি আপনার প্যানেলে rDNS ফিল্ড না থাকে, তবে একটি টিকিট রেইজ করুন।

Step 3 — Docker Install করা

mailcow চালানোর জন্য Docker Engine এবং Compose v2 plugin প্রয়োজন। Ubuntu-এর docker.io package ব্যবহার না করে Docker-এর অফিসিয়াল 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 নেই। Docker-এর repository থেকে plugin-টি ইনস্টল করুন — উপরের script-টি পুনরায় চালান, অথবা আমাদের Docker Compose basics guide অনুসরণ করুন, যা Docker-এর নিজস্ব apt repository থেকে উভয়টি সেটআপ করে দেয়।

Step 4 — Clone mailcow and generate the config

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

Check umask prints 0022 first — mailcow refuses to build with an odd file mask, and a fresh Ubuntu 24.04 root shell already gives you 0022. The script then asks the one thing that matters: the fully qualified hostname. Enter mail.example.com — the value must match your A record and PTR exactly. It writes mailcow.conf, the single environment file the whole stack reads. Open it if you need to change the web ports (HTTP_PORT, HTTPS_PORT) or disable ClamAV on a small box:

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 is the other lever on a low-RAM box: full-text search is the second memory hog mailcow's docs name, and skipping it only costs you body-text search in webmail.

Leave HTTP_PORT=80 and HTTPS_PORT=443 unless something else on the host already owns them — mailcow's built-in ACME client needs port 80 reachable from the internet to obtain the certificate. This is why you do not run a separate nginx-plus-Certbot setup on the same box; mailcow issues and renews its own TLS internally, and a second service squatting on 80/443 breaks that.

Step 5 — stack শুরু করুন এবং log in করুন

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

pull করার সময় প্রায় দুই ডজন image ডাউনলোড হবে; কয়েক মিনিট সময় দিন। যখন docker compose ps প্রতিটি container running (অথবা healthy) দেখাবে, তখন browser-এ https://mail.example.com ওপেন করুন। ডিফল্ট admin login হলো username admin এবং password moohoo। Access → Administrators মেনু থেকে admin UI-তে গিয়ে দ্রুত password পরিবর্তন করুন। যদি browser NET::ERR_CERT_AUTHORITY_INVALID সতর্কবার্তা দেখায়, তবে এর অর্থ ACME certificate এখনও ইস্যু করা হয়নি — এটি ত্রুটিপূর্ণ মনে করার আগে নিচের ACME failure অংশটি দেখুন; প্রথম এক বা দুই মিনিটের জন্য self-signed placeholder থাকা স্বাভাবিক।

Step 6 — একটি domain, একটি mailbox যোগ করুন এবং DKIM publish করুন

Admin UI-তে, Mail Setup page খুলুন (Configuration → Mail Setup), এবং Domains tab-এর অধীনে Add domain ক্লিক করে example.com লিখুন। এরপর, Mailboxes-এর অধীনে, একটি password দিয়ে you@example.com তৈরি করতে Add mailbox ক্লিক করুন। এটি একটি কার্যকর mailbox যা ইতিমধ্যে IMAP-এর মাধ্যমে ব্যবহার করা সম্ভব।

এখন DKIM key-এর পালা। Configuration → ARC/DKIM keys-এ যান; domain যোগ করার সময় mailcow হয়তো ইতিমধ্যে একটি key তৈরি করে ফেলেছে। যদি না করে থাকে, তবে সেখানে একটি তৈরি করুন — domain নির্বাচন করুন, 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 page-এ একটি DNS button আছে যা প্রয়োজনীয় প্রতিটি record তালিকাভুক্ত করে এবং বর্তমানে যা publish করা আছে তার বিপরীতে একটি সবুজ টিক বা লাল ক্রস দেখায়। এটি আপনার checklist হিসেবে ব্যবহার করুন — deliverability পরীক্ষা করার আগে প্রতিটি row সবুজ করুন। Publish করার পর DKIM row লাল দেখানোর অর্থ হলো key-টি ভুলভাবে একাধিক TXT chunk-এ বিভক্ত করা হয়েছে; 2048-bit key একটি single TXT string-এর 255-character limit-এর চেয়ে বড়। তাই এটিকে একটি logical value হিসেবে paste করুন এবং আপনার DNS host-কে এটি chunk আকারে বিভক্ত করতে দিন।

Step 7 — deliverability পরীক্ষা করুন এবং 10/10 স্কোর অর্জন করুন

mail-tester.com-এ যান, সেখানে দেখানো random address-টি কপি করুন, এবং আপনার নতুন mailbox থেকে একটি মেসেজ সেখানে পাঠান — https://mail.example.com/SOGo-এ SOGo webmail-এ log in করুন এবং সেখান থেকে পাঠান। তারপর "Then check your score" বাটনে ক্লিক করুন।

লক্ষ্য হলো 10/10 স্কোর পাওয়া। স্কোর কমার সাধারণ কারণগুলো হলো:

  • SPF not aligned — আপনার MX/SPF record নেই অথবা sending IP অন্তর্ভুক্ত নয়। SPF TXT রেকর্ডটি পুনরায় পরীক্ষা করুন।
  • DKIM signature does not verifydkim._domainkey TXT রেকর্ডটি নেই, এখনও propagate হচ্ছে, অথবা ভুলভাবে লেখা হয়েছে। এটি সবচেয়ে সাধারণ সমস্যা।
  • No PTR / PTR mismatch — reverse DNS, mail.example.com-এ resolve করছে না। এটি provider-এর কাছে ঠিক করতে হবে।
  • Listed on a blocklist — আপনার IP-এর পূর্বের reputation খারাপ। delisting-এর জন্য অনুরোধ করুন অথবা একটি clean IP সংগ্রহ করুন।

যতক্ষণ না স্কোর 10/10 হচ্ছে, ততক্ষণ Gmail বা Outlook-এ real mail পাঠাবেন না। নতুন IP-এর সাথে কম স্কোর থাকলে প্রথম দিনেই আপনার domain flagged হয়ে যেতে পারে।

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 শুধুমাত্র সার্ভার-টু-সার্ভার যোগাযোগের জন্য। mailcow এই port-এ authenticated submission প্রদান করে না এবং ক্লায়েন্ট কানেক্ট করার চেষ্টা করলে তা রিফিউজ করা হয়। যদি কোনো ক্লায়েন্ট Relay access denied এরর দেখায়, তবে বুঝতে হবে সেটি 25 port ব্যবহার করছে অথবা authentication ছাড়া মেইল পাঠানোর চেষ্টা করছে; আপনার মেইলবক্স ক্রেডেনশিয়াল ব্যবহার করে এটি 465 অথবা 587-এ পরিবর্তন করুন।

Step 9 — গুরুত্বপূর্ণ ডেটা ব্যাকআপ নিন

mailcow একটি ব্যাকআপ স্ক্রিপ্ট প্রদান করে যা প্রতিটি stateful volume-এর snapshot তৈরি করে। এটি একটি external disk অথবা mounted remote-এ চালান:

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

all ছয়টি বিষয় সংরক্ষণ করে, এর মধ্যে যেকোনোটি হারালে ডেটা হারিয়ে যাবে: vmail (প্রকৃত mailboxes), crypt (vmail decrypt করার জন্য প্রয়োজনীয় keys — এগুলো ছাড়া ডেটা অকেজো), mysql (MariaDB যা domains, users, aliases এবং settings ধারণ করে), redis (queue এবং cache state), rspamd (learned spam/ham), এবং postfix (mail queue)। এটি একটি helper container-এর ভেতরে চলে এবং compressed archives তৈরি করে, তাই stack সচল থাকা অবস্থায়ও ব্যাকআপগুলো consistent থাকে। এটি nightly cron job দিয়ে automate করুন, এবং পুরনো ব্যাকআপ মুছে ফেলার জন্য --delete-days 14 যোগ করুন। Restore করার জন্য একই স্ক্রিপ্টে restore ব্যবহার করুন, যা snapshot-গুলোর তালিকা দেখাবে এবং আপনাকে প্রয়োজনীয় ফাইল বেছে নিতে সাহায্য করবে। যে ব্যাকআপ আপনি কখনো test-restore করেননি, সেটি কেবল একটি আশা মাত্র, ব্যাকআপ নয় — একটি scratch VPS-এ একবার dry run করে দেখুন।

Step 10 — একটি নির্দিষ্ট সময়সূচী অনুযায়ী আপডেট করুন

mailcow তার নিজস্ব 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

প্রথমে ব্যাকআপ নিন (Step 9), কারণ schema migration উল্টো করা কঠিন। নিয়মিত আপডেট আসে এবং এতে 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 port-এ অতিরিক্ত রিকোয়েস্ট পাঠানো IP-গুলোকে ban করে দেয়। ফলে mail side-এর সুরক্ষা ডিফল্টভাবেই থাকে। তবে এটি host-এর SSH-কে সুরক্ষা প্রদান করে না; SSH এখনও উন্মুক্ত এবং brute-force আক্রমণের শিকার হতে পারে। এই build-এর সাথে 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 দেখুন; নিচের এররটি থাকলে এন্ট্রিগুলো deferred অবস্থায় থাকবে:

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

এর মানে হলো আপনার provider outbound port 25 ব্লক করে রেখেছে (Step 1)। কোনো কনফিগারেশন দিয়ে এটি ঠিক করা সম্ভব নয় — একটি ticket ওপেন করুন। এটি DNS বা TLS সংক্রান্ত সমস্যা নয়; remote MX-এর port 25-এ timed out শব্দটি থাকাই এর প্রমাণ।

Gmail everything spam হিসেবে চিহ্নিত করে, অথবা bounce করে। Gmail-এ মেসেজটি ওপেন করুন, "Show original" সিলেক্ট করুন এবং auth results দেখুন। dkim=fail বা dkim=none মানে হলো আপনার dkim._domainkey TXT রেকর্ডটি নেই, ভুলভাবে আছে, অথবা এখনো propagate হয়নি — ARC/DKIM পেজে যা দেখানো হয়েছে ঠিক তাই পুনরায় পাবলিশ করুন এবং TTL শেষ হওয়া পর্যন্ত অপেক্ষা করুন। spf=fail মানে হলো SPF/MX রেকর্ডগুলো আপনার IP কভার করছে না। Alignment অত্যন্ত গুরুত্বপূর্ণ; একটি চেক ফেইল করলেই মেসেজটি spam-এ চলে যাবে।

Large provider-গুলো কানেক্ট করার সময় রিজেক্ট করে। Gmail-এর PTR rejection এররটি bounce বা Postfix log-এ দেখা যাবে:

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 কোডটির মানে হলো reverse DNS নেই বা mismatch করছে। আপনার IP-এর জন্য provider-এর কাছে PTR রেকর্ড হিসেবে mail.example.com সেট করুন (Step 2)। Forward (A) এবং reverse (PTR) রেকর্ড অবশ্যই এক হতে হবে, এবং উভয় রেকর্ডেই সেই একই host name থাকতে হবে যা দিয়ে mailcow অন্যান্য সার্ভারের সাথে যোগাযোগ করে।

Browser সবসময় একটি certificate warning দেখায়। acme-mailcow কন্টেইনারটি একটি রিয়েল সার্টিফিকেট পেতে ব্যর্থ হয়েছে। এর log চেক করুন:

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

Cannot validate any hostnames, skipping Let's Encrypt for 1 hour. এর মতো কোনো লাইন বা challenge failure মানে হলো ইন্টারনেট থেকে port 80 অ্যাক্সেস করা যাচ্ছে না, অথবা A record এই সার্ভারটিকে পয়েন্ট করছে না। নিশ্চিত করুন যে mail.example.com এই সার্ভারটিকে পয়েন্ট করছে, হোস্ট firewall-এ 80 এবং 443 পোর্ট ওপেন করুন, এবং নিশ্চিত করুন যে অন্য কোনো সার্ভিস এই পোর্টগুলো ব্যবহার করছে না। সমস্যাটি সমাধান করার পর, এক ঘণ্টা অপেক্ষা না করে sudo docker compose restart acme-mailcow দিয়ে ক্লায়েন্টটি রিস্টার্ট দিন।

FAQ

self-hosting email করা কি আসলেই লাভজনক?

আপনি যদি ডেটার মালিকানা, আনলিমিটেড alias এবং পূর্ণ নিয়ন্ত্রণ চান, তবে হ্যাঁ — একটি VPS এর খরচে mailcow আপনাকে একটি প্রফেশনাল স্ট্যাক প্রদান করে। তবে deliverability বজায় রাখা একটি নিরন্তর কাজ: IP reputation, DNS alignment, এবং blocklist monitoring সবসময়ই করতে হয়। যদি আপনার ব্যবসার জন্য এমন ইমেইল প্রয়োজন যা অত্যন্ত গুরুত্বপূর্ণ এবং স্প্যাম ফোল্ডারে যাওয়ার কারণে ব্যবসায় ক্ষতি হতে পারে, তবে একটি 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 এর মাধ্যমে পোর্টটি খোলা নেওয়া — লোকাল কোনো সেটিংস দিয়ে এটি পরিবর্তন করা সম্ভব নয়।

আমার মেইল কেন এখনও Gmail এর spam ফোল্ডারে যাচ্ছে?

এর প্রধান কারণ হলো authentication chain এর ত্রুটি। Gmail এ "Show original" অপশনটি ব্যবহার করে spf=pass, dkim=pass, এবং dmarc=pass চেক করুন। dkim=fail নির্দেশ করে যে আপনার dkim._domainkey TXT record অনুপস্থিত বা ভুল আছে; এছাড়া PTR mismatch বা নতুন IP যার কোনো sending history নেই, সেটিও এর কারণ হতে পারে। প্রথমে mail-tester.com এ স্কোর 10/10 নিশ্চিত করুন, তারপর ধীরে ধীরে IP warm-up করুন — প্রথম দিনেই অনেক মেইল না পাঠিয়ে প্রতিদিন অল্প অল্প করে মেইল পাঠানো শুরু করুন।

আমাকে ঠিক কী কী ব্যাকআপ নিতে হবে?

backup_and_restore.sh backup all চালান এবং সম্পূর্ণ সেটটি সার্ভারের বাইরে রাখুন। এটি vmail (মেইলবক্সসমূহ), crypt (যা দিয়ে মেইল ডিক্রিপ্ট করা হয়), MariaDB database (domains, users, aliases, settings), Redis, Rspamd এর learned data, এবং Postfix queue ব্যাকআপ নেয়। মানুষ সাধারণত crypt volume এর কথা ভুলে যায় — এটি ছাড়া vmail ব্যাকআপটি কেবল unreadable ciphertext হিসেবে থাকবে। অন্তত একবার একটি আলাদা ডিভাইসে restore করে পরীক্ষা করে দেখুন।

আমি কি 2 GB VPS এ mailcow চালাতে পারি?

না, এটি করা সম্ভব নয়। generate_config.sh অনুযায়ী, প্রায় 2.5 GiB এর নিচে ClamAV ডিজেবল করার অপশন দেওয়া হয়। তবুও Rspamd, ClamAV, Dovecot এবং MariaDB মেমোরির জন্য প্রতিযোগিতা করে, ফলে কাজের চাপে swap এবং OOM kills এর সমস্যা দেখা দেবে। একটি স্থিতিশীল single-user ইন্সটলেশনের জন্য কমপক্ষে 6 GiB RAM এবং 1 GiB swap রাখা প্রয়োজন। যখন ব্যবহারকারীর সংখ্যা বাড়তে শুরু করবে, তখন 8 GiB মেমোরিতে চলে যান।

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