Migrasi Email Server dari Courier Imap dan Authlib MySQL ke Server Zimbra

Tiga hari ini saya melakukan migrasi beberapa server email dan dijadikan satu kesatuan dalam sebuah server zimbra. Server lama menggunakan MTA postfix, Courier-Imap, Courier Authlib, dan MySQL sebagai infrastruktur e-mail server nya.

Alasan menggunakan zimbra adalah kualitas layanan yang lebih baik dan manajamen sumber daya yang lebih terkontrol. Ketika melakukan migrasi server ada beberapa kendala yang sedikit sulit untuk ditangani. Beberapa artikel yang ditulis dalam situs resmi zimbra paling tidak bisa membantu proses migrasi server.

Tutorial ini hanya memberikan gambaran umum saja dan tidak mendetail karena akan mencakup banyak hal. Langkah-langkah yang harus dilakukan dalam migrasi server:

1. Instalasi zimbra server

Pada situs resminya, zimbra disedikan dalam beberapa sistem operasi seperti Red Hat, Ubuntu, Debian, dan OS lainnya. Saya sendiri menggunakan sistem operasi CentOS. Untuk sistem operasi lain selain yang disebutkan dalam situs resminya, instalasi zimbra bisa menggunakan parameter –platform-override

# ./install.sh --platform-override

Lakukan konfigurasi awal dan pastikan zimbra berhasil diakses lewat browser. Tutorial yang bagus untuk melakukan instalasi zimbra bisa dilihat di web zimbra indonesia dan di ngadimin.com

2. Migrasi account dan password dari server lama ke zimbra

Selanjutnya kita akan memindahkan akun email dari server lama ke server baru. Jika kamu menggunakan MySQL dan authlib, kamu bisa mengikuti cara di bawah ini. Cara lain bisa dilihat di situs resmi zimbra. Data user dari server lama dieksport dalam sebuah file dengan menggunakan script di bawah ini.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/php5
// Postfix.admin to Zimbra import
//
// Created by Jarosław Czarniak on 26-10-2008
// Trivial bug fixed by Luca G. on 18-01-2009
 
<?php
    /////////////////////////////////////////////////////////
 
    $user="mysql_login";
    $pass="mysql_pass";
    $base="mysql_database";
    $tabl="mailbox"; //table
    $file="exported.sh";
 
    /////////////////////////////////////////////////////////
    echo "Usage: as \"zimbra\" user on destination server:\n";
    echo "# sh ./exported.sh\n\n";
    echo "";
 
    $mydb = mysql_connect('localhost',$user, $pass) or die ('Error of connection with server');
    mysql_select_db($base);
    mysql_query("SET CHARACTER SET utf8");
    mysql_query("SET NAMES utf8");
 
    $query = "SELECT username,password,name,maildir,quota,domain FROM ".$tabl;
    $dane = mysql_query($query) or die ('Error during query for bazy1'.mysql_error());
 
    $handle = fopen($file, "w");
 
    while ($row = mysql_fetch_array($dane, MYSQL_NUM))
    {
        $StringData = "zmprov ca ".$row[0]." dsfs123hsdyfgbsdgfbsd displayName '".$row[2]."'\n";
        fwrite($handle, $StringData);
        $StringData = "zmprov ma ".$row[0]." userPassword '{crypt}".$row[1]."'"."\n";
        fwrite($handle, $StringData);
    }
 
?>

Jangan lupa untuk mengganti username, password, dan nama database serta tabel MySQL agar script bisa membaca data pada database. Simpan dengan nama migrasi-kontak.php kemudian jalankan script di atas melalui konsol dengan perintah

# php migrasi-kontak.php

Sebuah file dengan nama exported.sh akan muncul yang berisi perintah-perintah untuk mengimport user-user beserta password email ke server zimbra. Salin file exported.sh tersebut ke server zimbra yang baru. Jalankan dengan perintah:

#./exported.sh

Jika berhasil, maka data-data akun email sudah masuk ke dalam zimbra.

3. Instalasi imapsync di server email lama

Imapsync digunakan untuk mengsinkronisasikan email-email di antara 2 server dengan menggunakan metode IMAP. Beberapa cara instalasi imapsync pada berbagai sistem operasi:

FreeBSD

# cd /usr/port/mail/imapsync
# make install clean

Ubuntu

# apt-get install imapsync

CentOS

