Halo jumpa lagi sahabat sekolahlinux, kali ini saya akan membahas tentang bagaimana sih caranya migrasi email dari 1 email ke email lainnya, tentu ini sangat bermanfaat bagi sysadmin yang sedang mendapatkan tugas migrasi server tapi mail servernya beda engine, nah cara ini akan memudahkan anda, oke langsung saja ikuti cara ini, dan cara ini sudah saya coba di server kantor yang kebetulan berbeda engine mailnya 😀 hehe..
install dulu repo yang kita butuhkan
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
jika sudah install aplikasi imapsyncnya dengan perintah dibawah
yum install imapsync
untuk petunjuk anda bisa menggunakan man ataupun perintah help seperti dibawah ini
[root@akbar ~]# imapsync --help usage: /usr/bin/imapsync [options] Several options are mandatory. --dry : Makes imapsync doing nothing, just print what would be done without --dry. --host1 <string> : Source or "from" imap server. Mandatory. --port1 <int> : Port to connect on host1. Default is 143. --user1 <string> : User to login on host1. Mandatory. --showpasswords : Shows passwords on output instead of "MASKED". Useful to restart a complete run by just reading a log. --password1 <string> : Password for the user1. --host2 <string> : "destination" imap server. Mandatory. --port2 <int> : Port to connect on host2. Default is 143. --user2 <string> : User to login on host2. Mandatory. --password2 <string> : Password for the user2. --passfile1 <string> : Password file for the user1. It must contain the password on the first line. This option avoids to show the password on the command line like --password1 does. --passfile2 <string> : Password file for the user2. Contains the password. --domain1 <string> : Domain on host1 (NTLM authentication). --domain2 <string> : Domain on host2 (NTLM authentication). --authuser1 <string> : User to auth with on host1 (admin user). Avoid using --authmech1 SOMETHING with --authuser1. --authuser2 <string> : User to auth with on host2 (admin user). --proxyauth1 : Use proxyauth on host1. Requires --authuser1. Required by Sun/iPlanet/Netscape IMAP servers to be able to use an administrative user. --proxyauth2 : Use proxyauth on host2. Requires --authuser2. Required by Sun/iPlanet/Netscape IMAP servers to be able to use an administrative user --authmd51 : Use MD5 authentification for host1. --authmd52 : Use MD5 authentification for host2. --authmech1 <string> : Auth mechanism to use with host1: PLAIN, LOGIN, CRAM-MD5 etc. Use UPPERCASE. --authmech2 <string> : Auth mechanism to use with host2. See --authmech1 --ssl1 : Use an SSL connection on host1. --ssl2 : Use an SSL connection on host2. --tls1 : Use an TLS connection on host1. --tls2 : Use an TLS connection on host2. --timeout <int> : Connections timeout in seconds. Default is 120. 0 means no timeout. --folder <string> : Sync this folder. --folder <string> : and this one, etc. --folderrec <string> : Sync this folder recursively. --folderrec <string> : and this one, etc. --folderfirst <string> : Sync this folder first. --folderfirst "Work" --folderfirst <string> : then this one, etc. --folderlast <string> : Sync this folder last. --folderlast "[Gmail]/All Mail" --folderlast <string> : then this one, etc. --include <regex> : Sync folders matching this regular expression Blancs like in "foo bar" have to be written "foo bar" --include <regex> : or this one, etc. in case both --include --exclude options are use, include is done before. --exclude <regex> : Skips folders matching this regular expression Several folders to avoid: --exclude 'fold1|fold2|f3' skips fold1, fold2 and f3. --exclude <regex> : or this one, etc. --regextrans2 <regex> : Apply the whole regex to each destination folders. --regextrans2 <regex> : and this one. etc. When you play with the --regextrans2 option, first add also the safe options --dry --justfolders Then, when happy, remove --dry, remove --justfolders. Have in mind that --regextrans2 is applied after prefix and separator inversion. --tmpdir <string> : Where to store temporary files and subdirectories. Will be created if it doesn't exist. Default is system specific, Unix is /tmp but it's often small and deleted at reboot. --tmpdir /var/tmp should be better. --pidfile <string> : The file where imapsync pid is written. --pidfilelocking : Abort if pidfile already exists. Usefull to avoid concurrent transfers on the same mailbox. --prefix1 <string> : Remove prefix to all destination folders (usually INBOX. or INBOX/ or an empty string "") you have to use --prefix1 if host1 imap server does not have NAMESPACE capability, all other cases are bad. --prefix2 <string> : Add prefix to all host2 folders. See --prefix1 --sep1 <string> : Host1 separator in case NAMESPACE is not supported. --sep2 <string> : Host2 separator in case NAMESPACE is not supported. --disarmreadreceipts : Disarms read receipts (host2 Exchange issue) --regexmess <regex> : Apply the whole regex to each message before transfer. Example: 's/ 00/ /g' # to replace null by space. --regexmess <regex> : and this one. --regexmess <regex> : and this one, etc. --regexflag <regex> : Apply the whole regex to each flags list. Example: 's/"Junk"//g' # to remove "Junk" flag. --regexflag <regex> : and this one, etc. --delete : Deletes messages on host1 server after a successful transfer. Option --delete has the following behavior: it marks messages as deleted with the IMAP flag Deleted, then messages are really deleted with an EXPUNGE IMAP command. --delete2 : Delete messages in host2 that are not in host1 server. Useful for backup or pre-sync. --delete2duplicates : Delete messages in host2 that are duplicates. Works only without --useuid since duplicates are detected with header part of each message. --delete2folders : Delete folders in host2 that are not in host1 server. For safety, first try it like this (it is safe): --delete2folders --dry --justfolders --nofoldersizes --delete2foldersonly <regex>: Deleted only folders matching regex. Example: --delete2foldersonly "/^Junk$|^INBOX.Junk$/" --delete2foldersbutnot <regex>: Do not delete folders matching regex. Example: --delete2foldersbutnot "/Tasks$|Contacts$|Foo$/" --noexpunge : Do not expunge messages on host1. Expunge really deletes messages marked deleted. Expunge is made at the beginning, on host1 only. Newly transferred messages are also expunged if option --delete is given. No expunge is done on host2 account (unless --expunge2) --expunge1 : Expunge messages on host1 after messages transfer. --expunge2 : Expunge messages on host2 after messages transfer. --uidexpunge2 : uidexpunge messages on the host2 account that are not on the host1 account, requires --delete2 --syncinternaldates : Sets the internal dates on host2 same as host1. Turned on by default. Internal date is the date a message arrived on a host (mtime). --idatefromheader : Sets the internal dates on host2 same as the "Date:" headers. --maxsize <int> : Skip messages larger (or equal) than <int> bytes --minsize <int> : Skip messages smaller (or equal) than <int> bytes --maxage <int> : Skip messages older than <int> days. final stats (skipped) don't count older messages see also --minage --minage <int> : Skip messages newer than <int> days. final stats (skipped) don't count newer messages You can do (+ are the messages selected): past|----maxage+++++++++++++++>now past|+++++++++++++++minage---->now past|----maxage+++++minage---->now (intersection) past|++++minage-----maxage++++>now (union) --search <string> : Selects only messages returned by this IMAP SEARCH command. Applied on both sides. --search1 <string> : Same as --search for selecting host1 messages only. --search2 <string> : Same as --search for selecting host2 messages only. --search CRIT equals --search1 CRIT --search2 CRIT --exitwhenover <int> : Stop syncing when total bytes transferred reached. Gmail per day allows 2500000000 down 500000000 upload. --maxlinelength <int> : skip messages with a line length longer than <int> bytes. RFC 2822 says it must be no more than 1000 bytes. --useheader <string> : Use this header to compare messages on both sides. Ex: Message-ID or Subject or Date. --useheader <string> and this one, etc. --subscribed : Transfers subscribed folders. --subscribe : Subscribe to the folders transferred on the host2 that are subscribed on host1. On by default. --subscribe_all : Subscribe to the folders transferred on the host2 even if they are not subscribed on host1. --nofoldersizes : Do not calculate the size of each folder in bytes and message counts. Default is to calculate them. --nofoldersizesatend : Do not calculate the size of each folder in bytes and message counts at the end. Default is on. --justfoldersizes : Exit after having printed the folder sizes. --syncacls : Synchronises acls (Access Control Lists). --nosyncacls : Does not synchronize acls. This is the default. Acls in IMAP are not standardized, be careful. --usecache : Use cache to speedup. --nousecache : Do not use cache. Caveat: --useuid --nousecache creates duplicates on multiple runs. --useuid : Use uid instead of header as a criterium to recognize messages. Option --usecache is then implied unless --nousecache is used. --debug : Debug mode. --debugcontent : Debug content of the messages transfered. --debugflags : Debug flags. --debugimap1 : IMAP debug mode for host1. imap debug is very verbose. --debugimap2 : IMAP debug mode for host2. --debugimap : IMAP debug mode for host1 and host2. --version : Print software version. --noreleasecheck : Do not check for new imapsync release (a http request). --releasecheck : Check for new imapsync release (a http request). --justconnect : Just connect to both servers and print useful information. Need only --host1 and --host2 options. --justlogin : Just login to both host1 and host2 with users credentials, then exit. --justfolders : Do only things about folders (ignore messages). --help : print this help. Example: to synchronize imap account "foo" on "imap.truc.org" to imap account "bar" on "imap.trac.org" with foo password "secret1" and bar password "secret2" /usr/bin/imapsync --host1 imap.truc.org --user1 foo --password1 secret1 --host2 imap.trac.org --user2 bar --password2 secret2 Here is a [linux] system (Linux akbar 2.6.32-504.3.3.el6.x86_64 #1 SMP Wed Dec 17 01:55:02 UTC 2014 x86_64) With perl 5.10.1 Mail::IMAPClient 3.34 $Id: imapsync,v 1.592 2014/05/22 10:03:17 gilles Exp gilles $ New imapsync release 1.607 available Homepage: http://imapsync.lamiral.info/ [root@akbar ~]#
oke jika sudah berikut ini cara menggunakan imapsync, berikut ini saya contohkan commandnya, dan dibawah ini sample email yang akan digunakan
email lama: akbar@domain1.com <<– domain lama pass: J4gt3k
email baru: akbar@domain2.com <<– domain baru pass: J4gt3kn0
jalankan perintah dibawah ini
imapsync
> –host1 mail.domain1.com –user1 akbar@domain1.com –password1 J4gt3k
> –host2 mail.domain2.com –user2 akbar@domain2.com –password2 J4gt3kn0
berikut ini contoh perintah yang saya jalankan di server saya
[root@akbar ~]# imapsync > --host1 mail.domain1.com --user1 akbar@domain1.com --password1 J4gt3k > --host2 mail.domain2.com --user2 akbar@domain2.com --password2 J4gt3kn0 Transfer started at Fri Jan 30 16:32:08 2015 PID is 13307 Log file is LOG_imapsync/2015_01_30_16_32_08_akbar@domain2.com.txt $RCSfile: imapsync,v $ $Revision: 1.592 $ $Date: 2014/05/22 10:03:17 $ Here is a [linux] system (Linux akbar 2.6.32-504.3.3.el6.x86_64 #1 SMP Wed Dec 17 01:55:02 UTC 2014 x86_64) With perl 5.10.1 Mail::IMAPClient 3.34 Command line used: /usr/bin/imapsync --host1 mail.domain1.com --user1 akbar@domain1.com --password1 MASKED --host2 mail.domain2.com --user2 akbar@domain2.com --password2 MASKED Temp directory is /tmp PID file is /tmp/imapsync.pid Modules version list: Mail::IMAPClient 3.34 IO::Socket 1.31 IO::Socket::IP ? IO::Socket::INET 1.31 IO::Socket::SSL 1.31 Net::SSLeay 1.35 Digest::MD5 2.39 Digest::HMAC_MD5 1.01 Digest::HMAC_SHA1 1.01 Term::ReadKey 2.30 Authen::NTLM 1.09 File::Spec 3.3 Time::HiRes 1.9721 URI::Escape 3.29 Data::Uniqid 0.12 Info: turned ON syncinternaldates, will set the internal dates (arrival dates) on host2 same as host1. Info: will try to use LOGIN authentication on host1 Info: will try to use LOGIN authentication on host2 Info: imap connexions timeout is 120 seconds Host1: IMAP server [mail.domain1.com] port [143] user [akbar@domain1.com] Host2: IMAP server [mail.domain2.com] port [143] user [akbar@domain2.com] Host1: * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE NAMESPACE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready. Host1: mail.domain1.com says it has CAPABILITY for AUTHENTICATE LOGIN Host1: success login on [mail.domain1.com] with user [akbar@domain1.com] auth [LOGIN] Host2: * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2008 Double Precision, Inc. See COPYING for distribution information. Host2: mail.domain2.com says it has NO CAPABILITY for AUTHENTICATE LOGIN Host2: success login on [mail.domain2.com] with user [akbar@domain2.com] auth [LOGIN] Host1: state Authenticated Host2: state Authenticated Host1 capability: IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE BINARY MOVE NAMESPACE QUOTA Host2 capability: IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION Host1: separator given by NAMESPACE: [.] Host2: separator given by NAMESPACE: [.] Host1: prefix given by NAMESPACE: [INBOX.] Host2: prefix given by NAMESPACE: [INBOX.] Host1 separator and prefix: [.][INBOX.] Host2 separator and prefix: [.][INBOX.] ++++ Calculating sizes on Host1 Host1 folder [INBOX] Size: 0 Messages: 0 Biggest: 0 Host1 folder [INBOX.Drafts] Size: 0 Messages: 0 Biggest: 0 Host1 folder [INBOX.Junk] Size: 0 Messages: 0 Biggest: 0 Host1 folder [INBOX.Sent] Size: 0 Messages: 0 Biggest: 0 Host1 folder [INBOX.Trash] Size: 0 Messages: 0 Biggest: 0 Host1 Nb messages: 0 messages Host1 Total size: 0 bytes (0.000 KiB) Host1 Biggest message: 0 bytes (0.000 KiB) Host1 Time spent: 0.5 seconds ++++ Calculating sizes on Host2 Host2 folder [INBOX] Size: 418473414 Messages: 8409 Biggest: 19755383 Host2 folder [INBOX.Drafts] Size: 0 Messages: 0 Biggest: 0 Host2 folder [INBOX.Junk] does not exist yet Host2 folder [INBOX.Sent] Size: 0 Messages: 0 Biggest: 0 Host2 folder [INBOX.Trash] Size: 0 Messages: 0 Biggest: 0 Host2 Nb messages: 8409 messages Host2 Total size: 418473414 bytes (399.087 MiB) Host2 Biggest message: 19755383 bytes (18.840 MiB) Host2 Time spent: 1.8 seconds ++++ Listing folders Host1 folders list: [INBOX] [INBOX.Drafts] [INBOX.Junk] [INBOX.Sent] [INBOX.Trash] Host2 folders list: [INBOX] [INBOX.Drafts] [INBOX.Sent] [INBOX.Spam] [INBOX.Trash] Folders in host2 not in host1: [INBOX.Spam] ++++ Looping on each folder [INBOX] -> [INBOX] [INBOX.Drafts] -> [INBOX.Drafts] [INBOX.Junk] -> [INBOX.Junk] Creating folder [INBOX.Junk] on host2 Created folder [INBOX.Junk] on host2 Subscribing to folder INBOX.Junk on destination server [INBOX.Sent] -> [INBOX.Sent] [INBOX.Trash] -> [INBOX.Trash] ++++ End looping on each folder ++++ Calculating sizes on Host1 Host1 folder [INBOX] Size: 0 Messages: 0 Biggest: 0 Host1 folder [INBOX.Drafts] Size: 0 Messages: 0 Biggest: 0 Host1 folder [INBOX.Junk] Size: 0 Messages: 0 Biggest: 0 Host1 folder [INBOX.Sent] Size: 0 Messages: 0 Biggest: 0 Host1 folder [INBOX.Trash] Size: 0 Messages: 0 Biggest: 0 Host1 Nb messages: 0 messages Host1 Total size: 0 bytes (0.000 KiB) Host1 Biggest message: 0 bytes (0.000 KiB) Host1 Time spent: 0.0 seconds ++++ Calculating sizes on Host2 Host2 folder [INBOX] Size: 418473414 Messages: 8409 Biggest: 19755383 Host2 folder [INBOX.Drafts] Size: 0 Messages: 0 Biggest: 0 Host2 folder [INBOX.Junk] does not exist yet Host2 folder [INBOX.Sent] Size: 0 Messages: 0 Biggest: 0 Host2 folder [INBOX.Trash] Size: 0 Messages: 0 Biggest: 0 Host2 Nb messages: 8409 messages Host2 Total size: 418473414 bytes (399.087 MiB) Host2 Biggest message: 19755383 bytes (18.840 MiB) Host2 Time spent: 2.0 seconds ++++ Statistics Transfer started on : Fri Jan 30 16:32:08 2015 Transfer ended on : Fri Jan 30 16:32:20 2015 Transfer time : 11.9 sec Messages transferred : 0 Messages skipped : 0 Messages found duplicate on host1 : 0 Messages found duplicate on host2 : 0 Messages void (noheader) on host1 : 0 Messages void (noheader) on host2 : 0 Messages deleted on host1 : 0 Messages deleted on host2 : 0 Total bytes transferred : 0 (0.000 KiB) Total bytes duplicate host1 : 0 (0.000 KiB) Total bytes duplicate host2 : 0 (0.000 KiB) Total bytes skipped : 0 (0.000 KiB) Total bytes error : 0 (0.000 KiB) Message rate : 0.0 messages/s Average bandwidth rate : 0.0 KiB/s Reconnections to host1 : 0 Reconnections to host2 : 0 Memory consumption : 239.7 MiB Biggest message : 0 bytes Initial difference host2 - host1 : 8409 messages, 418473414 bytes (399.087 MiB) Final difference host2 - host1 : 8409 messages, 418473414 bytes (399.087 MiB) Detected 0 errors Homepage: http://imapsync.lamiral.info/ Log file is LOG_imapsync/2015_01_30_16_32_08_akbar@domain2.com.txt [root@akbar ~]#
yap sampai sini selesai sudah :D, jika gagal atau failed karena authentication default dari imapsync menggunakan tipe CRAM-MD5, jado untuk merubah defaultnya bisa dengan menambahkan metode ini
imapsync > --host1 mail.domain1.com --user1 akbar@domain1.com --password1 J4gt3k --authmech1 <string> > --host2 mail.domain2.com --user2 akbar@domain2.com --password2 J4gt3kn0 --authmech1 <string>
pada bagian <string> ganti dengan jenis enkripsi yang digunakan oleh mail server masing-masing tujuan dan jenis-jenisnya bisa kita lihat di comman imapsync –help
seharusnya email yang berada di server1 dengan user akbar@domain1.com sudah ada juga di server2 dengan user akbar@domain2.com
nah berikut ini script imapsync yang digunakan untuk koneksi server yang menggunakan IMAPS atau SSL dan tipe enkripsinya adalah LOGIN, contoh dibawah saya terapkan dari server exchange server ke cpanel/exim
imapsync --host1 server1.sekolahlinux.com --user1 akbar@sekolahlinux.com --password1 'pa$$word1234' --authmech1 LOGIN --ssl1 --host2 server2.sekolahlinux.com --user2 akbar@sekolahlinux.com --password2 'pa$$word1234' --authmech1 LOGIN
Catatan: jika passwordnya menggunakan symbol juga maka harus menggunakan kutip satu agar bisa terbaca sebagai password oleh imapsync
sekian dari saya semoga bermanfaat 😀
Wah, bagus ya artikelnya! Jangan lupa kunjungi migrasi Email Terima Kasih 🙂