Mail sunucusu değiştirmenin en can sıkıcı tarafı, işin geri alınabilir olmamasıdır. Bir web sitesini yanlış taşırsanız DNS'i geri çevirir, eski dosyalarla devam edersiniz. Ama posta kutusunu yanlış taşırsanız kaybolan şey müşterinin üç yıllık yazışması olur ve onu hiçbir yerden geri getiremezsiniz. İşte tam bu yüzden mail geçişlerinde elle "sürükle-bırak" yapmak yerine imapsync kullanıyoruz: iki IMAP sunucusu arasında mesajları, klasör yapısını, okundu/okunmadı bayraklarını ve tarihleri koruyarak kopyalayan, defalarca çalıştırılabilen bir Perl aracı.
Bu rehberde imapsync'i sıfırdan kurmayı, tek bir hesabı taşımayı, yüzlerce hesabı tek komutla döngüye sokmayı, cPanel ile Dovecot arasındaki klasör isim farklarını çözmeyi ve MX kaydını çevirmeden önce/sonra çalıştırılan iki aşamalı senkronizasyon planını anlatacağım. Ayrıca en sık karşılaştığım hata mesajlarının gerçek sebeplerini ve taşıma bittikten sonra "gerçekten her şey geldi mi" sorusunu nasıl kanıtlayacağınızı da ele alacağım.
imapsync Tam Olarak Ne Yapar, Ne Yapmaz#
imapsync bir IMAP istemcisidir. Kaynak sunucuya (host1) ve hedef sunucuya (host2) aynı anda bağlanır, iki taraftaki klasörleri listeler, her klasördeki mesajların başlıklarını okur ve hedefte olmayanları kaynaktan çekip hedefe yükler. Karşılaştırmayı yaparken varsayılan olarak mesajın Message-Id, Date ve Subject başlıklarıyla boyutunun birleşiminden bir imza üretir; bu yüzden aynı komutu ikinci kez çalıştırdığınızda zaten taşınmış mesajları tekrar kopyalamaz, sadece aradaki farkı tamamlar. Bu idempotent davranış, aracın en değerli özelliğidir: geçiş gecesi yarım kalan bir aktarımı sabah kaldığı yerden sürdürebilirsiniz.
Yapmadığı şeyleri bilmek de aynı ölçüde önemli. imapsync posta kutusu oluşturmaz — hedef sunucuda hesap zaten açılmış ve şifresi belirlenmiş olmalıdır. Sunucu tarafındaki filtreleri (Sieve kuralları), otomatik yanıt ayarlarını, iletim (forward) tanımlarını, takvim ve kişi verilerini taşımaz; bunlar IMAP protokolünün dışındadır ve panelden ayrıca aktarılmalıdır. Ayrıca POP3 ile çalışmaz; kaynak sunucuda IMAP kapalıysa bu araç işinize yaramaz. IMAP ile POP3 arasındaki farkın mail taşımayı neden bu kadar etkilediğini merak ediyorsanız IMAP ve POP3 farkı yazısı konuyu netleştirir.
Kurulum ve İlk Bağlantı Testi#
imapsync tek bir Perl betiğidir ve çoğu dağıtımın depolarında bulunur. Debian/Ubuntu tarafında paket yöneticisiyle kurmak en pratiği:
# Debian / Ubuntu
sudo apt update
sudo apt install -y imapsync
# EL tabanlı sistemlerde (AlmaLinux, Rocky) EPEL deposundan
sudo dnf install -y epel-release
sudo dnf install -y imapsync
# Kurulumu ve sürümü doğrula
imapsync --version
Paket bulunamazsa betiği doğrudan indirip çalıştırılabilir yapabilirsiniz; bu durumda Perl bağımlılıklarını (Mail::IMAPClient, IO::Socket::SSL, Digest::MD5, Term::ReadKey) ayrıca kurmanız gerekir. Kurulum bittiğinde ilk yapmanız gereken şey mesaj taşımak değil, sadece giriş yapabildiğinizi doğrulamaktır. Bunun için iki hafif bayrak var:
# Sadece TCP/TLS bağlantısını dene, kimlik doğrulama yapma
imapsync --justconnect \
--host1 eski.firmaniz.com --host2 yeni.firmaniz.com
# Bağlan ve iki tarafta da giriş yap, sonra çık
imapsync --justlogin \
--host1 eski.firmaniz.com --user1 [email protected] --password1 'ESKI_SIFRE' --ssl1 \
--host2 yeni.firmaniz.com --user2 [email protected] --password2 'YENI_SIFRE' --ssl2
--ssl1 / --ssl2 bayrakları implicit TLS anlamına gelir ve varsayılan olarak 993 portunu kullanır. Sunucu 143 üzerinden STARTTLS istiyorsa bunun yerine --tls1 / --tls2 yazın. Şifreyi komut satırında düz yazmak kabuk geçmişine düşer; üretimde --passfile1 /root/.eski.pass ve --passfile2 /root/.yeni.pass kullanıp bu dosyaları chmod 600 yapmak çok daha temizdir. Bağlantı testinde takılıyorsanız sorun genellikle imapsync'te değil, sunucunun 993/143 portunu dışarı kapatmış olmasındadır; hangi portun açık olduğunu hızlıca görmek için SMTP test aracı ile birlikte basit bir nc -vz eski.firmaniz.com 993 denemesi yeterlidir.
Tek Hesap Taşıma: Temel Komut ve Parametreler#
Bağlantı doğrulandıysa gerçek komut şu iskelete oturur. İlk çalıştırmayı mutlaka --dry ile yapın; bu bayrak hiçbir şey yazmaz, sadece ne yapacağını raporlar:
imapsync \
--host1 eski.firmaniz.com --user1 [email protected] --passfile1 /root/.eski.pass --ssl1 \
--host2 yeni.firmaniz.com --user2 [email protected] --passfile2 /root/.yeni.pass --ssl2 \
--automap \
--skipsize \
--logdir /var/log/imapsync \
--dry
Çıktının sonunda "Homing pigeon" özet bloğu gelir: kaç klasör, kaç mesaj, kaç bayt aktarılacağı yazar. Rakamlar makul görünüyorsa --dry bayrağını silip komutu tekrar çalıştırın. Sık kullanılan parametrelerin ne işe yaradığını bir tabloda toplayalım:
| Parametre | Ne yapar | Ne zaman gerekir |
|---|---|---|
--automap | Klasörleri otomatik eşler (Sent ↔ Gönderilmiş vb.) | Farklı sunucu yazılımları arasında geçişte |
--dry | Hiçbir şey yazmaz, sadece planı gösterir | Her zaman ilk çalıştırmada |
--skipsize | Boyut karşılaştırmasını atlar, sadece başlığa bakar | Kaynak sunucu boyutu farklı raporluyorsa |
--maxage 365 | Sadece son 365 günün mesajlarını taşır | Kotayı aşan devasa kutularda |
| `--exclude 'Junk | Spam | Trash'` |
--folder 'INBOX' | Yalnız verilen klasörü taşır | Tek klasörü acilen kurtarmak için |
--delete2 | Kaynakta olmayanı hedeften siler | Yalnızca tam ayna istiyorsanız, dikkatli |
--nofoldersizes | Başlangıçtaki boyut sayımını atlar | Çok büyük kutularda başlama süresini kısaltır |
--useheader 'Message-Id' | Karşılaştırmayı tek başlığa indirger | Yinelenen mesaj sorunlarında |
--delete2 bayrağını üretimde kullanırken iki kez düşünün: kaynak kutuda yanlışlıkla silinmiş bir klasör varsa, o klasör hedefte de silinir. Ayna kurmuyorsanız bu bayrağa hiç dokunmayın.
Klasör İsimleri ve Ayraç Farkları#
En çok zaman kaybettiren konu klasör isimlendirmesidir. Kaynak sunucu Courier tabanlıysa klasörler INBOX.Gonderilmis biçiminde ve ayraç nokta (.) iken, hedef Dovecot çoğunlukla Gonderilmis biçimini ve eğik çizgi (/) ayracını kullanır. Bunu ayarlamazsanız hedefte INBOX.Gonderilmis adında tuhaf, iç içe geçmiş klasörler oluşur.
# Courier (INBOX. ön ekli, nokta ayraçlı) → Dovecot (ön eksiz, / ayraçlı)
imapsync \
--host1 eski.firmaniz.com --user1 [email protected] --passfile1 /root/.eski.pass --ssl1 \
--host2 yeni.firmaniz.com --user2 [email protected] --passfile2 /root/.yeni.pass --ssl2 \
--prefix1 'INBOX.' --sep1 '.' \
--prefix2 '' --sep2 '/' \
--subscribeall
--subscribeall bayrağı taşınan klasörleri hedefte abone listesine ekler; bu olmadan kullanıcı Outlook veya Thunderbird'de klasörleri "abone ol" ekranından elle işaretlemek zorunda kalır ve size "klasörlerim gelmemiş" diye yazar. Klasör adlarını daha ince ayarlamak isterseniz --regextrans2 düzenli ifadeyle yeniden yazma yapar:
# Türkçe klasör adlarını hedefte standart adlara çevir
--regextrans2 's/Gonderilmis/Sent/' \
--regextrans2 's/Cop Kutusu/Trash/'
Hangi yapının nereye oturduğunu anlamak, aslında sunucunun mesajları diskte nasıl sakladığıyla ilgilidir; Maildir ve mbox farkı yazısı bu iki depolama biçiminin taşıma hızını ve kilitlenme davranışını nasıl değiştirdiğini açıklıyor.
Toplu Hesap Taşıma#
Onlarca hesabı tek tek yazmak sürdürülemez. Standart yöntem, her satırında bir hesabın bulunduğu bir metin dosyası hazırlayıp kabuk döngüsüyle imapsync'i çağırmaktır. Önce listeyi oluşturun:
# /root/hesaplar.txt — biçim: host1;user1;pass1;host2;user2;pass2
eski.firmaniz.com;[email protected];Eski1;yeni.firmaniz.com;[email protected];Yeni1
eski.firmaniz.com;[email protected];Eski2;yeni.firmaniz.com;[email protected];Yeni2
eski.firmaniz.com;[email protected];Eski3;yeni.firmaniz.com;[email protected];Yeni3
Sonra döngüyü çalıştırın. Her hesap için ayrı log dosyası tutmak, sonradan "hangi kutuda ne oldu" sorusunu cevaplamanın tek yoludur:
#!/bin/bash
# toplu-tasima.sh — hesaplar.txt içindeki her satır için imapsync çalıştırır
set -u
LOGDIR=/var/log/imapsync
mkdir -p "$LOGDIR"
while IFS=';' read -r h1 u1 p1 h2 u2 p2; do
# Boş satırları ve # ile başlayan yorumları atla
[ -z "${h1:-}" ] && continue
case "$h1" in \#*) continue ;; esac
echo ">>> Taşınıyor: $u1"
imapsync \
--host1 "$h1" --user1 "$u1" --password1 "$p1" --ssl1 \
--host2 "$h2" --user2 "$u2" --password2 "$p2" --ssl2 \
--automap --skipsize --subscribeall \
--exclude 'Junk|Spam|Trash' \
--errorsmax 20 \
--logdir "$LOGDIR" --logfile "${u1}.log"
done < /root/hesaplar.txt
--errorsmax 20 bayrağı, bir kutuda arka arkaya 20 hata alınırsa o hesabı bırakıp sıradakine geçmesini sağlar; bu olmadan tek bozuk mesaj yüzünden bütün gece tek bir kutuda dönebilirsiniz. Çok sayıda hesabı aynı anda taşımak isterseniz xargs -P 4 ile paralel çalıştırabilirsiniz, ancak hedef sunucunun eşzamanlı IMAP bağlantı limitine dikkat edin — Dovecot varsayılanda kullanıcı başına 10, IP başına daha yüksek bir sınır uygular ve limit aşılınca bağlantılar reddedilir.
İki Aşamalı Geçiş Planı#
Taşımayı tek seferde yapmaya çalışmak en yaygın hatadır: siz kopyalarken kutuya yeni mailler düşmeye devam eder ve MX'i çevirdiğiniz anda arada kalan mesajlar eski sunucuda unutulur. Doğru plan iki aşamalıdır ve şu sırayla işler:
- Hazırlık (geçişten 24-48 saat önce). Alan adının MX ve ilgili A kayıtlarında TTL değerini
300saniyeye düşürün. Yeni sunucuda tüm hesapları aynı adres ve kota ile açın. - İlk tam senkronizasyon. Yukarıdaki toplu betiği çalıştırın. Kutu boyutuna göre bu saatler sürebilir; kimseyi beklettiği bir şey yok, eski sunucu hâlâ çalışıyor.
- MX kaydını çevirin. Yeni sunucunun MX kaydını yayınlayın. TTL düşük olduğu için yayılma dakikalar sürer.
- Bekleme penceresi. En az 2-4 saat bekleyin; bu sürede bazı gönderenler hâlâ eski sunucuya teslim edecektir.
- İkinci (delta) senkronizasyon. Aynı komutu tekrar çalıştırın. Bu kez yalnızca aradaki fark taşınır ve genellikle dakikalar sürer.
- Eski sunucuyu kapatmayın. İlk 7-14 gün eski kutuları ayakta tutun ve gerekirse üçüncü bir delta çalıştırın.
Bu sıra, DNS geçişiyle mail aktarımını birbirine bağlayan kritik noktadır; aynı mantığı hosting değişimi bağlamında adım adım işleyen e-postaları yeni sunucuya taşıma yazısı geçiş gününde yanınızda bulundurmaya değer bir kontrol listesi sunar.
Sık Karşılaşılan Hatalar ve Gerçek Sebepleri#
Log dosyasında göreceğiniz mesajların çoğunun sebebi imapsync değil, iki uçtaki sunucuların davranışıdır. En sık rastladıklarımı ve pratik çözümlerini toparlayalım:
| Hata / Log satırı | Gerçek sebep | Çözüm |
|---|---|---|
AUTHENTICATIONFAILED | Şifre yanlış ya da özel karakter kabukta bozuldu | Şifreyi tek tırnak içine alın veya --passfile1 kullanın |
Can not open imap connection | 993/143 portu güvenlik duvarında kapalı | Sunucudan nc -vz host 993 ile doğrulayın |
certificate verify failed | Kendi imzalı sertifika | Test ortamında --nosslcheck1, üretimde sertifikayı düzeltin |
NO [OVERQUOTA] | Hedef kutu kotası dolu | Hedefte kotayı yükseltin veya --maxage ile daraltın |
Folder ... does not exist | Ön ek/ayraç uyumsuzluğu | --prefix1, --sep1, --automap ayarlayın |
| Aynı mesajlar tekrar kopyalanıyor | Sunucu Message-Id üretmiyor veya boyut farklı | --useheader 'Message-Id' ve --skipsize ekleyin |
| Aktarım çok yavaş | Her klasörde boyut sayımı yapılıyor | --nofoldersizes ekleyin |
Too many simultaneous connections | Eşzamanlı IMAP limiti | Paralel iş sayısını azaltın |
Kendi imzalı sertifika uyarısını görmezden gelmenin bedeli, taşıma trafiğinin ortadaki adam saldırısına açık hâle gelmesidir. Tek seferlik bir geçişte iç ağda kabul edilebilir, ama internet üzerinden taşıma yapıyorsanız önce hedef sunucuya geçerli bir sertifika kurun. Sertifika tarafında sıkışırsanız SSL sertifikası sayfamızdaki seçenekler işi birkaç dakikaya indirir.
Taşıma Sonrası Doğrulama#
"Bitti" demeden önce sayı saymak gerekir. Hem kaynakta hem hedefte klasör bazında mesaj adedini karşılaştırmanın en hızlı yolu imapsync'in kendi sayım kipidir:
# Sadece klasörleri ve mesaj sayılarını listele, hiçbir şey taşıma
imapsync --justfoldersizes \
--host1 eski.firmaniz.com --user1 [email protected] --passfile1 /root/.eski.pass --ssl1 \
--host2 yeni.firmaniz.com --user2 [email protected] --passfile2 /root/.yeni.pass --ssl2
Çıktıda her klasör için Host1 ve Host2 mesaj sayıları yan yana gelir; ikisi eşitse o klasör tamamdır. --exclude ile atladığınız Spam ve Trash klasörlerinde fark olması normaldir, onları göz ardı edin. Sayılar tutuyorsa bir de kullanıcı gözüyle bakın: rastgele üç hesabı webmail üzerinden açıp en eski mesajın hâlâ orada olduğunu, gönderilmiş klasörünün dolu olduğunu ve okunmamış sayılarının makul göründüğünü kontrol edin.
Son adım, taşınan verinin bir kopyasını almaktır. Geçiş tamamlandıktan sonra eski sunucuyu kapatacaksanız, kutuların bağımsız bir yedeğini almadan bunu yapmayın; e-posta hesabı yedekleme yazısındaki yöntemlerden biriyle tek seferlik bir arşiv üretmek, ileride çıkacak "şu mail nerede" sorularının tek cevabı olabilir. Düzenli yedeklemeyi sisteme bağlamak isterseniz yedekleme hizmetimiz bu işi otomatikleştirir.
Sıkça Sorulan Sorular#
imapsync ile mail taşıma ne kadar sürer#
Süreyi belirleyen şey mesaj adedi ve kutu boyutu değil, çoğu zaman ağ gecikmesi ve sunucuların IMAP yanıt hızıdır. Kaba bir ölçü olarak, aynı veri merkezindeki iki sunucu arasında saatte birkaç GB, farklı ülkeler arasında bunun yarısı kadar veri taşındığını görürsünüz. 50.000 mesajlık bir kutu tipik olarak 1-3 saat alır. İlk tam senkronizasyon uzun sürse de ikinci delta çalıştırması genellikle birkaç dakikada biter, çünkü sadece aradaki fark aktarılır.
imapsync ücretsiz mi#
imapsync'in komut satırı sürümü açık kaynaklıdır ve Linux dağıtımlarının depolarından ücretsiz kurulur; bu rehberdeki her komut o sürümle çalışır. Projenin sahibi ayrıca hazır derlenmiş paketler ve grafik arayüzlü bir sürüm satmaktadır, ancak taşıma yapmak için bunlara ihtiyacınız yok. Kısacası tipik bir sunucu geçişinde ödeyeceğiniz bir lisans bedeli bulunmuyor.
Taşıma sırasında kullanıcılar mail alıp gönderebilir mi#
Evet, imapsync kaynak kutuyu salt okunur biçimde kullanır ve kullanıcıların çalışmasını engellemez. İlk senkronizasyonu MX kaydını çevirmeden önce yaptığınız için kullanıcılar o sırada eski sunucuda normal şekilde çalışmaya devam eder. Asıl kritik an MX değişikliğidir; o noktadan sonra yeni gelen mailler yeni sunucuya düşer ve eski sunucuda kalan son mesajları ikinci senkronizasyon toplar.
Aynı komutu iki kez çalıştırırsam mesajlar çoğalır mı#
Hayır. imapsync her mesaj için başlıklardan bir imza üretir ve hedefte aynı imzaya sahip mesaj varsa onu atlar. Bu yüzden komutu istediğiniz kadar tekrar çalıştırabilirsiniz. Nadiren, kaynak sunucu Message-Id başlığı üretmeyen mesajlar barındırıyorsa veya iki sunucu mesaj boyutunu farklı raporluyorsa yinelenme görülebilir; bu durumda --useheader 'Message-Id' ve --skipsize bayraklarını ekleyerek karşılaştırmayı sadeleştirin.
Sieve filtrelerini ve otomatik yanıtları da taşır mı#
Hayır, imapsync yalnızca IMAP üzerinden görünen mesajları ve klasörleri taşır. Sunucu tarafı filtre kuralları, tatil/otomatik yanıt metinleri, iletim adresleri ve takma adlar IMAP protokolünün kapsamı dışındadır. Bunları hedef sunucuda panelden yeniden tanımlamanız gerekir. Geçiş öncesi eski panelde bu ayarların ekran görüntüsünü almak, sonradan "otomatik yanıtım çalışmıyor" şikâyetlerini önler.
Gmail veya Microsoft 365 kutusunu imapsync ile taşıyabilir miyim#
Teknik olarak evet, çünkü her ikisi de IMAP sunar; ancak iki tarafta da uygulama şifresi veya OAuth tabanlı kimlik doğrulama gerekir, düz hesap şifresi genellikle kabul edilmez. Ayrıca Gmail etiket yapısını klasör gibi gösterdiği için bir mesaj birden fazla etikette görünüyorsa hedefte birden fazla kopya oluşabilir. Bu senaryolarda --gmail1 gibi hazır kısayolları kullanmak ve "All Mail" klasörünü dışlamak taşımayı çok daha temiz hâle getirir.
Taşıma yarıda kesilirse baştan mı başlamak gerekir#
Hayır, tam da bu yüzden imapsync tercih ediliyor. Bağlantı koptuğunda veya işlemi durdurduğunuzda hedefe yazılmış mesajlar orada kalır; komutu tekrar çalıştırdığınızda araç iki tarafı yeniden karşılaştırır ve sadece eksikleri tamamlar. Uzun süren taşımaları screen veya tmux oturumunda başlatmak, SSH bağlantınız düştüğünde işin devam etmesini sağlar.
Kapanış#
imapsync'i güvenli kullanmanın özü birkaç alışkanlıkta toplanıyor: her komutu önce --dry ile denemek, şifreleri komut satırı yerine dosyadan okutmak, klasör ön eki ve ayracını taşımadan önce doğrulamak, ve taşımayı tek seferde değil MX geçişinin iki yakasına yayılmış iki aşamada yapmak. Bitirdikten sonra --justfoldersizes ile sayıları karşılaştırmadan ve eski sunucuyu en az bir hafta ayakta tutmadan "tamamlandı" demeyin.
Bu işi kendiniz yürütmek yerine devretmek isterseniz Clou.TR tarafında hazır bir yol var: site taşıma hizmetimiz mail kutularının aktarımını ve MX geçişini birlikte planlar, e-posta çözümlerimizde kutular hedef tarafta baştan doğru kota ve kimlik doğrulama ayarlarıyla açılır. Kendi mail sunucunuzu kurmak ve taşımayı root erişimiyle yönetmek istiyorsanız VDS paketleri, yüksek hacimli gönderim yapıyorsanız SMTP sunucu çözümümüz uygun başlangıç noktalarıdır.