Golfreeze.packetlove.com: Life style of Golfreeze Canon400D Family kammtan.com Jazz Freebsd Unix Linux System Admin guitar Music
All about unix linux freebsd and FAQ for Packetlove.com Web hosting , Mail hosting , VoIP + IP PBX server => all application on unix knowledges by golfreeze => Topic started by: golfreeze on มกราคม 24, 2011, 11:25:15 am
-
พอดีวันนี้ ได้ migrate mail ครับเลยเอาข้อมูลวิธี มาให้เพื่อนๆ พี่ๆ น้องๆ ดูหน่อยเผื่อจะเป็นประโยชน์
บ้าง
อิอิ
การใช้ imapcopy ในการ migrate mail ที่เป็น imap ครับโดยผ่าน perl module
ต้อง download imapcopy shell ก่อนครับโดยหาจาก google ก็ได้ชื่อ Golfinho-IMAPCopy-0.06.tar.gz
เริ่มต้นลง perl module
#perl -MCPAN -e shell
กระผมเลือกใช้ ค่า default ทั้งหมด
เสร็จแล้วทำการลง ตัว Bundle ครับ ในครั้งแรกที่มีการ ลง perl module
CPAN>install Bundle::CPAN
รอสักครู่ นานสองนาน เมื่อเสร็จแล้ว install IMAPClient Module
CPAN>install Mail::IMAPClient
ออกจาก cpan โดย
CPAN>quit
สั่งให้มัน updatedb
#updatedb
#locate IMAPCopy.pm
ทำการ copy IMAPCopy.pm_hack ไปทับไฟล์ IMAPCopy.pm ซึ่ง perl จะเรียกใช้งาน module นี้ครับ
แล้วเราก็เรียก script imapcopy
ถ้ามี user เดียวสั่งแบบนี้ เลยครับ
/usr/bin/imapcopy -from-host mail.xxx.com -from-login golfreeze -from-pass passxxx -to-host
localhost -to-login golfreeze@destination.com -to-pass passxxx -tmpdir /tmp -to-debug
ของผมมี migrate เยอะเลยใช้วิธีเขียน shell script ช่วยครับ
++++++++++++++++++++++++++++++++++++++++++++++++
#!/bin/bash
PATH=/sbin:/usr/sbin:/bin
export PATH
##Directory value
HOME=/mbox
USERLIST=/home/golf/imapcopy_only
ID=vmail
GID=mail
## Check user and create for dir user ##
if [ -s ${USERLIST}/userlist_seperate_test ] # if file size of new_account > 0
then
#lock account file
chown root ${USERLIST}/userlist_seperate_test
chmod 770 ${USERLIST}/userlist_seperate_test
while read account_dest
do
#Begin imapcopy change #account_ori and #account_dest
/usr/bin/imapcopy -from-host mail.xxx.com -from-login golfreeze -from-pass passxxx
-to-host
localhost -to-login golfreeze@destination.com -to-pass passxxx -tmpdir /tmp
done < ${USERLIST}/userlist_seperate_test
cat /dev/null > ${USERLIST}/userlist_seperate_test
chown root:root ${USERLIST}/userlist_seperate_test
chmod 770 ${USERLIST}/userlist_seperate_test
else
#nothing to do
exit
fi
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
สำหรับ ตัวแปร
account_ori = account ต้นทาง
account_dest = account ปลายทาง
-
พอดีจะ ทำการ test connection ของ imap ครับผ่าน
user = golfreeze@xxx.com
pass = passxxx
เริ่มต้นเลย
วิธีการเข้าไปอ่านเมลผ่าน protocol imap (port 143) ด้วยวิธีการ telnet
#telnet localhost 143
ขั้นตอนที่ 1 ทำการใส่ username password ตาม command
. login golfreeze@xxx.com passxxx
ขั้นตอนที่ 2 ทำการ list ดูรายชื่อ folder ภายใน account ของเรา
. LIST "INBOX" "*"
* LIST (\HasNoChildren) "." "INBOX.Folder1"
* LIST (\HasNoChildren) "." "INBOX.Folder2"
* LIST (\HasChildren) "." "INBOX.Folder3"
. OK Completed
ขั้นตอนที่ 3 ทำการ select folder ที่ต้องการเข้าไปอ่านเมล
. SELECT "INBOX"
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen NonJunk Junk $NotJunk $Junk $Forwarded)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen NonJunk Junk $NotJunk $Junk $Forwarded \*)]
* 2 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1136990532]
* OK [UIDNEXT 12498]
* OK [NOMODSEQ] Sorry, modsequences have not been enabled on this mailbox
. OK [READ-WRITE] Completed
ขั้นตอนที่ 4 หลังจากพบว่ามีเมลอยู่ใน inbox อยู่ 2 ฉบับ (2 EXISTS) และต้องการอ่านเมลฉบับที่ 2 ก็
. FETCH 2 BODY []
Return-Path: <root@example.com>
X-Original-To: golftest
Delivered-To: golftest@example.com
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
by spz.example.com (Postfix) with SMTP id 6B9E49F78B
for <golftest>; Thu, 30 Apr 2015 09:57:03 +0700 (ICT)
Message-Id: <20150430025706.6B9E49F78B@example.com>
Date: Thu, 30 Apr 2015 09:57:03 +0700 (ICT)
From: root@example.com
To: undisclosed-recipients:;
check send second on 0954
)
* 2 FETCH (FLAGS (\Seen \Recent))
. OK FETCH completed.
ขั้นตอนที่ 5 หลังจากเจอ mail content แล้วต้องการจบ process และ logout ออก
. logout
-
กรณี ที่ต้องการ reconfigure ของ perl ก็เข้าตามนี้
#perl -MCPAN -e shell
CPAN>o conf help
CPAN>o conf init
ให้ set ค่าต่างๆ ใหม่ ทำการ เลือก urllist ที่ต้องการไป check package และ install ตัว ผมเลือกเป็น
ประเทศไทย
เสร็จแล้ว รอให้ perl ทำการ update package ต่างๆ ให้เสร็จ
เมื่อหยุดแล้ว ทำการ wrote configure โดย
CPAN>o conf commit
เรียบร้อยแล้วก็ออกครับ
CPAN>exit
เข้าใหม่ แล้วดูตรง version CPAN exploration and modules installation (v1.9205) ครับจะเป็น
ตัวใหม่ล่าสุด
-
เกี่ยวกับ CPAN Perl
http://aspn.activestate.com/ASPN/docs/ActivePerl/5.10/lib/CPAN.html#upgrade__module__regex_____
-
ในกรณีย้ายเมลจาก WinMail server ที่เป็น imap protocol มาเป็นรูปแบบของ Maildir
ให้ทำการ dump เอาไว้ก่อน เพราะบาง MTA มีรูปแบบของการเขียนไฟล์ลงเมลที่แตกต่างปกติ
###Work could dump to fold /tmp/file/
./iu-dump -S 203.xxx.yyy.zzz/abc@packetlove.com/abc -f /tmp/file
###Work after dump and then restore file into mailbox
./iu-restore -i 103.xxx.yyy.zzz/abc@packetlove.com/abc -D /tmp/file
เท่านี้ก็จะทำให้ได้ อีเมลจากระบบเก่ามาลงในระบบเมล เครื่องใหม่ละครับผม : )
-
ในกรณี เครื่องปลายทางต่อด้วย port 993 (imap-ssl) สามารถใช้ command ได้ดังนี้
./iu-copy -S source_ip27.xxx.yyy.zzz:993/abc@packetlove.co.th/password1 -D destination_ip:993/abc@packetlove.co.th/password2
แต่ต้องติดตั้ง perl module SSL
perl -MCPAN -e shell
install IO::Socket::INET
install IO::Socket::SSL
8)
-
ถ้ารหัสของ user มีตัวอักขระพิเศษเช่น ! % $ ต้องใส่ \ นำหน้าด้วยเช่น
รหัสเป็น : !%s22$
ใส่เพิ่มเป็น : \!\%s22\$