Content
Mengapa Perlu Migrasi Email dari Office 365?
Microsoft Office 365 adalah layanan email yang banyak digunakan perusahaan. Namun, ada kalanya perusahaan ingin berpindah ke server IMAP lokal untuk penghematan biaya, privasi data, atau integrasi sistem internal.
Sejak Microsoft menonaktifkan Basic Authentication pada Oktober 2022, migrasi email membutuhkan dukungan OAuth2, bukan lagi username & password biasa.
Jika kamu mencoba menggunakan username dan password biasa tanpa OAuth2, kamu kemungkinan akan menemukan error seperti:auth [LOGIN]: 2 NO LOGIN failed.
NO CAPABILITY for AUTHENTICATE LOGIN
Apa Itu Imapsync?
Imapsync adalah tool open-source yang memungkinkan sinkronisasi email antar server IMAP, cocok untuk migrasi email dari dan ke Office 365, Gmail, Zimbra, cPanel, atau server lainnya.
Persyaratan Sistem
Sebelum memulai, persiapkan:
Sistem Operasi Berbasis Linux (misalnya, Ubuntu 20.04 atau 22.04)
Akun Microsoft 365: Pastikan izin IMAP aktif, dan kamu memiliki password untuk login.
oauth2_imap
– skrip Python dari imapsync.lamiral.info yang digunakan untuk mendapatkan access token OAuth2 dari Microsoft Graph (digunakan saat login ke Office 365 via IMAP).
Bisa Download disini atau disiniAkun IMAP tujuan: Pastikan akun IMAP tujuan beserta password-nya tersedia (contohnya disini admin menggunakan Zimbra).
Langkah-langkah Migrasi Email Office 365 ke Server IMAP
1. Install Imapsync Versi Terbaru
-
- Instalasi Dependensi:
Untuk memulai, Anda perlu menginstal beberapa dependensi Perl yang diperlukan oleh imapsync. Gunakan perintah berikut untuk menginstal semua paket yang dibutuhkan:
sudo apt-get update sudo apt-get install \ libauthen-ntlm-perl \ libclass-load-perl \ libcrypt-openssl-rsa-perl \ libcrypt-ssleay-perl \ libdata-uniqid-perl \ libdigest-hmac-perl \ libdist-checkconflicts-perl \ libencode-imaputf7-perl \ libfile-copy-recursive-perl \ libfile-tail-perl \ libio-compress-perl \ libio-socket-inet6-perl \ libio-socket-ssl-perl \ libio-tee-perl \ libjson-webtoken-perl \ libmail-imapclient-perl \ libmodule-scandeps-perl \ libnet-dbus-perl \ libnet-ssleay-perl \ libpar-packer-perl \ libproc-processtable-perl \ libreadonly-perl \ libregexp-common-perl \ libsys-meminfo-perl \ libterm-readkey-perl \ libtest-fatal-perl \ libtest-mock-guard-perl \ libtest-mockobject-perl \ libtest-pod-perl \ libtest-requires-perl \ libtest-simple-perl \ libunicode-string-perl \ liburi-perl \ libtest-nowarnings-perl \ libtest-deep-perl \ libtest-warn-perl \ make \ time \ cpanminus
- Instalasi Modul Perl Mail::IMAPClient:
Setelah menginstal dependensi, Anda dapat menginstal modul Mail::IMAPClient menggunakan CPAN (sebagai modul utama untuk imapsync):
promax@fbs:~$ sudo cpanm Mail::IMAPClient
- Mengunduh dan Menyiapkan imapsync:
Setelah semua dependensi terpasang, Anda dapat mengunduh imapsync dari GitHub atau situs utama imapsync.
root@fbs:/opt# wget -N https://raw.githubusercontent.com/imapsync/imapsync/master/imapsync --2025-04-15 12:35:43-- https://raw.githubusercontent.com/imapsync/imapsync/master/imapsync Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.108.133, 185.199.111.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 828737 (809K) [text/plain] Saving to: ‘imapsync’ Last-modified header missing -- time-stamps turned off. 2025-04-15 12:35:45 (462 KB/s) - ‘imapsync’ saved [828737/828737] root@fbs:/opt# chmod +x imapsync root@fbs:/opt# ./imapsync Name: imapsync - Email IMAP tool for syncing, copying, migrating and archiving email mailboxes between two imap servers, one way, and without duplicates.
- Instalasi Dependensi:
2. Konfigurasi OAuth2 untuk Sinkronisasi IMAP dari Office365 ke Zimbra
-
- Instalasi Dependensi:
apt update && apt install -y libauthen-sasl-perl libio-socket-ssl-perl libnet-ssleay-perl libterm-readkey-perl libwww-perl unzip
- Unduh dan Ekstrak oauth2_imap:
cd /opt wget --no-check-certificate https://fajar.hanara.id/oauth2_imap.zip unzip oauth2_imap.zip cd oauth2_imap
- Jalankan Proses Autentikasi OAuth2 untuk Office365:
root@fbs:/opt/oauth2_imap# ./oauth2_imap --provider office365 selvy.kurniawati@mavix-investama.com The provider used comes from --provider office365 Reading tokens from file tokens/oauth2_tokens_selvy.kurniawati@mavix-investama.com.txt, if any Now waiting for the code, 120 sec max, at https://localhost:49087 Launched httpd ssl Go to the following link with your web browser: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&tenant=common&scope=offline_access%20https%3A%2F%2Foutlook.office.com%2FIMAP.AccessAsUser.All&login_hint=selvy.kurniawati%40mavix-investama.com&response_type=code&redirect_uri=https%3A%2F%2Flocalhost%3A49087&code_challenge=XAhVugCussoQbTbgMywVP154lDVUKaNRBy_lhlp8FOE&code_challenge_method=S256&state=qzgclpisxcgcvfzqljebridajovsrkcd I help you to open the link with the following, hoping it works firefox 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=9e5f94bc-e8a4-4e73-b8be-63364c29d753&tenant=common&scope=offline_access%20https%3A%2F%2Foutlook.office.com%2FIMAP.AccessAsUser.All&login_hint=selvy.kurniawati%40mavix-investama.com&response_type=code&redirect_uri=https%3A%2F%2Flocalhost%3A49087&code_challenge=XAhVugCussoQbTbgMywVP154lDVUKaNRBy_lhlp8FOE&code_challenge_method=S256&state=qzgclpisxcgcvfzqljebridajovsrkcd' update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/local/share/doc /usr/local/share/doc none bind,ro 0 0): cannot open directory "/usr/local/share": permission denied update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/share/gimp/2.0/help /usr/share/gimp/2.0/help none bind,ro 0 0): cannot write to "/var/lib/snapd/hostfs/usr/share/gimp/2.0/help" because it would affect the host in "/var/lib/snapd" update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/share/gtk-doc /usr/share/gtk-doc none bind,ro 0 0): cannot write to "/var/lib/snapd/hostfs/usr/share/gtk-doc" because it would affect the host in "/var/lib/snapd" update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/share/libreoffice/help /usr/share/libreoffice/help none bind,ro 0 0): cannot write to "/var/lib/snapd/hostfs/usr/share/libreoffice/help" because it would affect the host in "/var/lib/snapd" update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/share/sphinx_rtd_theme /usr/share/sphinx_rtd_theme none bind,ro 0 0): cannot write to "/var/lib/snapd/hostfs/usr/share/sphinx_rtd_theme" because it would affect the host in "/var/lib/snapd" update.go:85: cannot change mount namespace according to change mount (/var/lib/snapd/hostfs/usr/share/xubuntu-docs /usr/share/xubuntu-docs none bind,ro 0 0): cannot write to "/var/lib/snapd/hostfs/usr/share/xubuntu-docs" because it would affect the host in "/var/lib/snapd" mkdir: cannot create directory ‘/run/user/0’: Permission denied Authorization required, but no authorization protocol specified Error: cannot open display: :1 Now I try to collect the code. Will give up in 120 seconds (maybe 4x). Entering oauth2_collect_code_localhost Leaving oauth2_collect_code_localhost Entering oauth2_collect_code_localhost Connection accepted Use of uninitialized value $code in pattern match (m//) at /usr/share/perl5/HTTP/Daemon.pm line 466. Leaving oauth2_collect_code_localhost Success collecting the code the second time GOOD! Exchanging the code for an access token and a refresh token... token_response: {"token_type":"Bearer","scope":"https://outlook.office.com/IMAP.AccessAsUser.All","expires_in":4053,"ext_expires_in":4053,"access_token":"eyJ0eiOiJKV1QiLCJub25jZSI6ImRINUFZaDNaZlNOX0tpUmVnc3dXUzVkZDNCMkN1dXhqamxsZE9wcU1vSU0iLCJhbGciOiJSUzI1NiIsIng1dCI6IkNOdjBPSTNSd3FsSEZFVm5hb01Bc2hDSDJYRSIsImtpZCI6IkNOdjBPSTNSd3FsSEZFVm5hb01Bc2hDSDJYRSJ9.eyJhdWQiOiJodHRwczovL291dGxvb2sub2ZmaWNlLmNvbSIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0L2Q3YzQ5ZjAzLTM5YzAtNDIyNy04M2I0LTlhZDIzOWY1N2RmYS8iLCJpYXQiOjE3NDQ2OTU0NDAsIm5iZiI6MTc0NDY5NTQ0MCwiZXhwIjoxNzQ0Njk5Nzk0LCJhY2N0IjowLCJhY3IiOiIxIiwiYWlvIjoiQVVRQXUvOFpBQUFBTVk0RnVEZEZKVUcvVkJsL1Q3eTNTWnlBTTRNWnZYdE16U010QXFPbkduWnpwTy9ITjU2L3FIYWpGblJQMklJdTlyTUlEWmRIdmZnQVY0czdlWkRwcFE9PSIsImFtciI6WyJwd2QiXSwiYXBwX2Rpc3BsYXluYW1lIjoiVGh1bmRlcmJpcmQiLCJhcHBpZCI6IjllNWY5NGJjLWU4YTQtNGU3My1iOGJlLTYzMzY0YzI5ZDc1MyIsImFwcGlkYWNyIjoiMCIsImVuZnBvbGlkcyI6W10sImZhbWlseV9uYW1lIjoiS3Vybmlhd2F0aSIsImdpdmVuX25hbWUiOiJTZWx2eSIsImlkdHlwIjoidXNlciIsImlwYWRkciI6IjEwMy4xOTYuMTQ2LjIwNyIsImxvZ2luX2hpbnQiOiJPLkNpUXlOMlJpTnpBMFpDMWpNekpsTFRReU16Y3RPREF6WmkwNFpUSmxNMlV4TnpBek1tVVNKR1EzWXpRNVpqQXpMVE01WXpBdE5ESXlOeTA0TTJJMExUbGhaREl6T1dZMU4yUm1ZUm9rYzJWc2Rua3VhM1Z5Ym1saGQyRjBhVUJ0WVhacGVDMXBiblpsYzNSaGJXRXVZMjl0SU1rQiIsIm5hbWUiOiJTZWx2eSBLdXJuaWF3YXRpIiwib2lkIjoiMjdkYjcwNGQtYzMyZS00MjM3LTgwM2YtOGUyZTNlMTcwMzJlIiwicHVpZCI6IjEwMDMyMDAyRTU5OTU5QTYiLCJyaCI6IjEuQVZZQUE1X0UxOEE1SjBLRHRKclNPZlY5LWdJQUFBQUFBUEVQemdBQUFBQUFBQUNmQUY5V0FBLiIsInNjcCI6IklNQVAuQWNjZXNzQXNVc2VyLkFsbCIsInNpZCI6IjAwM2YzM2M5LWMyYzQtZGRiNS05MWZjLWYwYjc5MWJkYWU2NCIsInN1YiI6IlIzVkdreS1jcjdMUlFseWhmWi1WclRvY0s3QXI5VXc0MEV3X2w5OUJWMzgiLCJ0aWQiOiJkN2M0OWYwMy0zOWMwLTQyMjctODNiNC05YWQyMzlmNTdkZmEiLCJ1bmlxdWVfbmFtZSI6InNlbHZ5Lmt1cm5pYXdhdGlAbWF2aXgtaW52ZXN0YW1hLmNvbSIsInVwbiI6InNlbHZ5Lmt1cm5pYXdhdGlAbWF2aXgtaW52ZXN0YW1hLmNvbSIsInV0aSI6ImFjNmwtTkVvdmtxeXNDZFltblVxQUEiLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbImI3OWZiZjRkLTNlZjktNDY4OS04MTQzLTc2YjE5NGU4NTUwOSJdLCJ4bXNfYXVkX2d1aWQiOiIwMDAwMDAwMi0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJ4bXNfaWRyZWwiOiIxIDEwIn0.GDYrpzJR-9762kBMr-8o4FZolk-Qo-7uStnQxuMiDCjPtGKE4f-Jrib6i1kwoJp0bp2kn9B6CF-DcAFoX-lJ7iX8of9gA_BA1Jk60w-NME8NF3BtF3lDOqPngUvsjqaxv4ZsRXi8wnLJ3vPiPtJSvB8uQ8VIDqJ95IbIlwqrP8Tuf3TIqT0bxI-UfHYnlWAcNO_UYxwnasegzeMBuqUt-zp_1ETkb9hthjiFSJjo2Xow82tozSQ3socRQMtaS9ft1xLs4VI2KzmufrkK2TVoUpNNJZiR1lail26FK8rPsR878FBdbHQcL6MuZzR8Xbtwru48JV__Ph1M1z-XsxLP6w","refresh_token":"1.AVYAA5_E18A5J0KDtJrSOfV9-ryUX56k6HNOuL5jNkwp11OfAF9WAA.AgABAwEAAABVrSpeuWamRam2jAF1XRQEAwDs_wUA9P8EB2A7tZuRWHvoKMw5T4iKouh1i6PnjSeqMdRgWFqsawwuqCJagbxpsirToSZcUu_iS13FSm8k94_3-fW3UNFdgNrFsSVU7QzLZqZSmbs-BMT84tCBFws66nEZoEuw8kY98v0yuYK3ihks-5lUCSQQhHrED7_cv97jUCuxni8y9k5cf7nlcQ52Q2cXkjbwi4WjqQL7V7cSLsbLasm3fWPsjz5NTK_-BJPOfSsveIFb3uBq3GV75pKBAUp9lIuUdip3Ta6n27NkOVik-2QuSmpMjphzo-sSIvdNQHQH0WnD0YFN52Lvuaype1aQFDDZ4TlcVPePP7TlIbn681LpbOtwJ3glg4tLcB3N3hsQv0-UO47iwQQwJDwNdTJTeuGhpvM2YwBpreR5cZo_igETY2m1T1soO2dCAdeOzTRjqdhw_ESnhUxUoXPb8o-dhQnRUinPTEJafzT2YXPdPwh9BSPCzxQXx4rOJU74lPJSLAuUQ_KtehVC7dy1QAv_FOGmDtGTqdRDSJX-8w7UTV7a5RlSR2IMAEKkrsifeKqXtUEBtxYnlqC-t2G3SqlqVMntdLWjN5WytvJSXZ0DBaqPcvLYFT40MJEVyp3d96HqaEqHMVGqbiPttA44KRu7Oc5Ovhy07zPBx7IvSiaGbuEOoE4nm6c8VOnP39_eX3W5MvQmJJiviMZrEHcxvRuTwMJ_hrufWawowfIC9iGGiIqNuduopw4KAOyxvRn-7-HSaPhaN8luNu7lQhaZux7uzHFRX671GUzYcZoMxUiU5xvU"} access token: eyJ0eXAiOiJKV1QiLCJub25jZSI6ImRINUFZaDNaZlNOX0tpUmVnc3dXUzVkZDNCMkN1dXhqamxsZE9wcU1vSU0iLCJhbGciOiJSUzI1NiIsIng1dCI6IkNOdjBPSTNSd3FsSZFVm5hb01Bc2hDSJYRSIsImtpZCI6IkNOdjBPSTNSd3FsSEZFVm5hb01Bc2hDSDJYRSJ9.eyJhdWQiOiJodHRwczovL291dGxvb2sub2ZmaWNlLmNvbSIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0L2Q3YzQ5ZjAzLTM5YzAtNDIyNy04M2I0LTlhZDIzOWY1N2RmYS8iLCJpYXQiOjE3NDQ2OTU0NDAsIm5iZiI6MTc0NDY5NTQ0MCwiZXhwIjoxNzQ0Njk5Nzk0LCJhY2N0IjowLCJhY3IiOiIxIiwiYWlvIjoiQVVRQXUvOFpBQUFBTVk0RnVEZEZKVUcvVkJsL1Q3eTNTWnlBTTRNWnZYdE16U010QXFPbkduWnpwTy9ITjU2L3FIYWpGblJQMklJdTlyTUlEWmRIdmZnQVY0czdlWkRwcFE9PSIsImFtciI6WyJwd2QiXSwiYXBwX2Rpc3BsYXluYW1lIjoiVGh1bmRlcmJpcmQiLCJhcHBpZCI6IjllNWY5NGJjLWU4YTQtNGU3My1iOGJlLTYzMzY0YzI5ZDc1MyIsImFwcGlkYWNyIjoiMCIsImVuZnBvbGlkcyI6W10sImZhbWlseV9uYW1lIjoiS3Vybmlhd2F0aSIsImdpdmVuX25hbWUiOiJTZWx2eSIsImlkdHlwIjoidXNlciIsImlwYWRkciI6IjEwMy4xOTYuMTQ2LjIwNyIsImxvZ2luX2hpbnQiOiJPLkNpUXlOMlJpTnpBMFpDMWpNekpsTFRReU16Y3RPREF6WmkwNFpUSmxNMlV4TnpBek1tVVNKR1EzWXpRNVpqQXpMVE01WXpBdE5ESXlOeTA0TTJJMExUbGhaREl6T1dZMU4yUm1ZUm9rYzJWc2Rua3VhM1Z5Ym1saGQyRjBhVUJ0WVhacGVDMXBiblpsYzNSaGJXRXVZMjl0SU1rQiIsIm5hbWUiOiJTZWx2eSBLdXJuaWF3YXRpIiwib2lkIjoiMjdkYjcwNGQtYzMyZS00MjM3LTgwM2YtOGUyZTNlMTcwMzJlIiwicHVpZCI6IjEwMDMyMDAyRTU5OTU5QTYiLCJyaCI6IjEuQVZZQUE1X0UxOEE1SjBLRHRKclNPZlY5LWdJQUFBQUFBUEVQemdBQUFBQUFBQUNmQUY5V0FBLiIsInNjcCI6IklNQVAuQWNjZXNzQXNVc2VyLkFsbCIsInNpZCI6IjAwM2YzM2M5LWMyYzQtZGRiNS05MWZjLWYwYjc5MWJkYWU2NCIsInN1YiI6IlIzVkdreS1jcjdMUlFseWhmWi1WclRvY0s3QXI5VXc0MEV3X2w5OUJWMzgiLCJ0aWQiOiJkN2M0OWYwMy0zOWMwLTQyMjctODNiNC05YWQyMzlmNTdkZmEiLCJ1bmlxdWVfbmFtZSI6InNlbHZ5Lmt1cm5pYXdhdGlAbWF2aXgtaW52ZXN0YW1hLmNvbSIsInVwbiI6InNlbHZ5Lmt1cm5pYXdhdGlAbWF2aXgtaW52ZXN0YW1hLmNvbSIsInV0aSI6ImFjNmwtTkVvdmtxeXNDZFltblVxQUEiLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbImI3OWZiZjRkLTNlZjktNDY4OS04MTQzLTc2YjE5NGU4NTUwOSJdLCJ4bXNfYXVkX2d1aWQiOiIwMDAwMDAwMi0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJ4bXNfaWRyZWwiOiIxIDEwIn0.GDYrpzJR-9762kBMr-8o4FZolk-Qo-7uStnQxuMiDCjPtGKE4f-Jrib6i1kwoJp0bp2kn9B6CF-DcAFoX-lJ7iX8of9gA_BA1Jk60w-NME8NF3BtF3lDOqPngUvsjqaxv4ZsRXi8wnLJ3vPiPtJSvB8uQ8VIDqJ95IbIlwqrP8Tuf3TIqT0bxI-UfHYnlWAcNO_UYxwnasegzeMBuqUt-zp_1ETkb9hthjiFSJjo2Xow82tozSQ3socRQMtaS9ft1xLs4VI2KzmufrkK2TVoUpNNJZiR1lail26FK8rPsR878FBdbHQcL6MuZzR8Xbtwru48JV__Ph1M1z-XsxLP6w refresh token: 1.AVYAA5_E18A5J0KDtJrSOfV9-ryUX56k6HNOuL5jNkwp11OfAF9WAA.AgABAwEAAABVrSpeuWamRam2jAF1XRQEAwDs_wUA9P8EB2A7tZuRWHvoKMw5T4ouh1i6PnjSeqMdRgWFqsawwuqCJagbxpsirToSZcUu_iS13FSm8k94_3-fW3UNFdgNrFsSVU7QzLZqZSmbs-BMT84tCBFws66nEZoEuw8kY98v0yuYK3ihks-5lUCSQQhHrED7_cv97jUCuxni8y9k5cf7nlcQ52Q2cXkjbwi4WjqQL7V7cSLsbLasm3fWPsjz5NTK_-BJPOfSsveIFb3uBq3GV75pKBAUp9lIuUdip3Ta6n27NkOVik-2QuSmpMjphzo-sSIvdNQHQH0WnD0YFN52Lvuaype1aQFDDZ4TlcVPePP7TlIbn681LpbOtwJ3glg4tLcB3N3hsQv0-UO47iwQQwJDwNdTJTeuGhpvM2YwBpreR5cZo_igETY2m1T1soO2dCAdeOzTRjqdhw_ESnhUxUoXPb8o-dhQnRUinPTEJafzT2YXPdPwh9BSPCzxQXx4rOJU74lPJSLAuUQ_KtehVC7dy1QAv_FOGmDtGTqdRDSJX-8w7UTV7a5RlSR2IMAEKkrsifeKqXtUEBtxYnlqC-t2G3SqlqVMntdLWjN5WytvJSXZ0DBaqPcvLYFT40MJEVyp3d96HqaEqHMVGqbiPttA44KRu7Oc5Ovhy07zPBx7IvSiaGbuEOoE4nm6c8VOnP39_eX3W5MvQmJJiviMZrEHcxvRuTwMJ_hrufWawowfIC9iGGiIqNuduopw4KAOyxvRn-7-HSaPhaN8luNu7lQhaZux7uzHFRX671GUzYcZoMxUiU5xvU
- Instalasi Dependensi:
Setelah perintah dijalankan, aplikasi akan membuka link otorisasi dan menunggu kode selama 120 detik. Buka link tersebut di browser untuk melakukan login dan otorisasi.Jika menggunakan server tanpa antarmuka grafis (headless), salin link yang muncul ke browser.
-
-
Setelah login berhasil dan mengizinkan akses, token akan otomatis disimpan di direktori
tokens/
dengan nama file:root@fbs:/opt/oauth2_imap# ls build_oauth2_imap_exe.bat localhost_CA_cert localhost.key oauth2_example_dev.bat oauth2_example_gmail.sh oauth2_example_loop.sh oauth2_imap RCS sundry cert localhost.crt oauth2_example_any.bat oauth2_example_gmail.bat oauth2_example_loop.bat oauth2_example_office365.bat oauth2_imap.exe README_oauth2.txt tokens root@fbs:/opt/oauth2_imap# ls tokens/ oauth2_tokens_selvy.kurniawati@mavix-investama.com.txt root@fbs:/opt/oauth2_imap#
-
3. Jalankan imapsync dengan Token OAuth2
-
- Gunakan token OAuth2 yang telah disimpan pada langkah sebelumnya untuk sinkronisasi IMAP dari Office365 ke Zimbra:
-
./imapsync \ --host1 outlook.office365.com \ --user1 selvy.kurniawati@mavix-investama.com \ --oauthaccesstoken1 /opt/oauth2_imap/tokens/oauth2_tokens_selvy.kurniawati@mavix-investama.com.txt \ --host2 mail.mavix-investama.com \ --user2 selvy.kurniawati@mavix-investama.com \ --password2 "GantiPassword123!" \ --automap
Penjelasan opsi:
-
--host1
dan--user1
: Email sumber dari Office365. -
--oauthaccesstoken1
: Token OAuth2 hasil dari proses autentikasi. -
--host2
,--user2
, dan--password2
: Email tujuan di Zimbra dan password barunya. -
--automap
: Memetakan folder secara otomatis antar server.
-
Kesimpulan
Migrasi dari Office 365 ke server IMAP menggunakan imapsync
dengan autentikasi OAuth2 memberikan fleksibilitas tinggi, terutama untuk kebutuhan backup, migrasi ke server on-premise seperti Zimbra, atau hanya sekadar audit. Dengan metode ini, kita bisa melakukan migrasi email secara aman tanpa menyimpan password asli user.
Tips Tambahan:
Batch Migrasi: Untuk banyak akun, buat file CSV berisi data akun sumber dan tujuan, lalu jalankan
imapsync
dengan script looping.Limitasi Rate: Perhatikan batas rate API Microsoft. Gunakan
--maxbytespersecond
atau jeda antar akun bila migrasi masal.Sinkronisasi Berkala: Bisa dijadwalkan via cron untuk sinkronisasi berkala jika belum akan cut-off user dari Office 365.
4 Responses to “Cara Migrasi Email dari Office 365 ke Server IMAP Menggunakan Imapsync dan OAuth2 di Ubuntu”
Rudi
Tutorial ini work banget! Saya pakai Ubuntu Server 24.04 LTS dan tidak ada error. Tapi waktu generate OAuth2 token agak bingung.
Fajar Budi Setiawan
Terima kasih Rudi! Untuk bagian OAuth2 Office 365, yang penting adalah pendaftaran aplikasi di portal Azure dan memastikan permission IMAP sudah diaktifkan. Kami juga sarankan menggunakan tool seperti o365-imap-oauth2 atau imap-oauth2-client untuk mempermudah proses generate token.
Ahmad
Terima kasih banyak, tutorialnya sangat membantu! Saya sudah coba migrasi dari Office 365 ke Zimbra lokal dan berhasil. Tapi apakah cara ini juga bisa diterapkan untuk server mail lain seperti Mailcow atau iRedMail?
Fajar Budi Setiawan
Sama-sama Mas, senang mendengar migrasinya berhasil! Ya, prinsip kerja Imapsync dengan OAuth2 ini cukup fleksibel dan bisa digunakan untuk migrasi ke server IMAP lain seperti Mailcow, iRedMail, bahkan Dovecot. Yang penting, server tujuan mendukung akses IMAP standar. Jangan ragu untuk kontak kami jika ada kendala konfigurasi.