# perl -MCPAN -e “install Test::Inter”
# perl -MCPAN -e “install Parse::RecDescent”
# perl -MCPAN -e “install Getopt::Long”
# perl -MCPAN -e “CPAN::Shell-&gt;force(qw(install Date::Manip));”
# perl -MCPAN -e “CPAN::Shell-&gt;force(qw(install Mail::IMAPClient));”
# perl -MCPAN -e “CPAN::Shell-&gt;force(qw(install Term::ReadKey));”
# wget http://packages.sw.be/imapsync/imapsync-1.350-1.el5.rf.noarch.rpm
# rpm -i –nodeps imapsync-1.350-1.el5.rf.noarch.rpm

Jika sudah selesai, pastikan perintah imapsync bisa diakses lewat terminal.

4. Migrasi email dengan menggunakan imapsync dari server lama ke server zimbra baru

Masalah utama yang paling berat dalam migrasi server ke zimbra adalah imapsync membutuhkan user-password jika ingin melakukan imapsync. Untungnya zimbra memberikan kemudahan. Cukup dengan memiliki user-password sebuah akun pada server zimbra dengan status admin, kita tidak perlu mengetahui user-password semua akun pada server baru. Untuk server yang hanya mengandalkan postfix, mysql, courier imap, dan courier authlib, tidak ada fasilitas seperti itu. Trik yang dilakukan untuk mengakalinya adalah dengan menggunakan alias direktori email. Kita membuat sebuah akun yang saya beri nama migrasi@domain.lama. Setelah kita bisa masuk ke akun tersebut, direktori akun tersebut dihapus dan diganti dengan alias ke direktori email akun lain. Script berikut berguna untuk menghasilkan list username dan direktori email masing-masing akun.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
    /////////////////////////////////////////////////////////
 
    $user="user_mysql";
    $pass="pass_mysql";
    $base="database";
    $tabl="table_mail"; //table
    $file="user.log";
 
    /////////////////////////////////////////////////////////
    echo "";
 
    $mydb = mysql_connect('localhost',$user, $pass) or die ('Error of connection with server');
    mysql_select_db($base);
    mysql_query("SET CHARACTER SET utf8");
    mysql_query("SET NAMES utf8");
 
    $query = "SELECT username, maildir FROM ".$tabl;
    $dane = mysql_query($query) or die ('Error during query for bazy1'.mysql_error());
 
    $handle = fopen($file, "w");
 
    while ($row = mysql_fetch_array($dane, MYSQL_NUM))
    {
        $StringData = $row[0]."@domain.name ".$row[1]."\n";
        fwrite($handle, $StringData);
    }

Jika field username pada database sudah mengandung alamat email lengkap dengan format @domain.zimbra, maka baris ke 25 bisa harus menghilangkan tanda @domain.name. Jika script di atas dieksekusi dengan menggunakan php, maka akan muncul sebuah file dengan nama user.log. File ini akan berisi informasi email dan direktori tempat email disimpan. Buat sebuah script lagi yang berisi:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
    $trimmed = file('user.log', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    foreach ($trimmed as $data) {
        $user = explode(" ", $data);
        $email = $user[0];
        $inboxdir = $user[1];
 
        passthru("ln -s $inboxdir migrasi");
        $command = "/usr/bin/imapsync --buffersize 8192000 --nosyncacls --subscribe --syncinternaldates --host1 domain.mail.lama --user1 migrasi@domain.mail.lama --password1 migrasi --host2 domain.zimbra --user2 $email --authuser2 admin@domain.zimbra --password2 passworAdminZimbra --noauthmd5 --authmech1 PLAIN --authmech2 PLAIN";
        passthru($command);
        passthru("rm -r migrasi");
    }

Simpan dengan nama migrasi.php. Setelah itu, pindahkan 2 buah file (migrasi.php serta user.log) ke direktori root email disimpan misalnya /home/vmail atau /home/email yang berisi direktori akun-akun email.

# cp migrasi.php user.log /home/mail
# cd /home/mail
# php migrasi.php

Jika semuanya lancar, maka imapsync akan menjalankan migrasi email secara otomatis.
Sebenarnya tutorial ini terlalu panjang untuk dituliskan di blog ini. Saya sendiri menuliskannya untuk keperluan dokumentasi di dalam 5 halaman A4, itu juga sudah banyak yang dipersingkat. Jika ada langkah-langkah yang terlewatkan atau dirasa tidak efektif, silahkan memberi komentar 😆

Leave a Reply

Your email address will not be published. Required fields are marked *