mirror of
https://github.com/imapsync/imapsync.git
synced 2024-11-17 00:02:29 +01:00
1.340
This commit is contained in:
parent
26a302f586
commit
c6cefbbb65
16
CREDITS
16
CREDITS
@ -1,5 +1,5 @@
|
|||||||
#!/bin/cat
|
#!/bin/cat
|
||||||
# $Id: CREDITS,v 1.141 2010/07/14 13:52:04 gilles Exp gilles $
|
# $Id: CREDITS,v 1.142 2010/08/09 01:16:01 gilles Exp gilles $
|
||||||
|
|
||||||
If you want to make a donation to the author, Gilles LAMIRAL:
|
If you want to make a donation to the author, Gilles LAMIRAL:
|
||||||
|
|
||||||
@ -20,11 +20,23 @@ to remove one.
|
|||||||
|
|
||||||
I thank very much all of these people.
|
I thank very much all of these people.
|
||||||
|
|
||||||
|
Martin Werthmoeller
|
||||||
|
Gave a patch ./patches/imapsync-1.337_tobit_V6.patch
|
||||||
|
|
||||||
|
Jeremy Stent
|
||||||
|
Contributed by giving the book
|
||||||
|
13.60 "Unfolding the Napkin: The Hands-On Method for Solving Complex Problems with Simple Pictures"
|
||||||
|
|
||||||
|
BudgetDedicated
|
||||||
|
Contributed by giving money 5 USD
|
||||||
|
|
||||||
|
Wilton de Oliveira Garcia
|
||||||
|
Contributed by giving money 10 USD
|
||||||
|
|
||||||
David Osbo
|
David Osbo
|
||||||
Contributed by giving the book
|
Contributed by giving the book
|
||||||
15.61 "The Complete Idiot's Guide to Conversational Sign Language Illustrated"
|
15.61 "The Complete Idiot's Guide to Conversational Sign Language Illustrated"
|
||||||
|
|
||||||
|
|
||||||
Jeroen Ticheler
|
Jeroen Ticheler
|
||||||
Contributed by giving the book
|
Contributed by giving the book
|
||||||
23.77 "Maps of Narrative Practice"
|
23.77 "Maps of Narrative Practice"
|
||||||
|
20
ChangeLog
20
ChangeLog
@ -1,17 +1,29 @@
|
|||||||
|
|
||||||
RCS file: RCS/imapsync,v
|
RCS file: RCS/imapsync,v
|
||||||
Working file: imapsync
|
Working file: imapsync
|
||||||
head: 1.337
|
head: 1.340
|
||||||
branch:
|
branch:
|
||||||
locks: strict
|
locks: strict
|
||||||
gilles: 1.337
|
gilles: 1.340
|
||||||
access list:
|
access list:
|
||||||
symbolic names:
|
symbolic names:
|
||||||
keyword substitution: kv
|
keyword substitution: kv
|
||||||
total revisions: 337; selected revisions: 337
|
total revisions: 340; selected revisions: 340
|
||||||
description:
|
description:
|
||||||
----------------------------
|
----------------------------
|
||||||
revision 1.337 locked by: gilles;
|
revision 1.340 locked by: gilles;
|
||||||
|
date: 2010/08/09 00:03:21; author: gilles; state: Exp; lines: +7 -7
|
||||||
|
Bug fix. Stupid undef breaking --syncinternaldates
|
||||||
|
----------------------------
|
||||||
|
revision 1.339
|
||||||
|
date: 2010/07/28 15:07:56; author: gilles; state: Exp; lines: +27 -20
|
||||||
|
Made a justconnect() routine.
|
||||||
|
----------------------------
|
||||||
|
revision 1.338
|
||||||
|
date: 2010/07/28 14:56:26; author: gilles; state: Exp; lines: +42 -27
|
||||||
|
Added SYNOPSIS at the top of the documentation.
|
||||||
|
----------------------------
|
||||||
|
revision 1.337
|
||||||
date: 2010/07/16 23:23:40; author: gilles; state: Exp; lines: +12 -6
|
date: 2010/07/16 23:23:40; author: gilles; state: Exp; lines: +12 -6
|
||||||
Added --usedatemanip option (not documented in --help)
|
Added --usedatemanip option (not documented in --help)
|
||||||
Turned off Date::Manip usage by default: release 6.x vs 5.x buggy,
|
Turned off Date::Manip usage by default: release 6.x vs 5.x buggy,
|
||||||
|
18
FAQ
18
FAQ
@ -1,5 +1,5 @@
|
|||||||
#!/bin/cat
|
#!/bin/cat
|
||||||
# $Id: FAQ,v 1.71 2010/07/15 12:07:00 gilles Exp gilles $
|
# $Id: FAQ,v 1.73 2010/08/08 23:09:04 gilles Exp gilles $
|
||||||
|
|
||||||
+------------------+
|
+------------------+
|
||||||
| FAQ for imapsync |
|
| FAQ for imapsync |
|
||||||
@ -59,6 +59,9 @@ R. Here:
|
|||||||
RFC 3501 - INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
|
RFC 3501 - INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
|
||||||
http://www.faqs.org/rfcs/rfc3501.html
|
http://www.faqs.org/rfcs/rfc3501.html
|
||||||
|
|
||||||
|
RFC2683 - IMAP4 Implementation Recommendations
|
||||||
|
http://www.faqs.org/rfcs/rfc2683.html
|
||||||
|
|
||||||
RFC 2595 - Using TLS with IMAP, POP3 and ACAP
|
RFC 2595 - Using TLS with IMAP, POP3 and ACAP
|
||||||
http://www.faqs.org/rfcs/rfc2595.html
|
http://www.faqs.org/rfcs/rfc2595.html
|
||||||
|
|
||||||
@ -68,6 +71,9 @@ http://www.faqs.org/rfcs/rfc2822.html
|
|||||||
RFC 2342 - IMAP4 Namespace
|
RFC 2342 - IMAP4 Namespace
|
||||||
http://www.faqs.org/rfcs/rfc2342.html
|
http://www.faqs.org/rfcs/rfc2342.html
|
||||||
|
|
||||||
|
RFC2180 - IMAP4 Multi-Accessed Mailbox Practice
|
||||||
|
http://www.faqs.org/rfcs/rfc2180.html
|
||||||
|
|
||||||
RFC 4549 - Synchronization Operations for Disconnected IMAP4 Clients
|
RFC 4549 - Synchronization Operations for Disconnected IMAP4 Clients
|
||||||
http://www.faqs.org/rfcs/rfc4549.html
|
http://www.faqs.org/rfcs/rfc4549.html
|
||||||
|
|
||||||
@ -885,6 +891,16 @@ Q. Migrating from David Tobit V8
|
|||||||
R. Use the following options :
|
R. Use the following options :
|
||||||
imapsync ... --prefix1 INBOX. --sep1 / --subscribe --subscribed
|
imapsync ... --prefix1 INBOX. --sep1 / --subscribe --subscribed
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
Q. Migrating from Tobit David Server 6
|
||||||
|
("DvISE Mail Access Server MA-6.60a (0118)")
|
||||||
|
|
||||||
|
R. Look at the discussion:
|
||||||
|
http://www.linux-france.org/prj/imapsync_list/msg00582.html
|
||||||
|
http://www.linux-france.org/prj/imapsync_list/threads.html#00582
|
||||||
|
patch saved in ./patches/imapsync-1.337_tobit_V6.patch
|
||||||
|
|
||||||
|
|
||||||
=======================================================================
|
=======================================================================
|
||||||
Q. I need to migrate 1250 mailboxes from one cyrus-IMAP server to another
|
Q. I need to migrate 1250 mailboxes from one cyrus-IMAP server to another
|
||||||
(empty) one. (Box-swap). The passwords are in a MySQL Database.
|
(empty) one. (Box-swap). The passwords are in a MySQL Database.
|
||||||
|
74
Makefile
74
Makefile
@ -1,14 +1,12 @@
|
|||||||
|
|
||||||
# $Id: Makefile,v 1.32 2010/07/17 00:17:18 gilles Exp gilles $
|
# $Id: Makefile,v 1.34 2010/07/25 21:30:45 gilles Exp gilles $
|
||||||
|
|
||||||
TARGET=imapsync
|
|
||||||
|
|
||||||
.PHONY: help usage all
|
.PHONY: help usage all
|
||||||
|
|
||||||
help: usage
|
help: usage
|
||||||
|
|
||||||
usage:
|
usage:
|
||||||
@echo " $(TARGET) $(VERSION), You can do :"
|
@echo " imapsync $(VERSION), You can do :"
|
||||||
@echo "make install # as root"
|
@echo "make install # as root"
|
||||||
@echo "make testf # run tests"
|
@echo "make testf # run tests"
|
||||||
@echo "make testv # run tests verbosely"
|
@echo "make testv # run tests verbosely"
|
||||||
@ -16,24 +14,31 @@ usage:
|
|||||||
@echo "make test229 # run tests with Mail-IMAPClient-2.2.9"
|
@echo "make test229 # run tests with Mail-IMAPClient-2.2.9"
|
||||||
@echo "make all "
|
@echo "make all "
|
||||||
|
|
||||||
|
DIST_NAME=imapsync-$(VERSION)
|
||||||
|
DIST_FILE=$(DIST_NAME).tgz
|
||||||
|
DEB_FILE=$(DIST_NAME).deb
|
||||||
|
VERSION=$(shell perl -I./Mail-IMAPClient-2.2.9 ./imapsync --version)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
all: ChangeLog README VERSION
|
all: ChangeLog README VERSION
|
||||||
|
|
||||||
.PHONY: test tests testp testf test3xx
|
.PHONY: test tests testp testf test3xx
|
||||||
|
|
||||||
.test: $(TARGET) tests.sh
|
.test: imapsync tests.sh
|
||||||
/usr/bin/time sh tests.sh 1>/dev/null
|
/usr/bin/time sh tests.sh 1>/dev/null
|
||||||
touch .test
|
touch .test
|
||||||
|
|
||||||
.test_3xx: $(TARGET) tests.sh
|
.test_3xx: imapsync tests.sh
|
||||||
CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' /usr/bin/time sh tests.sh 1>/dev/null
|
CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' /usr/bin/time sh tests.sh 1>/dev/null
|
||||||
touch .test_3xx
|
touch .test_3xx
|
||||||
|
|
||||||
test_quick : test_quick_229 test_quick_3xx
|
test_quick : test_quick_229 test_quick_3xx
|
||||||
|
|
||||||
test_quick_229: $(TARGET) tests.sh
|
test_quick_229: imapsync tests.sh
|
||||||
CMD_PERL='perl -I./Mail-IMAPClient-2.2.9' /usr/bin/time sh tests.sh locallocal 1>/dev/null
|
CMD_PERL='perl -I./Mail-IMAPClient-2.2.9' /usr/bin/time sh tests.sh locallocal 1>/dev/null
|
||||||
|
|
||||||
test_quick_3xx: $(TARGET) tests.sh
|
test_quick_3xx: imapsync tests.sh
|
||||||
CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' /usr/bin/time sh tests.sh locallocal 1>/dev/null
|
CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' /usr/bin/time sh tests.sh locallocal 1>/dev/null
|
||||||
|
|
||||||
testv:
|
testv:
|
||||||
@ -47,23 +52,23 @@ test3xx: .test_3xx
|
|||||||
|
|
||||||
test229: .test_229
|
test229: .test_229
|
||||||
|
|
||||||
.test_229: $(TARGET) tests.sh
|
.test_229: imapsync tests.sh
|
||||||
CMD_PERL='perl -I./Mail-IMAPClient-2.2.9' /usr/bin/time sh tests.sh 1>/dev/null
|
CMD_PERL='perl -I./Mail-IMAPClient-2.2.9' /usr/bin/time sh tests.sh 1>/dev/null
|
||||||
touch .test_229
|
touch .test_229
|
||||||
|
|
||||||
testf: clean_test test
|
testf: clean_test test
|
||||||
|
|
||||||
testp :
|
testp :
|
||||||
perl -c $(TARGET)
|
perl -c imapsync
|
||||||
|
|
||||||
ChangeLog: $(TARGET)
|
ChangeLog: imapsync
|
||||||
rlog $(TARGET) > ChangeLog
|
rlog imapsync > ChangeLog
|
||||||
|
|
||||||
README: $(TARGET)
|
README: imapsync
|
||||||
perldoc -t $(TARGET) > README
|
perldoc -t imapsync > README
|
||||||
|
|
||||||
VERSION: $(TARGET) Makefile
|
VERSION: imapsync Makefile
|
||||||
perl -I./Mail-IMAPClient-2.2.9 ./$(TARGET) --version > VERSION
|
perl -I./Mail-IMAPClient-2.2.9 ./imapsync --version > VERSION
|
||||||
|
|
||||||
.PHONY: clean clean_tilde clean_test
|
.PHONY: clean clean_tilde clean_test
|
||||||
|
|
||||||
@ -77,25 +82,20 @@ clean_tilde:
|
|||||||
|
|
||||||
.PHONY: install dist man
|
.PHONY: install dist man
|
||||||
|
|
||||||
man: $(TARGET).1
|
man: imapsync.1
|
||||||
|
|
||||||
clean_man:
|
clean_man:
|
||||||
rm -f $(TARGET).1
|
rm -f imapsync.1
|
||||||
|
|
||||||
$(TARGET).1: $(TARGET)
|
imapsync.1: imapsync
|
||||||
pod2man $(TARGET) > $(TARGET).1
|
pod2man imapsync > imapsync.1
|
||||||
|
|
||||||
install: testp $(TARGET).1
|
install: testp imapsync.1
|
||||||
install -D $(TARGET) $(DESTDIR)/usr/bin/$(TARGET)
|
install -D imapsync $(DESTDIR)/usr/bin/imapsync
|
||||||
install -D $(TARGET).1 $(DESTDIR)/usr/share/man/man1/$(TARGET).1
|
install -D imapsync.1 $(DESTDIR)/usr/share/man/man1/imapsync.1
|
||||||
chmod 755 $(DESTDIR)/usr/bin/$(TARGET)
|
chmod 755 $(DESTDIR)/usr/bin/imapsync
|
||||||
|
|
||||||
|
|
||||||
DIST_NAME=$(TARGET)-$(VERSION)
|
|
||||||
DIST_FILE=$(DIST_NAME).tgz
|
|
||||||
DEB_FILE=$(DIST_NAME).deb
|
|
||||||
VERSION=$(shell perl -I./Mail-IMAPClient-2.2.9 ./$(TARGET) --version)
|
|
||||||
|
|
||||||
dist: cidone test clean clean_dist all INSTALL tarball
|
dist: cidone test clean clean_dist all INSTALL tarball
|
||||||
|
|
||||||
|
|
||||||
@ -126,15 +126,21 @@ clean_dist:
|
|||||||
|
|
||||||
# Local goals
|
# Local goals
|
||||||
|
|
||||||
.PHONY: lfo lfo_upload niouze_lfo niouze_fm public
|
.PHONY: lfo upload_lfo niouze_lfo niouze_fm public
|
||||||
|
|
||||||
lfo: dist niouze_lfo lfo_upload
|
upload_index: index.shtml
|
||||||
|
rsync -avH index.shtml \
|
||||||
|
/home/gilles/public_html/www.linux-france.org/html/prj/imapsync/
|
||||||
|
sh ~/memo/lfo-rsync
|
||||||
|
|
||||||
lfo_upload:
|
|
||||||
|
lfo: dist niouze_lfo upload_lfo
|
||||||
|
|
||||||
|
upload_lfo:
|
||||||
rsync -avH --delete . \
|
rsync -avH --delete . \
|
||||||
/home/gilles/public_html/www.linux-france.org/html/prj/$(TARGET)/
|
/home/gilles/public_html/www.linux-france.org/html/prj/imapsync/
|
||||||
rsync -avH --delete ../prepa_dist/imapsync-*tgz \
|
rsync -avH --delete ../prepa_dist/imapsync-*tgz \
|
||||||
/home/gilles/public_html/www.linux-france.org/ftp/prj/$(TARGET)/
|
/home/gilles/public_html/www.linux-france.org/ftp/prj/imapsync/
|
||||||
sh ~/memo/lfo-rsync
|
sh ~/memo/lfo-rsync
|
||||||
|
|
||||||
niouze_lfo : VERSION
|
niouze_lfo : VERSION
|
||||||
|
51
README
51
README
@ -1,19 +1,30 @@
|
|||||||
NAME
|
NAME
|
||||||
imapsync - IMAP synchronisation, sync, copy or migration tool.
|
imapsync - IMAP synchronisation, sync, copy or migration tool.
|
||||||
Synchronise mailboxes between two imap servers. Good at IMAP migration.
|
Synchronise mailboxes between two imap servers. Good at IMAP migration.
|
||||||
More than 32 different IMAP server softwares supported with success.
|
More than 36 different IMAP server softwares supported with success.
|
||||||
|
|
||||||
$Revision: 1.337 $
|
$Revision: 1.340 $
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
To synchronise imap account "foo" on "imap.truc.org" to imap account
|
||||||
|
"bar" on "imap.trac.org" with foo password "secret1" and bar password
|
||||||
|
"secret2":
|
||||||
|
|
||||||
|
imapsync \
|
||||||
|
--host1 imap.truc.org --user1 foo --password1 secret1 \
|
||||||
|
--host2 imap.trac.org --user2 bar --password2 secret2
|
||||||
|
|
||||||
INSTALL
|
INSTALL
|
||||||
imapsync works fine under any Unix OS with perl.
|
imapsync works fine under any Unix OS with perl.
|
||||||
imapsync works fine under Windows (2000, XP) and ActiveState's 5.8 Perl
|
imapsync works fine under Windows (2000, XP) with ActiveState's 5.8 Perl
|
||||||
|
or as a standalone binary software.
|
||||||
|
|
||||||
imapsync is already available directly on the following distributions (at least):
|
imapsync is already available directly on the following distributions
|
||||||
FreeBSD, Debian, Ubuntu, Gentoo, NetBSD, Darwin, Mandriva and OpenBSD (yeah!).
|
(at least): FreeBSD, Debian, Ubuntu, Gentoo, NetBSD, Darwin, Mandriva
|
||||||
|
and OpenBSD (yeah!).
|
||||||
|
|
||||||
Get imapsync at
|
Get imapsync at
|
||||||
http://www.linux-france.org/prj/imapsync/dist/
|
http://www.linux-france.org/prj/imapsync/
|
||||||
|
|
||||||
You'll find a compressed tarball called imapsync-x.xx.tgz
|
You'll find a compressed tarball called imapsync-x.xx.tgz
|
||||||
where x.xx is the version number. Untar the tarball where
|
where x.xx is the version number. Untar the tarball where
|
||||||
@ -23,11 +34,11 @@ INSTALL
|
|||||||
|
|
||||||
Go into the directory imapsync-x.xx and read the INSTALL file.
|
Go into the directory imapsync-x.xx and read the INSTALL file.
|
||||||
The INSTALL file is also at
|
The INSTALL file is also at
|
||||||
http://www.linux-france.org/prj/imapsync/INSTALL (for windows users)
|
http://www.linux-france.org/prj/imapsync/INSTALL
|
||||||
|
|
||||||
The freshmeat record is at http://freshmeat.net/projects/imapsync/
|
The freshmeat record is at http://freshmeat.net/projects/imapsync/
|
||||||
|
|
||||||
SYNOPSIS
|
USAGE
|
||||||
imapsync [options]
|
imapsync [options]
|
||||||
|
|
||||||
To get a description of each option just run imapsync like this:
|
To get a description of each option just run imapsync like this:
|
||||||
@ -88,19 +99,19 @@ DESCRIPTION
|
|||||||
|
|
||||||
imapsync is a good tool because it reduces the amount of data
|
imapsync is a good tool because it reduces the amount of data
|
||||||
transferred by not transferring a given message if it is already on both
|
transferred by not transferring a given message if it is already on both
|
||||||
sides. Same headers, same message size and the transfer is done only
|
sides. Same headers and the transfer is done only once. All flags are
|
||||||
once. All flags are preserved, unread will stay unread, read will stay
|
preserved, unread will stay unread, read will stay read, deleted will
|
||||||
read, deleted will stay deleted. You can stop the transfer at any time
|
stay deleted. You can stop the transfer at any time and restart it
|
||||||
and restart it later, imapsync works well with bad connections. imapsync
|
later, imapsync works well with bad connections. imapsync is CPU hungry
|
||||||
is CPU hungry so nice and renice commands can be a good help. imapsync
|
so nice and renice commands can be a good help. imapsync can be memory
|
||||||
can be memory hungry too, especially with large messages.
|
hungry too, especially with large messages.
|
||||||
|
|
||||||
You can decide to delete the messages from the source mailbox after a
|
You can decide to delete the messages from the source mailbox after a
|
||||||
successful transfer (it is a good feature when migrating). In that case,
|
successful transfer (it is a good feature when migrating). In that case,
|
||||||
use the --delete --expunge1 options.
|
use the --delete --expunge1 options.
|
||||||
|
|
||||||
You can also just synchronize a mailbox A from another mailbox B in case
|
You can also just synchronize a mailbox A from another mailbox B in case
|
||||||
you just want to keep a "live" copy of B in A.
|
you just want to keep a "live" copy of B in A (--delete2 may help)
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
To get a description of each option just invoke:
|
To get a description of each option just invoke:
|
||||||
@ -232,7 +243,8 @@ BUG REPORT GUIDELINES
|
|||||||
|
|
||||||
- output given with --debug --debugimap near the failure point.
|
- output given with --debug --debugimap near the failure point.
|
||||||
Isolate a message or two in a folder 'BUG' and use
|
Isolate a message or two in a folder 'BUG' and use
|
||||||
--folder 'BUG' --debug --debugimap
|
|
||||||
|
imapsync ... --folder 'BUG' --debug --debugimap
|
||||||
|
|
||||||
- imap server software on both side and their version number.
|
- imap server software on both side and their version number.
|
||||||
|
|
||||||
@ -252,7 +264,8 @@ BUG REPORT GUIDELINES
|
|||||||
output.
|
output.
|
||||||
|
|
||||||
One time in your life, read the paper "How To Ask Questions The Smart
|
One time in your life, read the paper "How To Ask Questions The Smart
|
||||||
Way" http://www.catb.org/~esr/faqs/smart-questions.html and forget it.
|
Way" http://www.catb.org/~esr/faqs/smart-questions.html and then forget
|
||||||
|
it.
|
||||||
|
|
||||||
IMAP SERVERS
|
IMAP SERVERS
|
||||||
Failure stories reported with the following 4 imap servers:
|
Failure stories reported with the following 4 imap servers:
|
||||||
@ -385,7 +398,7 @@ SIMILAR SOFTWARES
|
|||||||
see also tools/wonko_ruby_imapsync
|
see also tools/wonko_ruby_imapsync
|
||||||
pop2imap : http://www.linux-france.org/prj/pop2imap/
|
pop2imap : http://www.linux-france.org/prj/pop2imap/
|
||||||
|
|
||||||
Feedback (good or bad) will always be welcome.
|
Feedback (good or bad) will often be welcome.
|
||||||
|
|
||||||
$Id: imapsync,v 1.337 2010/07/16 23:23:40 gilles Exp gilles $
|
$Id: imapsync,v 1.340 2010/08/09 00:03:21 gilles Exp gilles $
|
||||||
|
|
||||||
|
6
TIME
6
TIME
@ -1,4 +1,8 @@
|
|||||||
|
50 3 replies on list.
|
||||||
|
40 http://www.linux-france.org/prj/imapsync_list/threads.html#00582
|
||||||
|
250 ietf imap5 discussion
|
||||||
|
30 refactoring
|
||||||
|
80 read RFC2683 - IMAP4 Implementation Recommendations
|
||||||
140 imapsync under win32 strawberry, pp (par::packer), imapsync.exe
|
140 imapsync under win32 strawberry, pp (par::packer), imapsync.exe
|
||||||
300 imapsync under win32. test msw, environnement, using activestate
|
300 imapsync under win32. test msw, environnement, using activestate
|
||||||
70 Profiling tests. Interresting results!
|
70 Profiling tests. Interresting results!
|
||||||
|
10
TODO
10
TODO
@ -1,5 +1,5 @@
|
|||||||
#!/bin/cat
|
#!/bin/cat
|
||||||
# $Id: TODO,v 1.78 2010/07/14 13:37:02 gilles Exp gilles $
|
# $Id: TODO,v 1.80 2010/08/09 01:15:44 gilles Exp gilles $
|
||||||
|
|
||||||
TODO file for imapsync
|
TODO file for imapsync
|
||||||
----------------------
|
----------------------
|
||||||
@ -21,6 +21,14 @@ Evaluate
|
|||||||
http://www.rackspace.com/apps/email_hosting/migrations
|
http://www.rackspace.com/apps/email_hosting/migrations
|
||||||
http://www.yippiemove.com/
|
http://www.yippiemove.com/
|
||||||
|
|
||||||
|
Add a well described problem for each problem detected
|
||||||
|
and counted in error counter statistics.
|
||||||
|
|
||||||
|
Add yahoo imap support:
|
||||||
|
http://elearningcentral.blogspot.com/2010/07/how-to-use-imapsync-with-yahoo-imap.html
|
||||||
|
http://www.bwebcentral.com/utils/imapsync-yahoo
|
||||||
|
See patches/imapsync-yahoo
|
||||||
|
|
||||||
|
|
||||||
DONE. Bugfix. Duplicate messages on host2 are not deleted with --delete2
|
DONE. Bugfix. Duplicate messages on host2 are not deleted with --delete2
|
||||||
Reason: "Skipping msg #120:508 in host2 folder INBOX.2005-INBOX (duplicate so we ignore this message)"
|
Reason: "Skipping msg #120:508 in host2 folder INBOX.2005-INBOX (duplicate so we ignore this message)"
|
||||||
|
86
imapsync
86
imapsync
@ -16,21 +16,34 @@
|
|||||||
|
|
||||||
imapsync - IMAP synchronisation, sync, copy or migration
|
imapsync - IMAP synchronisation, sync, copy or migration
|
||||||
tool. Synchronise mailboxes between two imap servers. Good
|
tool. Synchronise mailboxes between two imap servers. Good
|
||||||
at IMAP migration. More than 32 different IMAP server softwares
|
at IMAP migration. More than 36 different IMAP server softwares
|
||||||
supported with success.
|
supported with success.
|
||||||
|
|
||||||
$Revision: 1.337 $
|
$Revision: 1.340 $
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
To synchronise imap account "foo" on "imap.truc.org"
|
||||||
|
to imap account "bar" on "imap.trac.org"
|
||||||
|
with foo password "secret1"
|
||||||
|
and bar password "secret2":
|
||||||
|
|
||||||
|
imapsync \
|
||||||
|
--host1 imap.truc.org --user1 foo --password1 secret1 \
|
||||||
|
--host2 imap.trac.org --user2 bar --password2 secret2
|
||||||
|
|
||||||
=head1 INSTALL
|
=head1 INSTALL
|
||||||
|
|
||||||
imapsync works fine under any Unix OS with perl.
|
imapsync works fine under any Unix OS with perl.
|
||||||
imapsync works fine under Windows (2000, XP) and ActiveState's 5.8 Perl
|
imapsync works fine under Windows (2000, XP) with ActiveState's 5.8 Perl
|
||||||
|
or as a standalone binary software.
|
||||||
|
|
||||||
imapsync is already available directly on the following distributions (at least):
|
imapsync is already available directly on the following distributions
|
||||||
|
(at least):
|
||||||
FreeBSD, Debian, Ubuntu, Gentoo, NetBSD, Darwin, Mandriva and OpenBSD (yeah!).
|
FreeBSD, Debian, Ubuntu, Gentoo, NetBSD, Darwin, Mandriva and OpenBSD (yeah!).
|
||||||
|
|
||||||
Get imapsync at
|
Get imapsync at
|
||||||
http://www.linux-france.org/prj/imapsync/dist/
|
http://www.linux-france.org/prj/imapsync/
|
||||||
|
|
||||||
You'll find a compressed tarball called imapsync-x.xx.tgz
|
You'll find a compressed tarball called imapsync-x.xx.tgz
|
||||||
where x.xx is the version number. Untar the tarball where
|
where x.xx is the version number. Untar the tarball where
|
||||||
@ -40,11 +53,11 @@ $Revision: 1.337 $
|
|||||||
|
|
||||||
Go into the directory imapsync-x.xx and read the INSTALL file.
|
Go into the directory imapsync-x.xx and read the INSTALL file.
|
||||||
The INSTALL file is also at
|
The INSTALL file is also at
|
||||||
http://www.linux-france.org/prj/imapsync/INSTALL (for windows users)
|
http://www.linux-france.org/prj/imapsync/INSTALL
|
||||||
|
|
||||||
The freshmeat record is at http://freshmeat.net/projects/imapsync/
|
The freshmeat record is at http://freshmeat.net/projects/imapsync/
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 USAGE
|
||||||
|
|
||||||
imapsync [options]
|
imapsync [options]
|
||||||
|
|
||||||
@ -112,7 +125,7 @@ another. This is called migration.
|
|||||||
|
|
||||||
imapsync is a good tool because it reduces the amount
|
imapsync is a good tool because it reduces the amount
|
||||||
of data transferred by not transferring a given message if it
|
of data transferred by not transferring a given message if it
|
||||||
is already on both sides. Same headers, same message size
|
is already on both sides. Same headers
|
||||||
and the transfer is done only once. All flags are
|
and the transfer is done only once. All flags are
|
||||||
preserved, unread will stay unread, read will stay read,
|
preserved, unread will stay unread, read will stay read,
|
||||||
deleted will stay deleted. You can stop the transfer at any
|
deleted will stay deleted. You can stop the transfer at any
|
||||||
@ -126,7 +139,8 @@ after a successful transfer (it is a good feature when migrating).
|
|||||||
In that case, use the --delete --expunge1 options.
|
In that case, use the --delete --expunge1 options.
|
||||||
|
|
||||||
You can also just synchronize a mailbox A from another mailbox B
|
You can also just synchronize a mailbox A from another mailbox B
|
||||||
in case you just want to keep a "live" copy of B in A.
|
in case you just want to keep a "live" copy of B in A (--delete2
|
||||||
|
may help)
|
||||||
|
|
||||||
=head1 OPTIONS
|
=head1 OPTIONS
|
||||||
|
|
||||||
@ -275,7 +289,8 @@ Help us to help you: in your report, please include:
|
|||||||
|
|
||||||
- output given with --debug --debugimap near the failure point.
|
- output given with --debug --debugimap near the failure point.
|
||||||
Isolate a message or two in a folder 'BUG' and use
|
Isolate a message or two in a folder 'BUG' and use
|
||||||
--folder 'BUG' --debug --debugimap
|
|
||||||
|
imapsync ... --folder 'BUG' --debug --debugimap
|
||||||
|
|
||||||
- imap server software on both side and their version number.
|
- imap server software on both side and their version number.
|
||||||
|
|
||||||
@ -296,7 +311,7 @@ Most of those values can be found as a copy/paste at the begining of the output.
|
|||||||
One time in your life, read the paper
|
One time in your life, read the paper
|
||||||
"How To Ask Questions The Smart Way"
|
"How To Ask Questions The Smart Way"
|
||||||
http://www.catb.org/~esr/faqs/smart-questions.html
|
http://www.catb.org/~esr/faqs/smart-questions.html
|
||||||
and forget it.
|
and then forget it.
|
||||||
|
|
||||||
=head1 IMAP SERVERS
|
=head1 IMAP SERVERS
|
||||||
|
|
||||||
@ -452,9 +467,9 @@ Entries for imapsync:
|
|||||||
pop2imap : http://www.linux-france.org/prj/pop2imap/
|
pop2imap : http://www.linux-france.org/prj/pop2imap/
|
||||||
|
|
||||||
|
|
||||||
Feedback (good or bad) will always be welcome.
|
Feedback (good or bad) will often be welcome.
|
||||||
|
|
||||||
$Id: imapsync,v 1.337 2010/07/16 23:23:40 gilles Exp gilles $
|
$Id: imapsync,v 1.340 2010/08/09 00:03:21 gilles Exp gilles $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
@ -542,7 +557,7 @@ my(
|
|||||||
|
|
||||||
# global variables initialisation
|
# global variables initialisation
|
||||||
|
|
||||||
$rcs = '$Id: imapsync,v 1.337 2010/07/16 23:23:40 gilles Exp gilles $ ';
|
$rcs = '$Id: imapsync,v 1.340 2010/08/09 00:03:21 gilles Exp gilles $ ';
|
||||||
|
|
||||||
$total_bytes_transferred = 0;
|
$total_bytes_transferred = 0;
|
||||||
$total_bytes_skipped = 0;
|
$total_bytes_skipped = 0;
|
||||||
@ -561,8 +576,9 @@ unless(defined(&_SYSEXITS_H)) {
|
|||||||
eval 'sub EX_USAGE () {64;}' unless defined(&EX_USAGE);
|
eval 'sub EX_USAGE () {64;}' unless defined(&EX_USAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
# @ARGV will be eat by get_options
|
# @ARGV will be eat by get_options()
|
||||||
my @argv_copy = @ARGV;
|
my @argv_copy = @ARGV;
|
||||||
|
|
||||||
get_options();
|
get_options();
|
||||||
|
|
||||||
# default values
|
# default values
|
||||||
@ -634,17 +650,7 @@ sub localhost_info {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($justconnect) {
|
if ($justconnect) {
|
||||||
my $imap1 = ();
|
justconnect();
|
||||||
my $imap2 = ();
|
|
||||||
|
|
||||||
$imap1 = connect_imap($host1, $port1, $debugimap1, $ssl1, $tls1);
|
|
||||||
print "Host1 software: ", server_banner($imap1);
|
|
||||||
print "Host1 capability: ", join(" ", $imap1->capability()), "\n";
|
|
||||||
$imap2 = connect_imap($host2, $port2, $debugimap2, $ssl2, $tls2);
|
|
||||||
print "Host2 software: ", server_banner($imap2);
|
|
||||||
print "Host2 capability: ", join(" ", $imap2->capability()), "\n";
|
|
||||||
$imap1->logout();
|
|
||||||
$imap2->logout();
|
|
||||||
exit_clean(0);
|
exit_clean(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -668,8 +674,8 @@ if ($syncinternaldates) {
|
|||||||
|
|
||||||
if ($syncinternaldates || $idatefromheader) {
|
if ($syncinternaldates || $idatefromheader) {
|
||||||
|
|
||||||
# Date::Manip is an ugly module it exits (confess) for reading an unset value
|
# Date::Manip is an ugly module: it exits (confess) for reading an unset value
|
||||||
# I should write a bug report but too lazy.
|
# I should write a bug report but I'm too lazy.
|
||||||
|
|
||||||
no warnings 'redefine';
|
no warnings 'redefine';
|
||||||
local *Carp::confess = sub { return undef; };
|
local *Carp::confess = sub { return undef; };
|
||||||
@ -1895,7 +1901,7 @@ Bye.'
|
|||||||
print "flags & date from: [$h1_flags][$d]\n";
|
print "flags & date from: [$h1_flags][$d]\n";
|
||||||
last FOLDER if $imap1->IsUnconnected();
|
last FOLDER if $imap1->IsUnconnected();
|
||||||
last FOLDER if $imap2->IsUnconnected();
|
last FOLDER if $imap2->IsUnconnected();
|
||||||
$d = undef;
|
$d = undef if ($d eq "");
|
||||||
unless ($dry) {
|
unless ($dry) {
|
||||||
|
|
||||||
if ($OSNAME eq "MSWin32") {
|
if ($OSNAME eq "MSWin32") {
|
||||||
@ -2095,7 +2101,7 @@ exit_clean(0);
|
|||||||
# subroutines
|
# subroutines
|
||||||
|
|
||||||
sub imapsync_version {
|
sub imapsync_version {
|
||||||
my $rcs = '$Id: imapsync,v 1.337 2010/07/16 23:23:40 gilles Exp gilles $ ';
|
my $rcs = '$Id: imapsync,v 1.340 2010/08/09 00:03:21 gilles Exp gilles $ ';
|
||||||
$rcs =~ m/,v (\d+\.\d+)/;
|
$rcs =~ m/,v (\d+\.\d+)/;
|
||||||
my $VERSION = ($1) ? $1: "UNKNOWN";
|
my $VERSION = ($1) ? $1: "UNKNOWN";
|
||||||
return($VERSION);
|
return($VERSION);
|
||||||
@ -2179,8 +2185,8 @@ sub banner_imapsync {
|
|||||||
my @argv_copy = @_;
|
my @argv_copy = @_;
|
||||||
my $banner_imapsync = join("",
|
my $banner_imapsync = join("",
|
||||||
'$RCSfile: imapsync,v $ ',
|
'$RCSfile: imapsync,v $ ',
|
||||||
'$Revision: 1.337 $ ',
|
'$Revision: 1.340 $ ',
|
||||||
'$Date: 2010/07/16 23:23:40 $ ',
|
'$Date: 2010/08/09 00:03:21 $ ',
|
||||||
"\n",localhost_info(), "\n",
|
"\n",localhost_info(), "\n",
|
||||||
"Command line used:\n",
|
"Command line used:\n",
|
||||||
"$0 ", command_line_nopassword(@argv_copy), "\n",
|
"$0 ", command_line_nopassword(@argv_copy), "\n",
|
||||||
@ -2216,6 +2222,22 @@ sub write_pidfile {
|
|||||||
return($PROCESS_ID);
|
return($PROCESS_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub justconnect {
|
||||||
|
my $imap1 = ();
|
||||||
|
my $imap2 = ();
|
||||||
|
|
||||||
|
$imap1 = connect_imap($host1, $port1, $debugimap1, $ssl1, $tls1);
|
||||||
|
print "Host1 software: ", server_banner($imap1);
|
||||||
|
print "Host1 capability: ", join(" ", $imap1->capability()), "\n";
|
||||||
|
$imap2 = connect_imap($host2, $port2, $debugimap2, $ssl2, $tls2);
|
||||||
|
print "Host2 software: ", server_banner($imap2);
|
||||||
|
print "Host2 capability: ", join(" ", $imap2->capability()), "\n";
|
||||||
|
$imap1->logout();
|
||||||
|
$imap2->logout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sub exit_clean {
|
sub exit_clean {
|
||||||
my $status = shift;
|
my $status = shift;
|
||||||
|
|
||||||
|
23
index.shtml
23
index.shtml
@ -5,7 +5,7 @@
|
|||||||
<title>imapsync <!--#exec cmd="cat VERSION" --> </title>
|
<title>imapsync <!--#exec cmd="cat VERSION" --> </title>
|
||||||
<meta name="generator" content="Bluefish 1.0.7"/>
|
<meta name="generator" content="Bluefish 1.0.7"/>
|
||||||
<meta name="author" content="Gilles LAMIRAL"/>
|
<meta name="author" content="Gilles LAMIRAL"/>
|
||||||
<meta name="date" content="2010-07-17T02:07:03+0200"/>
|
<meta name="date" content="2010-07-27T01:39:03+0200"/>
|
||||||
<meta name="copyright" content="None"/>
|
<meta name="copyright" content="None"/>
|
||||||
<meta name="keywords" content="imap, transfert, migration"/>
|
<meta name="keywords" content="imap, transfert, migration"/>
|
||||||
<meta name="description" content="imap migration tool"/>
|
<meta name="description" content="imap migration tool"/>
|
||||||
@ -16,26 +16,15 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<script type="text/javascript"><!--
|
|
||||||
google_ad_client = "pub-2680256394263335";
|
|
||||||
/* imasync large 728x90 */
|
|
||||||
google_ad_slot = "6321738813";
|
|
||||||
google_ad_width = 728;
|
|
||||||
google_ad_height = 90;
|
|
||||||
//-->
|
|
||||||
</script>
|
|
||||||
<script type="text/javascript"
|
|
||||||
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<h1><a href="http://www.linux-france.org/prj/imapsync/">imapsync web site</a></h1>
|
<h1><a href="http://www.linux-france.org/prj/imapsync/">imapsync web site</a></h1>
|
||||||
|
|
||||||
<h2>What is imapsync?</h2>
|
<h2>What is imapsync?</h2>
|
||||||
|
|
||||||
<p><b>imapsync</b> software is a command line tool allowing incremental and
|
<p><b>imapsync</b> software is a command line tool allowing incremental and
|
||||||
recursive <b>imap</b> transfers from one mailbox to another.
|
recursive <b>imap</b> transfers from one mailbox to another, both anywhere on the internet.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<a id="AUTHOR"></a>
|
||||||
<h2>AUTHOR</h2>
|
<h2>AUTHOR</h2>
|
||||||
|
|
||||||
<p>Gilles LAMIRAL<br/>
|
<p>Gilles LAMIRAL<br/>
|
||||||
@ -55,6 +44,7 @@ recursive <b>imap</b> transfers from one mailbox to another.
|
|||||||
for feedback.
|
for feedback.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<a id="donation"></a>
|
||||||
<h2>imapsync donation</h2>
|
<h2>imapsync donation</h2>
|
||||||
<p>Happy with this <b>free</b>, <b>open</b> and <b>gratis</b> software?<br/></p>
|
<p>Happy with this <b>free</b>, <b>open</b> and <b>gratis</b> software?<br/></p>
|
||||||
<p><b>Help</b> the author to <b>maintain</b> imapsync and <b>support</b> users:</p>
|
<p><b>Help</b> the author to <b>maintain</b> imapsync and <b>support</b> users:</p>
|
||||||
@ -75,6 +65,7 @@ Or offer him a book on his
|
|||||||
|
|
||||||
<b><i>Thanks in advance!</i></b></p>
|
<b><i>Thanks in advance!</i></b></p>
|
||||||
|
|
||||||
|
<a id="latest"></a>
|
||||||
<h2><a href="imapsync">Latest release
|
<h2><a href="imapsync">Latest release
|
||||||
<!--#exec cmd="cat VERSION" -->
|
<!--#exec cmd="cat VERSION" -->
|
||||||
(<!--#flastmod file="imapsync" -->)
|
(<!--#flastmod file="imapsync" -->)
|
||||||
@ -94,6 +85,7 @@ thanks to Strawberry Perl 5.12 and Par::Packed module.<br/>
|
|||||||
|
|
||||||
<h2><a href="FAQ">Frequently Asked Questions</a></h2>
|
<h2><a href="FAQ">Frequently Asked Questions</a></h2>
|
||||||
|
|
||||||
|
<a id="MAILING-LIST"></a>
|
||||||
<h2>MAILING-LIST</h2>
|
<h2>MAILING-LIST</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -133,6 +125,7 @@ thanks to Strawberry Perl 5.12 and Par::Packed module.<br/>
|
|||||||
<b>Thank you for your participation!</b>
|
<b>Thank you for your participation!</b>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<a id="TODO"></a>
|
||||||
<h2><a href="TODO">TODO</a></h2>
|
<h2><a href="TODO">TODO</a></h2>
|
||||||
|
|
||||||
<p>I code new features for free when I have time and when I find it useful.<br/>
|
<p>I code new features for free when I have time and when I find it useful.<br/>
|
||||||
@ -166,7 +159,7 @@ If you really want a feature you can donate money and I'll code it.<br/>
|
|||||||
<!--#config timefmt="%D" -->
|
<!--#config timefmt="%D" -->
|
||||||
<!--#config timefmt="%A %B %d, %Y" -->
|
<!--#config timefmt="%A %B %d, %Y" -->
|
||||||
This document last modified <!--#echo var="LAST_MODIFIED" --> <br/>
|
This document last modified <!--#echo var="LAST_MODIFIED" --> <br/>
|
||||||
$Id: index.shtml,v 1.14 2010/07/17 00:07:16 gilles Exp gilles $
|
$Id: index.shtml,v 1.17 2010/07/26 23:40:00 gilles Exp gilles $
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
45
patches/imapsync-1.337_tobit_V6.patch
Normal file
45
patches/imapsync-1.337_tobit_V6.patch
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
--- imapsync-1.337 2010-08-02 13:56:06.000000000 +0200
|
||||||
|
+++ imapsync-1.337_tobit-workaround 2010-08-02 13:53:58.000000000 +0200
|
||||||
|
@@ -3821,6 +3821,7 @@
|
||||||
|
$banner;
|
||||||
|
}
|
||||||
|
|
||||||
|
+
|
||||||
|
# IMAPClient 2.2.9 3.xx ads
|
||||||
|
|
||||||
|
package Mail::IMAPClient;
|
||||||
|
@@ -3869,3 +3870,33 @@
|
||||||
|
#$self->Fast_io( $self->Fast_io );
|
||||||
|
$sock;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+sub search {
|
||||||
|
+ my ( $self, @args ) = @_;
|
||||||
|
+
|
||||||
|
+ @args = $self->_quote_search(@args);
|
||||||
|
+
|
||||||
|
+ $self->_imap_uid_command( SEARCH => @args )
|
||||||
|
+ or return undef;
|
||||||
|
+
|
||||||
|
+ my @hits;
|
||||||
|
+ foreach ( $self->History ) {
|
||||||
|
+ chomp;
|
||||||
|
+ s/$CR?$LF$//o;
|
||||||
|
+ s/^(\s*\d+)/* SEARCH $1/;
|
||||||
|
+ s/^\*\s+SEARCH\s+(?=.*?\d)// or next;
|
||||||
|
+ push @hits, grep /^\d+$/, split;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @hits
|
||||||
|
+ or $self->_debug("Search successful but found no matching messages");
|
||||||
|
+
|
||||||
|
+ # return empty list
|
||||||
|
+ return
|
||||||
|
+ wantarray ? @hits
|
||||||
|
+ : !@hits ? \@hits
|
||||||
|
+ : $self->Ranges ? $self->Range( \@hits )
|
||||||
|
+ : \@hits;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
|
2430
patches/imapsync-yahoo
Normal file
2430
patches/imapsync-yahoo
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user