mirror of
https://github.com/imapsync/imapsync.git
synced 2025-06-09 22:24:33 +02:00
1.498
This commit is contained in:
parent
b62a0dae2a
commit
2ca1ed54cb
21 changed files with 6228 additions and 305 deletions
20
COPYING
20
COPYING
|
@ -1,14 +1,14 @@
|
|||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
NO LIMIT PUBLIC LICENSE
|
||||
Version 0, June 2012
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar
|
||||
14 rue de Plaisance, 75014 Paris, France
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
Gilles LAMIRAL
|
||||
La Billais
|
||||
35580 Baulon
|
||||
France
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
NO LIMIT PUBLIC LICENSE
|
||||
Terms and conditions for copying, distribution, modification
|
||||
or anything else.
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
0. No limit to do anything with this work and this license.
|
||||
|
||||
|
|
10
CREDITS
10
CREDITS
|
@ -1,5 +1,5 @@
|
|||
#!/bin/cat
|
||||
# $Id: CREDITS,v 1.168 2012/02/19 22:26:00 gilles Exp gilles $
|
||||
# $Id: CREDITS,v 1.169 2012/07/19 09:43:09 gilles Exp gilles $
|
||||
|
||||
If you want to make a donation to the author, Gilles LAMIRAL,
|
||||
use any of the following ways:
|
||||
|
@ -30,13 +30,18 @@ I thank very much all of these people.
|
|||
I thank also very much all people who bought imapsync from the homepage
|
||||
but I don't cite them here.
|
||||
|
||||
Peter Fuchs
|
||||
Contributed by giving the book
|
||||
30.86 "Designed for Use: Create Usable Interfaces for Applications and the Web"
|
||||
|
||||
|
||||
Pierre GUILLAUME // e-Lixir
|
||||
Fixed 2 bugs about [Gmail] folder names.
|
||||
one is about $cache_dir and bsd_globs() that needs escaped characters.
|
||||
Second is eval and --delete2foldersonly --delete2foldersbutnot that need
|
||||
also good escaping. Thanks.
|
||||
|
||||
? (Found no card in the packet; may be lost since book is damaged, amazon and paper box for an international transported book ...)
|
||||
Unknown (Found no card in the packet; may be lost since book is damaged, amazon and paper box for an international transported book ...)
|
||||
Contributed by giving the book
|
||||
87.18 "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp"
|
||||
|
||||
|
@ -1053,6 +1058,7 @@ Eric Yung
|
|||
|
||||
Total amount of book prices :
|
||||
c \
|
||||
30.86+\
|
||||
87.18+\
|
||||
19.90+\
|
||||
13.59+\
|
||||
|
|
48
ChangeLog
48
ChangeLog
|
@ -1,17 +1,57 @@
|
|||
|
||||
RCS file: RCS/imapsync,v
|
||||
Working file: imapsync
|
||||
head: 1.488
|
||||
head: 1.498
|
||||
branch:
|
||||
locks: strict
|
||||
gilles: 1.488
|
||||
gilles: 1.498
|
||||
access list:
|
||||
symbolic names:
|
||||
keyword substitution: kv
|
||||
total revisions: 488; selected revisions: 488
|
||||
total revisions: 498; selected revisions: 498
|
||||
description:
|
||||
----------------------------
|
||||
revision 1.488 locked by: gilles;
|
||||
revision 1.498 locked by: gilles;
|
||||
date: 2012/07/20 14:28:45; author: gilles; state: Exp; lines: +22 -6
|
||||
Added several connection ckecks like old good imapsync-1.181 to imapsync-1.398
|
||||
----------------------------
|
||||
revision 1.497
|
||||
date: 2012/07/14 19:48:04; author: gilles; state: Exp; lines: +43 -28
|
||||
Added --authmech PREAUTH capabiliy. (Patch from David Abrahams).
|
||||
----------------------------
|
||||
revision 1.496
|
||||
date: 2012/07/12 20:53:49; author: gilles; state: Exp; lines: +12 -11
|
||||
Bugfix. Unsubsribe folder before deleting it (can bug sometimes).
|
||||
----------------------------
|
||||
revision 1.495
|
||||
date: 2012/07/11 04:56:33; author: gilles; state: Exp; lines: +7 -8
|
||||
Bugfix about last patch $h2_total_bytes_duplicate
|
||||
----------------------------
|
||||
revision 1.494
|
||||
date: 2012/07/11 03:50:43; author: gilles; state: Exp; lines: +40 -12
|
||||
Usability. Use KiB MiB GiB etc in result summary. Patch from Mark Atwood.
|
||||
----------------------------
|
||||
revision 1.493
|
||||
date: 2012/06/30 00:28:51; author: gilles; state: Exp; lines: +9 -9
|
||||
Bug fix. Port 143 when --ssl and --tls together.
|
||||
----------------------------
|
||||
revision 1.492
|
||||
date: 2012/06/29 23:32:04; author: gilles; state: Exp; lines: +7 -7
|
||||
Bug fix. Don't filter flag when --nofilterflags is used during the message copy.
|
||||
----------------------------
|
||||
revision 1.491
|
||||
date: 2012/06/20 09:53:27; author: gilles; state: Exp; lines: +8 -8
|
||||
Added value of internal date in --debug mode.
|
||||
----------------------------
|
||||
revision 1.490
|
||||
date: 2012/05/22 21:03:40; author: gilles; state: Exp; lines: +10 -14
|
||||
Updated Cyrus info.
|
||||
----------------------------
|
||||
revision 1.489
|
||||
date: 2012/05/22 20:54:13; author: gilles; state: Exp; lines: +20 -14
|
||||
Print dry mode when expunging.
|
||||
----------------------------
|
||||
revision 1.488
|
||||
date: 2012/04/15 17:38:21; author: gilles; state: Exp; lines: +8 -8
|
||||
Reverse patch applied in 1.485
|
||||
It was "2) eval and --delete2foldersonly --delete2foldersbutnot that need also good escaping."
|
||||
|
|
168
FAQ
168
FAQ
|
@ -1,5 +1,5 @@
|
|||
#!/bin/cat
|
||||
# $Id: FAQ,v 1.106 2012/04/15 19:18:29 gilles Exp gilles $
|
||||
# $Id: FAQ,v 1.114 2012/07/19 09:42:13 gilles Exp gilles $
|
||||
|
||||
+------------------+
|
||||
| FAQ for imapsync |
|
||||
|
@ -109,7 +109,7 @@ Q. I need to migrate hundred accounts, how can I do?
|
|||
R. If you have many mailboxes to migrate think about a little
|
||||
shell program. Write a file called file.txt (for example)
|
||||
containing users and passwords.
|
||||
The separator used in this example is ';'
|
||||
The separator used in this example is ";"
|
||||
|
||||
The file.txt file contains:
|
||||
|
||||
|
@ -179,6 +179,61 @@ R. Add also --nofoldersizes since the default behavior is to compute
|
|||
folder sizes. Folder sizes are useless for the transfer, just
|
||||
useful to see what has to be done on each folder.
|
||||
|
||||
Notes about --useuid
|
||||
|
||||
Case where building the cache first is necessary (to avoid multiples transfers)
|
||||
|
||||
If you run again imapsync with --useuid on a transfert already done without --useuid
|
||||
then, to avoid messages be copied again, first run imapsync with --usecache
|
||||
but without --useuid, example scenario:
|
||||
|
||||
A] Running with the default options, I began without --useuid
|
||||
|
||||
1) First run with default options
|
||||
|
||||
imapsync ...
|
||||
|
||||
Too slow, I want to speed up!
|
||||
|
||||
2) Build the cache
|
||||
|
||||
imapsync ... --usecache
|
||||
|
||||
3) Speed up now
|
||||
|
||||
imapsync ... --useuid
|
||||
|
||||
B] I began with --useuid from the first time
|
||||
|
||||
1) First run and next runs with --useuid
|
||||
|
||||
imapsync ... --useuid
|
||||
|
||||
|
||||
Inodes number issue
|
||||
|
||||
|
||||
The cache is simple, it uses the filsystem natively,
|
||||
it's just an empty file per message transfered.
|
||||
When mailboxes are huge the cache can exhaust the number of inodes
|
||||
allowed in the filesystem, that's a limitation like size but less
|
||||
often encountered.
|
||||
On Unix, to predict whether your tmpdir filesystem used by imapsync
|
||||
will support the whole cache, just run the command "df -i /var/tmp",
|
||||
if /var/tmp is the --tmpdir argument.
|
||||
On windows, search and drop me a note about how to count the number
|
||||
of files allowed in the filesystem.
|
||||
It seems FAT32 supports 268 435 445 clusters.
|
||||
|
||||
Choosing the number of inodes allowed by a filesystem can be done
|
||||
at the creation of it with "mkfs -N number-of-inodes ..."
|
||||
|
||||
imapsync can predict how many messages have to be synced with the
|
||||
option --justfoldersizes (no transfer will be done)
|
||||
|
||||
imapsync ... --justfoldersizes
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. I see warning messages like
|
||||
"Host1 Sent/15 size 1428 ignored (no header so we ignore this message)"
|
||||
|
@ -207,16 +262,15 @@ R. - Download latest Mail::IMAPClient 3.xx at
|
|||
- run imapsync with perl and -I option tailing to use the perl
|
||||
module Mail-IMAPClient-3.xx. Example:
|
||||
|
||||
perl -I./Mail-IMAPClient-3.30/lib ./imapsync ...
|
||||
perl -I./Mail-IMAPClient-3.31/lib ./imapsync ...
|
||||
|
||||
or if imapsync is in directory /path/
|
||||
perl -I./Mail-IMAPClient-3.30/lib /path/imapsync ...
|
||||
perl -I./Mail-IMAPClient-3.31/lib /path/imapsync ...
|
||||
|
||||
- Look at the script named i3 in the tarball, it can be used to
|
||||
run imapsync with included Mail-IMAPClient-3.30/ wherever you
|
||||
run imapsync with included Mail-IMAPClient-3.31/ wherever you
|
||||
unpacked the imapsync tarball
|
||||
|
||||
|
||||
=======================================================================
|
||||
Q. How can I use imapsync with Mail::IMAPClient 2.2.9 perl module?
|
||||
|
||||
|
@ -442,7 +496,7 @@ Q. How to convert flags with $ to \ character?
|
|||
R. $ and \ are special characters we have to "escape" them.
|
||||
For example to convert flag $label1 to \label1
|
||||
|
||||
imapsync ... --regexflag 's/\$label1/\\label1/g' --debugflags
|
||||
imapsync ... --regexflag "s/\$label1/\\label1/g" --debugflags
|
||||
|
||||
=======================================================================
|
||||
Q. I need to keep only a defind list of flags, how can I do?
|
||||
|
@ -622,25 +676,25 @@ want to forward me the output.
|
|||
The way to avoid this problem is by using options --skipheader and
|
||||
--skipsize, like this (avoid headers beginning whith the string "X-"):
|
||||
|
||||
imapsync ... --skipheader '^X-' --skipsize
|
||||
imapsync ... --skipheader "^X-" --skipsize
|
||||
|
||||
To skip several headers you can use --skipheader one time
|
||||
|
||||
imapsync ... --skipheader '^X-|^Status|^Bcc'
|
||||
imapsync ... --skipheader "^X-|^Status|^Bcc"
|
||||
|
||||
If you think you have too many header to avoid just use
|
||||
|
||||
imapsync ... --useheader 'Message-ID' --skipsize
|
||||
imapsync ... --useheader "Message-ID" --skipsize
|
||||
|
||||
Remark. (Trick found by Tomasz Kaczmarski)
|
||||
|
||||
Option --useheader 'Message-ID' asks the server to send only header
|
||||
lines begining with 'Message-ID'. Some (buggy) servers send the whole
|
||||
header (all lines) instead of the 'Message-ID' line. In that case, a
|
||||
Option --useheader "Message-ID" asks the server to send only header
|
||||
lines begining with "Message-ID". Some (buggy) servers send the whole
|
||||
header (all lines) instead of the "Message-ID" line. In that case, a
|
||||
trick to keep the --useheader filtering behavior is to use
|
||||
--skipheader with a negative lookahead pattern :
|
||||
|
||||
imapsync ... --skipheader '^(?!Message-ID)' --skipsize
|
||||
imapsync ... --skipheader "^(?!Message-ID)" --skipsize
|
||||
|
||||
Read it as "skip every header except Message-ID".
|
||||
|
||||
|
@ -679,7 +733,7 @@ Q. I want to exclude a folder hierarchy like "public"
|
|||
|
||||
R. Use:
|
||||
|
||||
--exclude '^public\.'
|
||||
--exclude "^public\."
|
||||
or maybe
|
||||
--exclude '^"public\.'
|
||||
|
||||
|
@ -694,26 +748,39 @@ Q. I want to exclude only INBOX
|
|||
|
||||
R. Use:
|
||||
|
||||
imapsync ... --exclude '^INBOX$'
|
||||
imapsync ... --exclude "^INBOX$"
|
||||
|
||||
A good way to see what will be done is to first use:
|
||||
|
||||
imapsync ... --exclude '^INBOX$' --justfolders --nofoldersizes --dry
|
||||
imapsync ... --exclude "^INBOX$" --justfolders --nofoldersizes --dry
|
||||
|
||||
|
||||
======================================================================
|
||||
Q. I want the --folder 'MyFolder' option be recursive.
|
||||
Q. I want the --folder "MyFolder" option be recursive.
|
||||
|
||||
Two solutions:
|
||||
|
||||
R1. Use
|
||||
|
||||
--folderrec 'MyFolder'
|
||||
--folderrec "MyFolder"
|
||||
|
||||
R2. Use --include '^MyFolder'
|
||||
R2. Use --include "^MyFolder"
|
||||
Then the folder "MyFolder" and all its subfolders will be handled
|
||||
and only them.
|
||||
|
||||
======================================================================
|
||||
Q. Migrating to Exchange 201O, messages get date of the transfer,
|
||||
this is bad for sorting and listing.
|
||||
|
||||
R1. Be sure to have at least Exchange 2010 SP2 Rollup 5
|
||||
http://www.tribalchicken.com.au/15-technical/29-imapsync-exchange2010
|
||||
|
||||
R2. See also the Outlook side (thanks to Martin Hochreiter for this solution)
|
||||
http://www.howto-outlook.com/faq/archivenotworking.htm
|
||||
by changing Archive to sent/receive date
|
||||
|
||||
It's often shorter to change one server than thousands clients
|
||||
so R1 might be easier to do.
|
||||
|
||||
======================================================================
|
||||
Q. How to migrate from or to Exchange 2003 with an admin/authuser
|
||||
|
@ -760,9 +827,9 @@ This doesn't work:
|
|||
imapsync ... --user2 user2 --authuser2 admin2 --password2 adminpassword2 ...
|
||||
|
||||
This might works:
|
||||
imapsync ... --user2 'domain\admin2\user2' --password2 adminpassword2 ...
|
||||
imapsync ... --user2 "domain\admin2\user2" --password2 adminpassword2 ...
|
||||
or
|
||||
imapsync ... --user2 'admin2@domain\user2' --password2 adminpassword2 ...
|
||||
imapsync ... --user2 "admin2@domain\user2" --password2 adminpassword2 ...
|
||||
|
||||
where "domain" is set be the user's UPN in Active Directory
|
||||
or the NETBIOS or DNS name of the domain.
|
||||
|
@ -770,6 +837,34 @@ or the NETBIOS or DNS name of the domain.
|
|||
The exact format might vary depending on local configuration and you
|
||||
should experiment with the different formats.
|
||||
|
||||
A little note from Michael Scherer.
|
||||
The previous workaround in the FAQ seems to be obsolete.
|
||||
I can confirm that
|
||||
|
||||
imapsync ... --host2 exchange_server --authmech2 PLAIN \
|
||||
--authuser2 admin@domain --user2 user_alias
|
||||
|
||||
is working without any glitches, running Exchange 2010 SP2 here.
|
||||
Explanation, Exchange knows a) about a username
|
||||
and b) about a mailNickname which can be different to the username.
|
||||
As it seems you need to use the mailNickname (e.g. alias) defined
|
||||
for user2, not the username itself.
|
||||
http://blogs.technet.com/b/exchange/archive/2004/03/31/105275.aspx
|
||||
|
||||
======================================================================
|
||||
Q. How to migrate from or to Office 365 with an admin/authuser account?
|
||||
|
||||
Note from Yago Torres Fernandez:
|
||||
(a working command using admin/authuser on host2 Office 365)
|
||||
|
||||
imapsync ... --authuser2 user_admin@domain.com --user2 user_to_be_migrated@domain.com ^
|
||||
--password2 XXXX --ssl2 --exclude "Shared Folders" ^
|
||||
--regextrans2 "s#Trash$#Papelera#" --regextrans2 "s#^Deleted Items$#Papelera#"
|
||||
|
||||
but previous in Office365 you must do something like that, using powershell:
|
||||
|
||||
Add-MailboxPermission -identity user_to_be_migrated@domain.com -user user_admin@domain.com -accessrights fullaccess -inheritancetype all
|
||||
|
||||
======================================================================
|
||||
Q. How to migrate from uw-imap with an admin/authuser account?
|
||||
|
||||
|
@ -804,7 +899,7 @@ Here is an example:
|
|||
--host2 server2 \
|
||||
--user2 joe \
|
||||
--password2 joespassonserver2 \
|
||||
--exclude '^user\.'
|
||||
--exclude "^user\."
|
||||
|
||||
======================================================================
|
||||
Q: How to migrate from Sun Java Enterprise System / Sun One / iPlanet /
|
||||
|
@ -856,7 +951,7 @@ to folder INBOX only on host2:
|
|||
|
||||
imapsync \
|
||||
...
|
||||
--regextrans2 's/(.*)/INBOX/' \
|
||||
--regextrans2 "s/(.*)/INBOX/" \
|
||||
--dry --justfolders
|
||||
|
||||
2) See if the output says everything you want imapsync to do,
|
||||
|
@ -879,7 +974,7 @@ R.
|
|||
|
||||
imapsync \
|
||||
...
|
||||
--regextrans2 's/INBOX(.*)/INBOX.Braunschweig$1/' \
|
||||
--regextrans2 "s/INBOX(.*)/INBOX.Braunschweig$1/" \
|
||||
--dry --justfolders
|
||||
|
||||
2) See if the output says everything you want imapsync to do,
|
||||
|
@ -1081,12 +1176,12 @@ Maybe --subscribe_all will help you to see all migrated folders.
|
|||
|
||||
|
||||
=======================================================================
|
||||
Q. Synchronising from SmarterMail to XXX
|
||||
Q. Synchronizing from SmarterMail to XXX
|
||||
|
||||
imapsync --host1 imap.d1.org --user1 joe --password1 secret1 --sep1 "/" \
|
||||
--host2 imap.d2.org --user2 joe --password2 secret2 \
|
||||
--noauthmd5 \
|
||||
--prefix1 "Inbox/" \
|
||||
--prefix1 "" \
|
||||
--regextrans2 's#^Inbox$#INBOX#' \
|
||||
--regextrans2 's#Sent Items$#Sent#' \
|
||||
--dry --justfolders
|
||||
|
@ -1095,7 +1190,7 @@ Maybe add other --regextrans2 to change folder names and see the result.
|
|||
When satisfied, run without --dry --justfolders
|
||||
|
||||
=======================================================================
|
||||
Q. Synchronising from XXX to Gmail
|
||||
Q. Synchronizing from XXX to Gmail
|
||||
|
||||
R. There are some details to get the special [Gmail] sub-folders
|
||||
right. Here's an example of migrating an old "Sent" folder to
|
||||
|
@ -1107,13 +1202,13 @@ imapsync --host1 mail.oldhost.com \
|
|||
--host2 imap.gmail.com --ssl2 \
|
||||
--user2 my_email@gmail.com \
|
||||
--password2 password \
|
||||
--folder 'INBOX.Sent' \
|
||||
--regextrans2 's/Sent/Sent Mail/'
|
||||
--folder "INBOX.Sent" \
|
||||
--regextrans2 "s/Sent/Sent Mail/"
|
||||
|
||||
The same goes for the "All Mail" archive pseudo-folder.
|
||||
|
||||
=======================================================================
|
||||
Q. Synchronising from Gmail to XXX
|
||||
Q. Synchronizing from Gmail to XXX
|
||||
|
||||
R. Gmail needs SSL
|
||||
|
||||
|
@ -1146,7 +1241,7 @@ http://biasecurities.com/blog/2009/migrate-email-from-gmail-to-google-apps/
|
|||
http://www.thamtech.com/blog/2008/03/29/gmail-to-google-apps-email-migration/
|
||||
|
||||
=======================================================================
|
||||
Q. Synchronising from Yahoo to XXX
|
||||
Q. Synchronizing from Yahoo to XXX
|
||||
|
||||
R. Use --host1 imap.mail.yahoo.com --sep1 '/'
|
||||
|
||||
|
@ -1271,6 +1366,15 @@ I encounter many errors like this:
|
|||
|
||||
R. GroupWise 7 seems buggy. Apply GroupWise 7 support pack 1
|
||||
|
||||
=======================================================================
|
||||
Q. Migrating from David Tobit V10
|
||||
|
||||
R. Use the following options :
|
||||
imapsync ... --prefix1 "" --sep1 / --idatefromheader ^
|
||||
--nofoldersizes --useuid
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
=======================================================================
|
||||
Q. Migrating from David Tobit V8
|
||||
|
|
25
INSTALL
25
INSTALL
|
@ -1,4 +1,4 @@
|
|||
# $Id: INSTALL,v 1.24 2012/04/13 09:14:22 gilles Exp gilles $
|
||||
# $Id: INSTALL,v 1.25 2012/07/19 05:57:14 gilles Exp gilles $
|
||||
#
|
||||
# INSTALL file for imapsync
|
||||
# imapsync : IMAP sync or copy tool.
|
||||
|
@ -71,7 +71,7 @@ Here is some individual module help:
|
|||
http://search.cpan.org/dist/Mail-IMAPClient/
|
||||
|
||||
In fact I use both Mail-IMAPClient-2.2.9 and latest Mail-IMAPClient-3.xx
|
||||
(xx >= 25) To know the version you have on your system try :
|
||||
(xx >= 31 now) To know the version you have on your system try :
|
||||
|
||||
perl -mMail::IMAPClient -e 'print $Mail::IMAPClient::VERSION, "\n"'
|
||||
|
||||
|
@ -80,16 +80,21 @@ Here is some individual module help:
|
|||
at least with Mail-IMAPClient-3.25 (previous may bug).
|
||||
Don't hesitate to use latest Mail-IMAPClient-3.xx
|
||||
|
||||
Look at the script named i3 in the tarball, it can be used to
|
||||
run imapsync with included Mail-IMAPClient-3.31/ wherever you
|
||||
unpacked the imapsync tarball.
|
||||
|
||||
|
||||
- Perl Digest::MD5 module.
|
||||
try:
|
||||
|
||||
perl -mDigest::MD5
|
||||
|
||||
http://search.cpan.org/
|
||||
http://search.cpan.org/~gaas/Digest-MD5-2.36/
|
||||
http://search.cpan.org/~gaas/Digest-MD5-2.52/
|
||||
To know the version you have on your system try :
|
||||
perl -mDigest::MD5 -e 'print $Digest::MD5::VERSION, "\n"'
|
||||
I use 2.36 (debian etch package)
|
||||
I use 2.39 (Ubuntu package)
|
||||
|
||||
- Term::ReadKey
|
||||
perl -mTerm::ReadKey -e ''
|
||||
|
@ -146,7 +151,7 @@ To see what will be done, just run:
|
|||
|
||||
make -n install
|
||||
|
||||
To install imapsync, just run (as root):
|
||||
To install imapsync in /usr/bin/ and man page in /usr/share/man/man1/, just run (as root):
|
||||
|
||||
make install
|
||||
|
||||
|
@ -155,15 +160,19 @@ or copy the file imapsync where you want it to be.
|
|||
TESTING on Unix
|
||||
---------------
|
||||
|
||||
The test will break as they are home specific.
|
||||
Tests will break as they are home specific.
|
||||
You need a running imap server on localhost with several accounts
|
||||
toto with a password located in the file $HOME/var/pass/secret.toto
|
||||
titi with a password located in the file $HOME/var/pass/secret.titi
|
||||
tata with a password located in the file $HOME/var/pass/secret.tata
|
||||
|
||||
Of course, you can change the file tests.sh and run the tests with :
|
||||
Of course, you can change the file tests.sh and run tests with:
|
||||
|
||||
sh -x tests.sh
|
||||
sh -x tests.sh
|
||||
|
||||
Specific tests can be run by using them as argument to tests.sh:
|
||||
|
||||
sh -x tests.sh ll_ssl_justconnect ll_bad_host ...
|
||||
|
||||
The tests.sh script break on first failure ("set -e" directive).
|
||||
|
||||
|
|
12
Makefile
12
Makefile
|
@ -1,5 +1,5 @@
|
|||
|
||||
# $Id: Makefile,v 1.94 2012/04/15 19:19:14 gilles Exp gilles $
|
||||
# $Id: Makefile,v 1.95 2012/07/19 05:58:22 gilles Exp gilles $
|
||||
|
||||
.PHONY: help usage all
|
||||
|
||||
|
@ -282,11 +282,11 @@ upload_lfo:
|
|||
/home/gilles/public_html/www.linux-france.org/html/prj/imapsync/.htaccess
|
||||
sh ~/memo/lfo-rsync
|
||||
|
||||
upload_index: index.shtml FAQ
|
||||
validate --verbose index.shtml
|
||||
rcsdiff index.shtml
|
||||
rsync -avH index.shtml FAQ root@ks.lamiral.info:/var/www/imapsync/
|
||||
rsync -avH index.shtml FAQ \
|
||||
upload_index: index.shtml FAQ paypal.shtml
|
||||
validate --verbose index.shtml paypal.shtml
|
||||
rcsdiff index.shtml paypal.shtml FAQ
|
||||
rsync -avH index.shtml FAQ paypal.shtml root@ks.lamiral.info:/var/www/imapsync/
|
||||
rsync -avH index.shtml FAQ paypal.shtml \
|
||||
../../public_html/www.linux-france.org/html/prj/imapsync/
|
||||
sh $(HOME)/memo/lfo-rsync
|
||||
|
||||
|
|
18
README
18
README
|
@ -3,7 +3,7 @@ NAME
|
|||
Synchronise mailboxes between two imap servers. Good at IMAP migration.
|
||||
More than 44 different IMAP server softwares supported with success.
|
||||
|
||||
$Revision: 1.488 $
|
||||
$Revision: 1.498 $
|
||||
|
||||
SYNOPSIS
|
||||
To synchronise imap account "foo" on "imap.truc.org" to imap account
|
||||
|
@ -314,14 +314,10 @@ IMAP SERVERS
|
|||
- Courier IMAP 1.5.1, 2.2.0, 2.1.1, 2.2.1, 3.0.8, 3.0.3, 4.1.1 (GPL)
|
||||
(http://www.courier-mta.org/)
|
||||
- Critical Path (7.0.020)
|
||||
- Cyrus IMAP 1.5, 1.6, 2.1, 2.1.15, 2.1.16, 2.1.18
|
||||
2.2.1, 2.2.2-BETA, 2.2.10, 2.2.12,
|
||||
v2.2.3-Invoca-RPM-2.2.3-8,
|
||||
2.3-alpha (OSI Approved),
|
||||
v2.2.12-Invoca-RPM-2.2.12-3.RHEL4.1,
|
||||
2.2.13,
|
||||
v2.3.1-Invoca-RPM-2.3.1-2.7.fc5,
|
||||
v2.3.7,
|
||||
- Cyrus IMAP 1.5, 1.6,
|
||||
2.1, 2.1.15, 2.1.16, 2.1.18
|
||||
2.2.1, 2.2.2-BETA, 2.2.3, 2.2.6, 2.2.10, 2.2.12, 2.2.13,
|
||||
2.3-alpha (OSI Approved), 2.3.1, 2.3.7, 2.3.16
|
||||
(http://asg.web.cmu.edu/cyrus/)
|
||||
- David Tobit V8 (proprietary Message system).
|
||||
- DBMail 1.2.1, 2.0.4, 2.0.9, 2.2rc1 (GPL) (http://www.dbmail.org/).
|
||||
|
@ -342,7 +338,7 @@ IMAP SERVERS
|
|||
- Kerio 7.2.0 Patch 1 [host1] [host2]
|
||||
- MailEnable 4.23 [host1] [host2], 4.26 [host1][host2], 5 [host1]
|
||||
- MDaemon 7.0.1, 8.0.2, 8.1, 9.5.4 (Windows server 2003 R2 platform), 12 [host2],
|
||||
12.0.3 [host1]
|
||||
12.0.3 [host1], 12.5.5 [host1],
|
||||
- Mercury 4.1 (Windows server 2000 platform)
|
||||
- Microsoft Exchange Server 5.5, 6.0.6249.0[host1], 6.0.6487.0[host1],
|
||||
6.5.7638.1 [host2], 6.5 [host1], Exchange 2007 SP1 (with Update Rollup 2),
|
||||
|
@ -444,5 +440,5 @@ SIMILAR SOFTWARES
|
|||
|
||||
Feedback (good or bad) will often be welcome.
|
||||
|
||||
$Id: imapsync,v 1.488 2012/04/15 17:38:21 gilles Exp gilles $
|
||||
$Id: imapsync,v 1.498 2012/07/20 14:28:45 gilles Exp gilles $
|
||||
|
||||
|
|
12
TODO
12
TODO
|
@ -1,5 +1,5 @@
|
|||
#!/bin/cat
|
||||
# $Id: TODO,v 1.111 2012/04/15 19:18:54 gilles Exp gilles $
|
||||
# $Id: TODO,v 1.112 2012/07/19 09:41:54 gilles Exp gilles $
|
||||
|
||||
TODO file for imapsync
|
||||
----------------------
|
||||
|
@ -19,6 +19,10 @@ Evaluate
|
|||
http://www.rackspace.com/apps/email_hosting/migrations
|
||||
http://www.yippiemove.com/
|
||||
http://www.migrationwiz.com/
|
||||
http://www.microsoft.com/download/en/details.aspx?id=1329 "Microsoft Transporter Suite"
|
||||
|
||||
Fix bug found by Pavel Stano on 01/06/2012 (june) imapsync never stop login
|
||||
when login fails with a "* BYE Temp error" from server.
|
||||
|
||||
Consider /var/tmp/ instead of /tmp (/tmp is destoyed
|
||||
on some Unix at reboot)
|
||||
|
@ -161,6 +165,12 @@ http://asg.web.cmu.edu/cyrus/download/imapd/altnamespace.html
|
|||
|
||||
===========================================================================
|
||||
|
||||
DONE. Add a note about
|
||||
"One other thing: You might want to warn idiots like me, that if your
|
||||
cache resides on a filesystem with a limited number of inodes such as
|
||||
ext4, your inodes will be exhausted really fast (check with df -i). I
|
||||
now use a dedicated partition with reiserfs."
|
||||
|
||||
DONE. Add an option --exitwhenover 2500000000 to avoid to be banned or locked
|
||||
http://support.google.com/a/bin/answer.py?hl=en&answer=1071518
|
||||
|
||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
|||
1.488
|
||||
1.498
|
||||
|
|
|
@ -1 +1 @@
|
|||
1.488
|
||||
1.498
|
||||
|
|
|
@ -1,16 +1,67 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $Id: memo,v 1.6 2012/02/24 12:23:38 gilles Exp gilles $
|
||||
# $Id: memo,v 1.9 2012/07/05 20:37:53 gilles Exp gilles $
|
||||
|
||||
|
||||
echo paypal_bilan_tests_invoice
|
||||
paypal_bilan_tests_invoice() {
|
||||
# DID output no diff between paypal_bilan_1.47 and 1.48
|
||||
echo paypal_bilan_todo
|
||||
paypal_bilan_todo() {
|
||||
cat <<EOF
|
||||
http://www.cabinet-antoine.fr/spip.php?article138
|
||||
Si vous réalisez des ventes de biens au profit d\u2019entreprises ressortissantes d\u2019autres états membres de l\u2019Union européenne et si ces ventes sont exonérées de TVA, les factures correspondantes doivent impérativement comporter le numéro de TVA intracommunautaire de vos clients ainsi que la mention : « Exonération de TVA, article 262 ter, I du Code général des impôts ». Là encore, ces factures ne doivent évidemment pas comporter de taux ni de montant de TVA.
|
||||
Si vous fournissez des prestations de services à un client installé dans un autre État membre de l\u2019Union européenne, depuis le 1er janvier 2010, le lieu d\u2019imposition des prestations de services entre entreprises est celui où est situé l\u2019acheteur et non plus celui où est établi le prestataire. En conséquence, en application du système dit de l\u2019autoliquidation de la TVA, vous ne devez plus faire mention de la TVA sur vos factures, mais vous devez indiquer : « Exonération de TVA, article 283-2 du Code général des impôts ».
|
||||
|
||||
|
||||
Hors Europe a un non-assujetti : Article 259 B => prestation hors France pour
|
||||
- Article 259 B-1 Cessions de droits de licences
|
||||
- Article 259 B-4 Prestations des conseillers, ingénieurs dans tous les domaines
|
||||
- Article 259 B-5 Traitement de données et fournitures d information
|
||||
|
||||
Hors Europe : Article 262 => Exoneration
|
||||
- Article 262-1 les livraisons de biens expédiés par le vendeur [...] ainsi que les prestations de services directement liées à l exportation ;
|
||||
- Article 262-2 les livraisons de biens expédiés ou transportés par l acheteur [...] ainsi que les prestations de services directement liées à l exportation.
|
||||
|
||||
Europe a un autre assujetti : Article 262 ter => Exoneration
|
||||
- Article 262 ter-1 sur livraisons de biens expédiés. Question : oeuvre immaterielle, service ?
|
||||
|
||||
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
echo paypal_bilan_tests_tva
|
||||
paypal_bilan_tests_tva() {
|
||||
# DID output no diff between paypal_bilan_1.55 and 1.5?
|
||||
(
|
||||
#set -x
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.47 --bnc --debug --debug_invoice --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334' /g/paypal/paypal_201?_??_complet.csv \
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.55 --bnc --debug --debug_invoice --first_in 147 \
|
||||
--avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334 1652 1653' \
|
||||
/g/paypal/paypal_201?_??_complet.csv \
|
||||
> /g/var/paypal_bilan/tests/paypal_invoice.out1 2>&1
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug --debug_invoice --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334' /g/paypal/paypal_201?_??_complet.csv \
|
||||
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug --debug_invoice --first_in 147 \
|
||||
--avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334 1652 1653' \
|
||||
/g/paypal/paypal_201?_??_complet.csv \
|
||||
> /g/var/paypal_bilan/tests/paypal_invoice.out2 2>&1
|
||||
|
||||
echo diff /g/var/paypal_bilan/tests/paypal_invoice.out1 /g/var/paypal_bilan/tests/paypal_invoice.out2
|
||||
diff /g/var/paypal_bilan/tests/paypal_invoice.out1 /g/var/paypal_bilan/tests/paypal_invoice.out2
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
#echo paypal_bilan_tests_invoice
|
||||
paypal_bilan_tests_invoice() {
|
||||
# DID output no diff between paypal_bilan_1.53 and 1.53
|
||||
(
|
||||
#set -x
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.52 --bnc --debug --debug_invoice --first_in 147 \
|
||||
--avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334 1652 1653' \
|
||||
/g/paypal/paypal_201?_??_complet.csv \
|
||||
> /g/var/paypal_bilan/tests/paypal_invoice.out1 2>&1
|
||||
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug --debug_invoice --first_in 147 \
|
||||
--avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334 1652 1653' \
|
||||
/g/paypal/paypal_201?_??_complet.csv \
|
||||
> /g/var/paypal_bilan/tests/paypal_invoice.out2 2>&1
|
||||
|
||||
echo diff /g/var/paypal_bilan/tests/paypal_invoice.out1 /g/var/paypal_bilan/tests/paypal_invoice.out2
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# $Id: paypal_bilan,v 1.48 2012/04/15 09:24:49 gilles Exp gilles $
|
||||
# $Id: paypal_bilan,v 1.56 2012/07/16 21:57:51 gilles Exp gilles $
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
@ -13,6 +13,11 @@ use Test::More 'no_plan' ;
|
|||
|
||||
die unless (utf8_supported_charset('ISO-8859-1'));
|
||||
|
||||
my $rcs = '$Id: paypal_bilan,v 1.56 2012/07/16 21:57:51 gilles Exp gilles $ ' ;
|
||||
$rcs =~ m/,v (\d+\.\d+)/ ;
|
||||
my $VERSION = ($1) ? $1: "UNKNOWN" ;
|
||||
|
||||
|
||||
my $total_usd_received = 0 ;
|
||||
my $total_usd_invoice = 0 ;
|
||||
my $total_HT_EUR_exo = 0 ;
|
||||
|
@ -140,7 +145,7 @@ foreach my $invoice ( @invoices_wanted ) {
|
|||
if ( $invoice_sent ) {
|
||||
$invoice_sent{ $invoice }++ ;
|
||||
#build_invoice( $invoice ) ;
|
||||
}else{
|
||||
}elsif( not ( $invoice_canceled{ $invoice } or $invoice_refund{ $invoice } ) ) {
|
||||
$invoice_not_sent{ $invoice }++ ;
|
||||
build_invoice( $invoice ) ;
|
||||
}
|
||||
|
@ -154,6 +159,9 @@ my @invoice_canceled = sort { $a <=> $b } keys( %invoice_canceled ) ;
|
|||
my @invoice_suspended = sort { $a <=> $b } keys( %invoice_suspended ) ;
|
||||
my @invoice_refund = sort { $a <=> $b } keys( %invoice_refund ) ;
|
||||
|
||||
print( "\n", "=" x 60, "\n" ) if $bnc ;
|
||||
|
||||
|
||||
print "USD banque $total_usd_received\n" ;
|
||||
print "USD invoice $total_usd_invoice\n" ;
|
||||
my $total_eur_from_usd ;
|
||||
|
@ -180,9 +188,9 @@ print "EUR total TVA $total_TVA_EUR\n" ;
|
|||
print "EUR total HT sup $total_HT_EUR_sup\n" ;
|
||||
print "EUR total TVA sup $total_TVA_EUR_sup\n" ;
|
||||
print "Nb invoice $nb_invoice ( from $first_invoice_paypal to $last_invoice )\n" ;
|
||||
print "Nb invoice canceled $nb_invoice_canceled @invoice_canceled\n" ;
|
||||
print "Nb invoice suspended $nb_invoice_suspended @invoice_suspended\n" ;
|
||||
print "Nb invoice refund $nb_invoice_refund @invoice_refund\n" ;
|
||||
print "Nb invoice canceled ($nb_invoice_canceled) @invoice_canceled\n" ;
|
||||
print "Nb invoice suspended ($nb_invoice_suspended) @invoice_suspended\n" ;
|
||||
print "Nb invoice refund ($nb_invoice_refund) @invoice_refund\n" ;
|
||||
print "Nb invoice sent $nb_invoice_sent\n" ;
|
||||
print "Have to send invoices @invoice_not_sent\n" if ( @invoice_not_sent ) ;
|
||||
|
||||
|
@ -479,9 +487,10 @@ sub compute_line {
|
|||
$IND_flag = ' IND' if ('imapsync usage' eq $Nom_Option_1 and 'individual' eq $Valeur_Option_1 ) ;
|
||||
my $SUPPORT_flag = '' ;
|
||||
$SUPPORT_flag = ' support' if ( 'imapsync support' eq $Titre_de_l_objet ) ;
|
||||
print "FE $invoice$FR_flag$IND_flag\n" ;
|
||||
#print "FE $invoice$FR_flag$IND_flag\n" ;
|
||||
#printf( "%.2f [EUR %.2f]\n", $Montant, $MontantEUR ) ;
|
||||
print "FE $invoice$FR_flag$IND_flag imapsync$SUPPORT_flag $Nom\n" ;
|
||||
printf( "%.2f [EUR %.2f]\n", $Montant, $MontantEUR ) ;
|
||||
print "[$Date]$FR_flag$IND_flag $MontantEUR $Devise \n" ;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -589,7 +598,8 @@ sub build_invoice {
|
|||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
$priceTTCusd
|
||||
$priceTTCusd,
|
||||
$HTorTTC
|
||||
)
|
||||
= tva_stuff( $clientTypeEN, $Pays, $Hors_taxe, $Devise, $Titre_de_l_objet ) ;
|
||||
|
||||
|
@ -600,7 +610,7 @@ sub build_invoice {
|
|||
|
||||
my ( $Nom1 ) = cut( $Nom, 42 ) ;
|
||||
my $tex_variables = qq{
|
||||
%% Begin input from paypal_bilan
|
||||
%% Begin input from paypal_bilan $VERSION
|
||||
\\providecommand{\\invoiceNumber}{$invoice}
|
||||
\\providecommand{\\clientName}{$Nom1}
|
||||
\\providecommand{\\clientEmail}{$De_l_adresse_email}
|
||||
|
@ -610,6 +620,7 @@ sub build_invoice {
|
|||
\\providecommand{\\clientAdrD}{$clientAdrD}
|
||||
\\providecommand{\\clientAdrE}{$clientAdrE}
|
||||
\\providecommand{\\clientAdrF}{$clientAdrF}
|
||||
\\providecommand{\\clientVAT}{}
|
||||
\\providecommand{\\invoiceDate}{$Date}
|
||||
\\providecommand{\\invoiceHour}{$Heure}
|
||||
|
||||
|
@ -623,6 +634,7 @@ sub build_invoice {
|
|||
\\providecommand{\\tvaFR}{$tvaFR}
|
||||
\\providecommand{\\tvaEN}{$tvaEN}
|
||||
\\providecommand{\\priceTVA}{$priceTVA}
|
||||
\\providecommand{\\HTorTTC}{$HTorTTC}
|
||||
\\providecommand{\\priceTTC}{$priceTTC}
|
||||
\\providecommand{\\priceTTCusd}{$priceTTCusd}
|
||||
\\providecommand{\\messageTVAFR}{$messageTVAFR}
|
||||
|
@ -995,6 +1007,7 @@ sub tva_stuff {
|
|||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
$HTorTTC
|
||||
) ;
|
||||
|
||||
if ( ( 'individual' eq $clientTypeEN)
|
||||
|
@ -1008,16 +1021,18 @@ sub tva_stuff {
|
|||
$tvaEN = '';
|
||||
$priceTVA = sprintf('%2.2f', $Hors_taxe/1.196*0.196) ;
|
||||
$priceTTC = sprintf('%2.2f', $Hors_taxe) ;
|
||||
$messageTVAFR = '';
|
||||
$messageTVAEN = '';
|
||||
$HTorTTC = 'TTC' ;
|
||||
$messageTVAFR = '' ;
|
||||
$messageTVAEN = '' ;
|
||||
}else{
|
||||
$priceHT = sprintf('%2.2f', $Hors_taxe) ;
|
||||
$tvaFR = 'néant';
|
||||
$tvaEN = '(none)';
|
||||
$priceTVA = 0 ;
|
||||
$priceTTC = $priceHT;
|
||||
$messageTVAFR = 'Exonération de TVA, article 259 B-1 du Code Général des Impôts';
|
||||
$messageTVAEN = '(VAT tax-exempt, article 259 B-1 French General Tax Code)';
|
||||
$tvaFR = '' ;
|
||||
$tvaEN = '' ;
|
||||
$priceTVA = 'néant (none)' ;
|
||||
$priceTTC = $priceHT ;
|
||||
$HTorTTC = 'HT' ;
|
||||
$messageTVAFR = 'Exonération de TVA, articles 262 1-2 du Code Général des Impôts';
|
||||
$messageTVAEN = '(VAT tax-exempt, articles 262 1-2 French General Tax Code)';
|
||||
}
|
||||
foreach my $price ( $priceHT, $priceTVA, $priceTTC, $priceTTCusd ) {
|
||||
#print "[$price]\n" ;
|
||||
|
@ -1031,7 +1046,8 @@ sub tva_stuff {
|
|||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
$priceTTCusd
|
||||
$priceTTCusd,
|
||||
$HTorTTC
|
||||
) ;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# $Id: paypal_bilan,v 1.47 2012/02/24 12:22:05 gilles Exp gilles $
|
||||
# $Id: paypal_bilan,v 1.55 2012/07/16 19:33:46 gilles Exp gilles $
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
@ -13,6 +13,11 @@ use Test::More 'no_plan' ;
|
|||
|
||||
die unless (utf8_supported_charset('ISO-8859-1'));
|
||||
|
||||
my $rcs = '$Id: paypal_bilan,v 1.55 2012/07/16 19:33:46 gilles Exp gilles $ ' ;
|
||||
$rcs =~ m/,v (\d+\.\d+)/ ;
|
||||
my $VERSION = ($1) ? $1: "UNKNOWN" ;
|
||||
|
||||
|
||||
my $total_usd_received = 0 ;
|
||||
my $total_usd_invoice = 0 ;
|
||||
my $total_HT_EUR_exo = 0 ;
|
||||
|
@ -140,7 +145,7 @@ foreach my $invoice ( @invoices_wanted ) {
|
|||
if ( $invoice_sent ) {
|
||||
$invoice_sent{ $invoice }++ ;
|
||||
#build_invoice( $invoice ) ;
|
||||
}else{
|
||||
}elsif( not ( $invoice_canceled{ $invoice } or $invoice_refund{ $invoice } ) ) {
|
||||
$invoice_not_sent{ $invoice }++ ;
|
||||
build_invoice( $invoice ) ;
|
||||
}
|
||||
|
@ -154,6 +159,9 @@ my @invoice_canceled = sort { $a <=> $b } keys( %invoice_canceled ) ;
|
|||
my @invoice_suspended = sort { $a <=> $b } keys( %invoice_suspended ) ;
|
||||
my @invoice_refund = sort { $a <=> $b } keys( %invoice_refund ) ;
|
||||
|
||||
print( "\n", "=" x 60, "\n" ) if $bnc ;
|
||||
|
||||
|
||||
print "USD banque $total_usd_received\n" ;
|
||||
print "USD invoice $total_usd_invoice\n" ;
|
||||
my $total_eur_from_usd ;
|
||||
|
@ -180,9 +188,9 @@ print "EUR total TVA $total_TVA_EUR\n" ;
|
|||
print "EUR total HT sup $total_HT_EUR_sup\n" ;
|
||||
print "EUR total TVA sup $total_TVA_EUR_sup\n" ;
|
||||
print "Nb invoice $nb_invoice ( from $first_invoice_paypal to $last_invoice )\n" ;
|
||||
print "Nb invoice canceled $nb_invoice_canceled @invoice_canceled\n" ;
|
||||
print "Nb invoice suspended $nb_invoice_suspended @invoice_suspended\n" ;
|
||||
print "Nb invoice refund $nb_invoice_refund @invoice_refund\n" ;
|
||||
print "Nb invoice canceled ($nb_invoice_canceled) @invoice_canceled\n" ;
|
||||
print "Nb invoice suspended ($nb_invoice_suspended) @invoice_suspended\n" ;
|
||||
print "Nb invoice refund ($nb_invoice_refund) @invoice_refund\n" ;
|
||||
print "Nb invoice sent $nb_invoice_sent\n" ;
|
||||
print "Have to send invoices @invoice_not_sent\n" if ( @invoice_not_sent ) ;
|
||||
|
||||
|
@ -477,9 +485,12 @@ sub compute_line {
|
|||
$FR_flag = ' FR' if $Pays eq 'France' ;
|
||||
my $IND_flag = '' ;
|
||||
$IND_flag = ' IND' if ('imapsync usage' eq $Nom_Option_1 and 'individual' eq $Valeur_Option_1 ) ;
|
||||
print "FE $invoice$FR_flag$IND_flag\n" ;
|
||||
print "FE $invoice$FR_flag$IND_flag imapsync $Nom\n" ;
|
||||
printf( "%.2f [EUR %.2f]\n", $Montant, $MontantEUR ) ;
|
||||
my $SUPPORT_flag = '' ;
|
||||
$SUPPORT_flag = ' support' if ( 'imapsync support' eq $Titre_de_l_objet ) ;
|
||||
#print "FE $invoice$FR_flag$IND_flag\n" ;
|
||||
#printf( "%.2f [EUR %.2f]\n", $Montant, $MontantEUR ) ;
|
||||
print "FE $invoice$FR_flag$IND_flag imapsync$SUPPORT_flag $Nom\n" ;
|
||||
print "[$Date]$FR_flag$IND_flag $MontantEUR $Devise \n" ;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -587,7 +598,8 @@ sub build_invoice {
|
|||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
$priceTTCusd
|
||||
$priceTTCusd,
|
||||
$HTorTTC
|
||||
)
|
||||
= tva_stuff( $clientTypeEN, $Pays, $Hors_taxe, $Devise, $Titre_de_l_objet ) ;
|
||||
|
||||
|
@ -598,7 +610,7 @@ sub build_invoice {
|
|||
|
||||
my ( $Nom1 ) = cut( $Nom, 42 ) ;
|
||||
my $tex_variables = qq{
|
||||
%% Begin input from paypal_bilan
|
||||
%% Begin input from paypal_bilan $VERSION
|
||||
\\providecommand{\\invoiceNumber}{$invoice}
|
||||
\\providecommand{\\clientName}{$Nom1}
|
||||
\\providecommand{\\clientEmail}{$De_l_adresse_email}
|
||||
|
@ -621,6 +633,7 @@ sub build_invoice {
|
|||
\\providecommand{\\tvaFR}{$tvaFR}
|
||||
\\providecommand{\\tvaEN}{$tvaEN}
|
||||
\\providecommand{\\priceTVA}{$priceTVA}
|
||||
\\providecommand{\\HTorTTC}{$HTorTTC}
|
||||
\\providecommand{\\priceTTC}{$priceTTC}
|
||||
\\providecommand{\\priceTTCusd}{$priceTTCusd}
|
||||
\\providecommand{\\messageTVAFR}{$messageTVAFR}
|
||||
|
@ -993,6 +1006,7 @@ sub tva_stuff {
|
|||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
$HTorTTC
|
||||
) ;
|
||||
|
||||
if ( ( 'individual' eq $clientTypeEN)
|
||||
|
@ -1006,16 +1020,18 @@ sub tva_stuff {
|
|||
$tvaEN = '';
|
||||
$priceTVA = sprintf('%2.2f', $Hors_taxe/1.196*0.196) ;
|
||||
$priceTTC = sprintf('%2.2f', $Hors_taxe) ;
|
||||
$messageTVAFR = '';
|
||||
$messageTVAEN = '';
|
||||
$HTorTTC = 'TTC' ;
|
||||
$messageTVAFR = '' ;
|
||||
$messageTVAEN = '' ;
|
||||
}else{
|
||||
$priceHT = sprintf('%2.2f', $Hors_taxe) ;
|
||||
$tvaFR = 'néant';
|
||||
$tvaEN = '(none)';
|
||||
$priceTVA = 0 ;
|
||||
$priceTTC = $priceHT;
|
||||
$messageTVAFR = 'Exonération de TVA, article 259 B-1 du Code Général des Impôts';
|
||||
$messageTVAEN = '(VAT tax-exempt, article 259 B-1 French General Tax Code)';
|
||||
$tvaFR = '' ;
|
||||
$tvaEN = '' ;
|
||||
$priceTVA = 'néant (none)' ;
|
||||
$priceTTC = $priceHT ;
|
||||
$HTorTTC = 'HT' ;
|
||||
$messageTVAFR = 'Exonération de TVA, articles 262 1-2 du Code Général des Impôts';
|
||||
$messageTVAEN = '(VAT tax-exempt, articles 262 1-2 French General Tax Code)';
|
||||
}
|
||||
foreach my $price ( $priceHT, $priceTVA, $priceTTC, $priceTTCusd ) {
|
||||
#print "[$price]\n" ;
|
||||
|
@ -1029,7 +1045,8 @@ sub tva_stuff {
|
|||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
$priceTTCusd
|
||||
$priceTTCusd,
|
||||
$HTorTTC
|
||||
) ;
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $Id: paypal_build_invoices,v 1.29 2012/04/13 10:42:44 gilles Exp gilles $
|
||||
# $Id: paypal_build_invoices,v 1.34 2012/07/16 14:00:28 gilles Exp gilles $
|
||||
|
||||
# usage: sh paypal_build_invoices /g/var/paypal_invoices/????
|
||||
|
||||
|
@ -25,7 +25,10 @@ set -x
|
|||
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1335 /g/paypal/paypal_2012_01_complet.csv
|
||||
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1417 /g/paypal/paypal_2012_02_complet.csv
|
||||
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1508 /g/paypal/paypal_2012_03_complet.csv
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1575 /g/paypal/paypal_2012_04_complet.csv
|
||||
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1575 /g/paypal/paypal_2012_04_complet.csv
|
||||
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1654 /g/paypal/paypal_2012_05_complet.csv
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1743 /g/paypal/paypal_2012_06_complet.csv
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1824 /g/paypal/paypal_2012_07_complet.csv
|
||||
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 147 /g/paypal/paypal_2010_11_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 214 /g/paypal/paypal_2010_12_complet.csv
|
||||
|
@ -37,29 +40,32 @@ set -x
|
|||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 733 --usdeur 1.4395 /g/paypal/paypal_2011_06_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 824 --usdeur 1.4496 /g/paypal/paypal_2011_07_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 917 --usdeur 1.4397 /g/paypal/paypal_2011_08_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1094 --usdeur 1.4380 /g/paypal/paypal_2011_10_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1185 --usdeur 1.3387 /g/paypal/paypal_2011_11_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1263 --usdeur 1.3856 /g/paypal/paypal_2011_12_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1335 /g/paypal/paypal_2012_01_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 999 --usdeur 1.4380 /g/paypal/paypal_2011_09_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1094 --usdeur 1.3387 /g/paypal/paypal_2011_10_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1185 --usdeur 1.3856 /g/paypal/paypal_2011_11_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1263 --usdeur 1.3438 /g/paypal/paypal_2011_12_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1335 --usdeur 1.2952 /g/paypal/paypal_2012_01_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1417 /g/paypal/paypal_2012_02_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1508 /g/paypal/paypal_2012_03_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1575 /g/paypal/paypal_2012_04_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1654 /g/paypal/paypal_2012_05_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1743 /g/paypal/paypal_2012_06_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1824 /g/paypal/paypal_2012_07_complet.csv
|
||||
|
||||
set +x
|
||||
|
||||
# La totale
|
||||
|
||||
: || /g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug \
|
||||
--first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334' \
|
||||
--first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334 1652 1653' \
|
||||
/g/paypal/paypal_201?_??_complet.csv
|
||||
|
||||
: || /g/public_html/imapsync/W/paypal_reply/paypal_bilan \
|
||||
--first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334' \
|
||||
--first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334 1652 1653' \
|
||||
/g/paypal/paypal_201?_??_complet.csv
|
||||
|
||||
echo 'sh paypal_build_invoices /g/var/paypal_invoices/1???'
|
||||
|
||||
|
||||
|
||||
# USD de 147 à 340
|
||||
# EUR de 341 à ...
|
||||
|
||||
|
@ -67,43 +73,6 @@ echo 'sh paypal_build_invoices /g/var/paypal_invoices/1???'
|
|||
# 20110412 Found problems with 189 199 242 249 258 263 359 382 537
|
||||
# cen cen JAP cen cen cen cen TCH JAP
|
||||
# cen
|
||||
# 155 TVA 1,89
|
||||
# 171 TVA 4,42
|
||||
# 220 TVA 3,16
|
||||
# 225 TVA 3,16
|
||||
# 236 TVA 4,42
|
||||
# 298 TVA 3,16
|
||||
# 307 TVA 4,42
|
||||
# 312 TVA 4,42
|
||||
# 324 TVA 4,42
|
||||
# 351 TVA 4,92
|
||||
# 395 TVA 4,92
|
||||
# 408 TVA 4,92
|
||||
# 419 TVA 4,92
|
||||
# 432 TVA 4,92
|
||||
# 435 TVA 4,92
|
||||
# 452 TVA 4,92
|
||||
# 460 TVA 4,92
|
||||
# 461 TVA 4,92
|
||||
# 463 TVA 4,92
|
||||
# 464 TVA 4,92
|
||||
# 475 TVA 4,92
|
||||
# 487 TVA 4,92
|
||||
# 489 TVA 4,92
|
||||
# 502 TVA 4,92
|
||||
# 504 TVA 4,92
|
||||
# 511 TVA 4,92
|
||||
# 522 TVA 4,92
|
||||
# 523 TVA 4,92
|
||||
# 533 TVA 4,92
|
||||
# 537 TVA 4,92
|
||||
# 540 TVA 4,92
|
||||
# 543 TVA 4,92
|
||||
# 549 TVA 4,92
|
||||
# 551 TVA 4,92
|
||||
# 552 TVA 4,92
|
||||
# 556 TVA 4,92
|
||||
# 563 TVA 4,92
|
||||
|
||||
for d in "$@"; do
|
||||
echo "==== $d ===="
|
||||
|
@ -118,7 +87,7 @@ for d in "$@"; do
|
|||
rm -f facture_imapsync-$bd.tex
|
||||
cp -f ../facture_imapsync-000.tex facture_imapsync-$bd.tex
|
||||
|
||||
if ! pdflatex facture_imapsync-$bd.tex < /dev/null > /dev/null; then
|
||||
if { ! pdflatex facture_imapsync-$bd.tex < /dev/null > /dev/null || test -f facture_imapsync-${bd}_good.tex ; } then
|
||||
echo "PB $bd"
|
||||
if test -f facture_imapsync-${bd}_good.tex \
|
||||
&& pdflatex facture_imapsync-${bd}_good.tex < /dev/null > /dev/null
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# $Id: paypal_build_reply,v 1.17 2011/12/07 23:47:03 gilles Exp gilles $
|
||||
# $Id: paypal_build_reply,v 1.19 2012/04/30 22:57:04 gilles Exp gilles $
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
@ -11,7 +11,7 @@ my ($amount, $name, $email);
|
|||
my (
|
||||
$paypal_line, $paypal_info,
|
||||
$buyer, $description, $object,
|
||||
$url_source, $url_exe, $url, $release, $release_exe,
|
||||
$url, $release, $release_exe,
|
||||
);
|
||||
|
||||
my $help ;
|
||||
|
@ -52,8 +52,6 @@ while(<>) {
|
|||
$release = firstline( '/g/public_html/imapsync/VERSION' ) ;
|
||||
$release_exe = firstline( '/g/public_html/imapsync/VERSION_EXE' ) ;
|
||||
my $path_last = firstline( '/g/public_html/imapsync/dist/path_last.txt' ) ;
|
||||
$url_source = firstline( '/g/var/paypal_reply/url_source' ) ;
|
||||
$url_exe = firstline( '/g/var/paypal_reply/url_exe' ) ;
|
||||
|
||||
$url = "http://ks.lamiral.info/imapsync/dist/$path_last/" ;
|
||||
|
||||
|
@ -99,7 +97,7 @@ while(<>) {
|
|||
|
||||
my $address = 'gilles.lamiral@laposte.net';
|
||||
my $address2 = 'gilles@lamiral.info';
|
||||
my $rcstag = '$Id: paypal_build_reply,v 1.17 2011/12/07 23:47:03 gilles Exp gilles $';
|
||||
my $rcstag = '$Id: paypal_build_reply,v 1.19 2012/04/30 22:57:04 gilles Exp gilles $';
|
||||
|
||||
my $download_info = "You will find the latest imapsync.exe binary (release $release_exe)
|
||||
and the latest imapsync source code (release $release) at the following link:
|
||||
|
@ -147,7 +145,7 @@ my $subject_support = "[imapsync support] imapsync release $release [$email]" ;
|
|||
my $subject ;
|
||||
|
||||
my $text ;
|
||||
if ( 'imapsync support' eq $object ) {
|
||||
if ( $object =~ m{imapsync support} ) {
|
||||
$text = $text_support ;
|
||||
$subject = $subject_support ;
|
||||
}else{
|
||||
|
@ -194,7 +192,7 @@ EOM
|
|||
|
||||
|
||||
print $message;
|
||||
#print "[$amount] [$name] [$email] [$paypal_line] [$object]\n";
|
||||
$debug and print "[$amount] [$name] [$email] [$paypal_line] [$object]\n";
|
||||
|
||||
|
||||
sub firstline {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $Id: paypal_functions,v 1.18 2011/12/02 01:56:55 gilles Exp gilles $
|
||||
# $Id: paypal_functions,v 1.19 2012/04/17 12:05:32 gilles Exp gilles $
|
||||
|
||||
paypal_prerequisites() {
|
||||
perl -mMIME::Lite -e '' || echo 'sudo aptitude install libmime-lite-perl'
|
||||
|
@ -105,9 +105,9 @@ convert_utf8() {
|
|||
|
||||
|
||||
troncate_last_2_chars() {
|
||||
length=`expr length "$1"`
|
||||
length_2=`expr $length - 2`
|
||||
expr substr "$1" 1 $length_2
|
||||
length=`expr length "$1"`
|
||||
length_2=`expr $length - 2`
|
||||
expr substr "$1" 1 $length_2
|
||||
|
||||
}
|
||||
|
||||
|
@ -115,16 +115,17 @@ build_reply() {
|
|||
mkdir -p $tmpdir/msg_reply/
|
||||
test -z "`ls $tmpdir/msg_out/`" && echo no mail && return
|
||||
for f in $tmpdir/msg_out_utf8/*/*.txt; do
|
||||
echo "$f"
|
||||
#echo "$f"
|
||||
d=`dirname "$f"`
|
||||
bd=`basename "$d"`
|
||||
file_id=`troncate_last_2_chars $bd`
|
||||
d_reply="$tmpdir/msg_reply/$file_id"
|
||||
test -f "$d_reply/$file_id.txt" && continue
|
||||
test -s "$d_reply/$file_id.txt" && continue
|
||||
mkdir -p "$d_reply"
|
||||
echo building "$d_reply/$file_id.txt"
|
||||
echo paypal_build_reply "$f" "$tmpdir/msg_id/$file_id"
|
||||
paypal_build_reply "$f" "$tmpdir/msg_id/$file_id" > "$d_reply/$file_id.txt"
|
||||
test -s "$d_reply/$file_id.txt" || rm "$d_reply/$file_id.txt"
|
||||
done
|
||||
}
|
||||
|
||||
|
|
183
imapsync
183
imapsync
|
@ -20,7 +20,7 @@ Synchronise mailboxes between two imap servers.
|
|||
Good at IMAP migration. More than 44 different IMAP server softwares
|
||||
supported with success.
|
||||
|
||||
$Revision: 1.488 $
|
||||
$Revision: 1.498 $
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
|
@ -363,14 +363,10 @@ Success stories reported with the following 44 imap servers
|
|||
- Courier IMAP 1.5.1, 2.2.0, 2.1.1, 2.2.1, 3.0.8, 3.0.3, 4.1.1 (GPL)
|
||||
(http://www.courier-mta.org/)
|
||||
- Critical Path (7.0.020)
|
||||
- Cyrus IMAP 1.5, 1.6, 2.1, 2.1.15, 2.1.16, 2.1.18
|
||||
2.2.1, 2.2.2-BETA, 2.2.10, 2.2.12,
|
||||
v2.2.3-Invoca-RPM-2.2.3-8,
|
||||
2.3-alpha (OSI Approved),
|
||||
v2.2.12-Invoca-RPM-2.2.12-3.RHEL4.1,
|
||||
2.2.13,
|
||||
v2.3.1-Invoca-RPM-2.3.1-2.7.fc5,
|
||||
v2.3.7,
|
||||
- Cyrus IMAP 1.5, 1.6,
|
||||
2.1, 2.1.15, 2.1.16, 2.1.18
|
||||
2.2.1, 2.2.2-BETA, 2.2.3, 2.2.6, 2.2.10, 2.2.12, 2.2.13,
|
||||
2.3-alpha (OSI Approved), 2.3.1, 2.3.7, 2.3.16
|
||||
(http://asg.web.cmu.edu/cyrus/)
|
||||
- David Tobit V8 (proprietary Message system).
|
||||
- DBMail 1.2.1, 2.0.4, 2.0.9, 2.2rc1 (GPL) (http://www.dbmail.org/).
|
||||
|
@ -391,7 +387,7 @@ Success stories reported with the following 44 imap servers
|
|||
- Kerio 7.2.0 Patch 1 [host1] [host2]
|
||||
- MailEnable 4.23 [host1] [host2], 4.26 [host1][host2], 5 [host1]
|
||||
- MDaemon 7.0.1, 8.0.2, 8.1, 9.5.4 (Windows server 2003 R2 platform), 12 [host2],
|
||||
12.0.3 [host1]
|
||||
12.0.3 [host1], 12.5.5 [host1],
|
||||
- Mercury 4.1 (Windows server 2000 platform)
|
||||
- Microsoft Exchange Server 5.5, 6.0.6249.0[host1], 6.0.6487.0[host1],
|
||||
6.5.7638.1 [host2], 6.5 [host1], Exchange 2007 SP1 (with Update Rollup 2),
|
||||
|
@ -519,7 +515,7 @@ Entries for imapsync:
|
|||
|
||||
Feedback (good or bad) will often be welcome.
|
||||
|
||||
$Id: imapsync,v 1.488 2012/04/15 17:38:21 gilles Exp gilles $
|
||||
$Id: imapsync,v 1.498 2012/07/20 14:28:45 gilles Exp gilles $
|
||||
|
||||
=cut
|
||||
|
||||
|
@ -636,7 +632,7 @@ my(
|
|||
|
||||
# global variables initialisation
|
||||
|
||||
$rcs = '$Id: imapsync,v 1.488 2012/04/15 17:38:21 gilles Exp gilles $ ';
|
||||
$rcs = '$Id: imapsync,v 1.498 2012/07/20 14:28:45 gilles Exp gilles $ ';
|
||||
|
||||
$total_bytes_transferred = 0;
|
||||
$total_bytes_skipped = 0;
|
||||
|
@ -735,10 +731,10 @@ $split1 ||= 100;
|
|||
$split2 ||= 100;
|
||||
|
||||
$host1 || missing_option("--host1") ;
|
||||
$port1 ||= (defined $ssl1 and !defined $tls1) ? 993 : 143;
|
||||
$port1 ||= ( $ssl1 ) ? 993 : 143;
|
||||
|
||||
$host2 || missing_option("--host2") ;
|
||||
$port2 ||= (defined $ssl2 && !defined $tls2) ? 993 : 143;
|
||||
$port2 ||= ( $ssl2 ) ? 993 : 143;
|
||||
|
||||
$debugimap1 = $debugimap2 = 1 if ( $debugimap ) ;
|
||||
$debug = 1 if ( $debugimap1 or $debugimap2 ) ;
|
||||
|
@ -870,17 +866,21 @@ my %useheader ;
|
|||
print "Host1: imap server [$host1] port [$port1] user [$user1]\n";
|
||||
print "Host2: imap server [$host2] port [$port2] user [$user2]\n";
|
||||
|
||||
$password1 || $passfile1 || do {
|
||||
$password1 = ask_for_password($authuser1 || $user1, $host1);
|
||||
};
|
||||
$password1 || $passfile1 || 'PREAUTH' eq $authmech1 || do {
|
||||
$password1 = ask_for_password( $authuser1 || $user1, $host1 ) ;
|
||||
} ;
|
||||
|
||||
$password1 = (defined($passfile1)) ? firstline ($passfile1) : $password1;
|
||||
$password1 = ( defined( $passfile1 ) ) ? firstline ( $passfile1 ) : $password1 ;
|
||||
|
||||
$password2 || $passfile2 || do {
|
||||
$password2 = ask_for_password($authuser2 || $user2, $host2);
|
||||
};
|
||||
$password2 || $passfile2 || 'PREAUTH' eq $authmech2 || do {
|
||||
$password2 = ask_for_password( $authuser2 || $user2, $host2 ) ;
|
||||
} ;
|
||||
|
||||
$password2 = (defined($passfile2)) ? firstline ($passfile2) : $password2;
|
||||
$password2 = ( defined( $passfile2 ) ) ? firstline ( $passfile2 ) : $password2 ;
|
||||
|
||||
|
||||
my $dry_message = '' ;
|
||||
$dry_message = "\t(not really since --dry mode)" if $dry ;
|
||||
|
||||
if ( ! ( 1
|
||||
or ( $maxsize
|
||||
|
@ -918,9 +918,9 @@ $debug and print "Host2 Buffer I/O: ", $imap2->Buffer(), "\n";
|
|||
|
||||
|
||||
|
||||
die_clean() unless $imap1->IsAuthenticated();
|
||||
die_clean( 'Not authenticated on host1' ) unless $imap1->IsAuthenticated( ) ;
|
||||
print "Host1: state Authenticated\n";
|
||||
die_clean() unless $imap2->IsAuthenticated();
|
||||
die_clean( 'Not authenticated on host2' ) unless $imap2->IsAuthenticated( ) ;
|
||||
print "Host2: state Authenticated\n";
|
||||
|
||||
print "Host1 capability: ", join(" ", $imap1->capability_update()), "\n";
|
||||
|
@ -1080,6 +1080,9 @@ print "++++ Looping on each folder\n";
|
|||
|
||||
FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
|
||||
|
||||
last FOLDER if $imap1->IsUnconnected();
|
||||
last FOLDER if $imap2->IsUnconnected();
|
||||
|
||||
my $h2_fold = imap2_folder_name( $h1_fold ) ;
|
||||
#relogin1( ) if ( $relogin1 ) ;
|
||||
printf( "%-35s -> %-35s\n", "[$h1_fold]", "[$h2_fold]" ) ;
|
||||
|
@ -1107,7 +1110,7 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
|
|||
my $permanentflags2 = permanentflags( @select_results ) ;
|
||||
$debug and print "permanentflags: $permanentflags2\n" ;
|
||||
if ( $expunge or $expunge1 ){
|
||||
print "Expunging host1 $h1_fold\n" ;
|
||||
print "Expunging host1 $h1_fold $dry_message\n" ;
|
||||
unless($dry) { $imap1->expunge() } ;
|
||||
#print "Expunging host2 $h2_fold\n" ;
|
||||
#unless($dry) { $imap2->expunge() } ;
|
||||
|
@ -1121,6 +1124,9 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
|
|||
|
||||
next FOLDER if ($justfolders);
|
||||
|
||||
last FOLDER if $imap1->IsUnconnected();
|
||||
last FOLDER if $imap2->IsUnconnected();
|
||||
|
||||
my $h1_msgs_all_hash_ref = { } ;
|
||||
my @h1_msgs = select_msgs( $imap1, $h1_msgs_all_hash_ref );
|
||||
|
||||
|
@ -1141,6 +1147,9 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
|
|||
my $cache_dir = cache_folder( $cache_base, $h1_fold, $h2_fold );
|
||||
my ( $cache_1_2_ref, $cache_2_1_ref ) = ( {}, {} );
|
||||
|
||||
last FOLDER if $imap1->IsUnconnected();
|
||||
last FOLDER if $imap2->IsUnconnected();
|
||||
|
||||
if ( $usecache ) {
|
||||
print "cache directory: $cache_dir\n" ;
|
||||
mkpath( "$cache_dir" ) ;
|
||||
|
@ -1324,7 +1333,7 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
|
|||
$imap2->uidexpunge( \@h2_expunge ) if ! $dry ;
|
||||
}
|
||||
if ($expunge2){
|
||||
print "Expunging host2 folder $h2_fold\n" ;
|
||||
print "Expunging host2 folder $h2_fold $dry_message\n" ;
|
||||
$imap2->expunge( ) if ! $dry ;
|
||||
}
|
||||
}
|
||||
|
@ -1333,12 +1342,15 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
|
|||
$debug and print "Host2 uidnext: $h2_uidnext\n" ;
|
||||
$h2_uidguess = $h2_uidnext ;
|
||||
MESS: foreach my $m_id (@h1_hash_keys_sorted_by_uid) {
|
||||
|
||||
my $h1_size = $h1_hash{$m_id}{'s'};
|
||||
my $h1_msg = $h1_hash{$m_id}{'m'};
|
||||
my $h1_idate = $h1_hash{$m_id}{'D'};
|
||||
|
||||
unless (exists($h2_hash{$m_id})) {
|
||||
# copy
|
||||
last FOLDER if $imap1->IsUnconnected();
|
||||
last FOLDER if $imap2->IsUnconnected();
|
||||
copy_message( $h1_msg, $h1_fold, $h2_fold, $h1_fir_ref, $permanentflags2, $cache_dir ) ;
|
||||
last FOLDER if total_bytes_max_reached( ) ;
|
||||
next MESS;
|
||||
|
@ -1363,16 +1375,20 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
|
|||
$debug and print
|
||||
"Host1 size msg $h1_fold/$h1_msg = $h1_size <> $h2_size = Host2 $h2_fold/$h2_msg\n";
|
||||
if( $delete ) {
|
||||
print "Host1 msg $h1_fold/$h1_msg deleted\n";
|
||||
my $expunge_message = '' ;
|
||||
$expunge_message = "and expunged" if ( $expunge or $expunge1 ) ;
|
||||
print "Host1 msg $h1_fold/$h1_msg marked deleted $expunge_message $dry_message\n" ;
|
||||
unless( $dry ) {
|
||||
$imap1->delete_message( $h1_msg );
|
||||
$h1_nb_msg_deleted += 1;
|
||||
$imap1->expunge() if ( $expunge or $expunge1 );
|
||||
$imap1->delete_message( $h1_msg ) ;
|
||||
$h1_nb_msg_deleted += 1 ;
|
||||
$imap1->expunge() if ( $expunge or $expunge1 ) ;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
# END MESS: loop
|
||||
last FOLDER if $imap1->IsUnconnected();
|
||||
last FOLDER if $imap2->IsUnconnected();
|
||||
MESS_IN_CACHE: foreach my $h1_msg ( @h1_msgs_in_cache ) {
|
||||
my $h2_msg = $cache_1_2_ref->{ $h1_msg } ;
|
||||
$debugcache and print "cache messages update flags $h1_msg->$h2_msg\n";
|
||||
|
@ -1386,16 +1402,18 @@ FOLDER: foreach my $h1_fold (@h1_folders_wanted) {
|
|||
MESS_BY_UID: foreach my $h1_msg ( sort { $a <=> $b } keys %h1_msgs_copy_by_uid ) {
|
||||
#
|
||||
$debug and print "Copy by uid $h1_fold/$h1_msg\n" ;
|
||||
last FOLDER if $imap1->IsUnconnected();
|
||||
last FOLDER if $imap2->IsUnconnected();
|
||||
copy_message( $h1_msg, $h1_fold, $h2_fold, $h1_fir_ref, $permanentflags2, $cache_dir ) ;
|
||||
last FOLDER if total_bytes_max_reached( ) ;
|
||||
}
|
||||
|
||||
if ($expunge or $expunge1){
|
||||
print "Expunging host1 folder $h1_fold\n";
|
||||
print "Expunging host1 folder $h1_fold $dry_message\n";
|
||||
unless($dry) { $imap1->expunge() };
|
||||
}
|
||||
if ($expunge2){
|
||||
print "Expunging host2 folder $h2_fold\n";
|
||||
print "Expunging host2 folder $h2_fold $dry_message\n";
|
||||
unless($dry) { $imap2->expunge() };
|
||||
}
|
||||
|
||||
|
@ -1635,7 +1653,10 @@ sub myconnect {
|
|||
$self->Banner($banner);
|
||||
$self->RawSocket2($sock);
|
||||
$self->State(Connected);
|
||||
|
||||
if ($banner =~ /\* PREAUTH/)
|
||||
{
|
||||
$self->State(Authenticated);
|
||||
}
|
||||
if ($self->Tls) {
|
||||
starttls($self);
|
||||
$self->Starttls( 1 ) ;
|
||||
|
@ -1663,7 +1684,7 @@ sub starttls {
|
|||
unless ($self->has_capability("STARTTLS")) {
|
||||
die_clean( "No STARTTLS capability" );
|
||||
}
|
||||
print $socket, "\n";
|
||||
|
||||
print $socket "z00 STARTTLS\015\012";
|
||||
CORE::select( undef, undef, undef, 0.025 );
|
||||
my $txt = $socket->getline();
|
||||
|
@ -1790,6 +1811,15 @@ sub login_imap {
|
|||
|
||||
print "Banner: ", server_banner($imap);
|
||||
|
||||
if ( $authmech eq 'PREAUTH' ) {
|
||||
if ( $imap->IsAuthenticated( ) ) {
|
||||
$imap->Socket ;
|
||||
printf("Info: Assuming PREAUTH for host %s\n", $imap->Server ) ;
|
||||
}else{
|
||||
die_clean( "Failure: error login on [$host] with user [$user] auth [PREAUTH]" ) ;
|
||||
}
|
||||
}
|
||||
|
||||
if ($imap->has_capability("AUTH=$authmech")
|
||||
or $imap->has_capability($authmech)
|
||||
) {
|
||||
|
@ -1808,7 +1838,7 @@ sub login_imap {
|
|||
if ($proxyauth) {
|
||||
$imap->Authmechanism("");
|
||||
} else {
|
||||
$imap->Authmechanism($authmech) unless ($authmech eq 'LOGIN');
|
||||
$imap->Authmechanism( $authmech ) unless ( $authmech eq 'LOGIN' or $authmech eq 'PREAUTH' ) ;
|
||||
}
|
||||
|
||||
$imap->Authcallback(\&plainauth) if $authmech eq "PLAIN";
|
||||
|
@ -1826,17 +1856,20 @@ sub login_imap {
|
|||
$imap->Password($password);
|
||||
}
|
||||
|
||||
unless ($imap->login()) {
|
||||
my $info = "Failure: error login [$host] with user [$user] auth";
|
||||
my $einfo = $imap->LastError || @{$imap->History}[-1];
|
||||
chomp($einfo);
|
||||
my $error = "$info [$authmech]: $einfo\n";
|
||||
print $error; # note: duplicating error on stdout/stderr
|
||||
die_clean($error) if ($authmech eq 'LOGIN' or $imap->IsUnconnected() or $authuser);
|
||||
print "Info: trying LOGIN Auth mechanism on [$host] with user [$user]\n";
|
||||
$imap->Authmechanism("");
|
||||
unless ( $authmech eq 'PREAUTH' or $imap->login( ) ) {
|
||||
my $info = "Failure: error login on [$host] with user [$user] auth" ;
|
||||
my $einfo = $imap->LastError || @{$imap->History}[-1] ;
|
||||
chomp( $einfo ) ;
|
||||
my $error = "$info [$authmech]: $einfo\n" ;
|
||||
if ( $authmech eq 'LOGIN' or $imap->IsUnconnected( ) or $authuser ) {
|
||||
die_clean( $error ) ;
|
||||
}else{
|
||||
print $error ;
|
||||
}
|
||||
print "Info: trying LOGIN Auth mechanism on [$host] with user [$user]\n" ;
|
||||
$imap->Authmechanism("") ;
|
||||
$imap->login() or
|
||||
die_clean("$info [LOGIN]: ", $imap->LastError, "\n");
|
||||
die_clean("$info [LOGIN]: ", $imap->LastError, "\n") ;
|
||||
}
|
||||
$proxyauth && $imap->proxyauth($user);
|
||||
$split and $imap->Split( $split ) ;
|
||||
|
@ -1868,8 +1901,8 @@ sub banner_imapsync {
|
|||
my @argv_copy = @_;
|
||||
my $banner_imapsync = join("",
|
||||
'$RCSfile: imapsync,v $ ',
|
||||
'$Revision: 1.488 $ ',
|
||||
'$Date: 2012/04/15 17:38:21 $ ',
|
||||
'$Revision: 1.498 $ ',
|
||||
'$Date: 2012/07/20 14:28:45 $ ',
|
||||
"\n",localhost_info(), "\n",
|
||||
"Command line used:\n",
|
||||
"$0 ", command_line_nopassword(@argv_copy), "\n",
|
||||
|
@ -2746,7 +2779,7 @@ sub copy_message {
|
|||
$h1_flags =~ s@\\Recent\s?@@gi;
|
||||
$h1_flags = flags_regex($h1_flags) if @regexflag;
|
||||
$h1_flags = flagsCase( $h1_flags ) if $flagsCase ;
|
||||
$h1_flags = flags_filter($h1_flags, $permanentflags2) if ($permanentflags2);
|
||||
$h1_flags = flags_filter( $h1_flags, $permanentflags2) if ( $permanentflags2 and $filterflags ) ;
|
||||
|
||||
my $new_id;
|
||||
$debug and print "msg $h1_fold/$h1_msg date [$h1_date] flags [$h1_flags] size [$h1_size]\n";
|
||||
|
@ -3309,6 +3342,23 @@ sub regexmess {
|
|||
return($string);
|
||||
}
|
||||
|
||||
sub bytes_display_string {
|
||||
my ($bytes) = @_;
|
||||
|
||||
if ($bytes < (1024 * 1024)) {
|
||||
return sprintf("%.1f KiB", $bytes / 1024);
|
||||
} elsif ($bytes < (1024 * 1024 * 1024)) {
|
||||
return sprintf("%.1f MiB", $bytes / (1024 * 1024));
|
||||
} elsif ($bytes < (1024 * 1024 * 1024 * 1024)) {
|
||||
return sprintf("%.1f GiB", $bytes / (1024 * 1024 * 1024));
|
||||
} elsif ($bytes < (1024 * 1024 * 1024 * 1024 * 1024)) {
|
||||
return sprintf("%.1f TiB", $bytes / (1024 * 1024 * 1024 * 1024));
|
||||
} else {
|
||||
return sprintf("%.1f PiB", $bytes / (1024 * 1024 * 1024 * 1024 * 1024));
|
||||
}
|
||||
# if you have exabytes (EiB) of email to transfer, you have too much email
|
||||
}
|
||||
|
||||
sub stats {
|
||||
$timeend = time();
|
||||
$timediff = $timeend - $timestart;
|
||||
|
@ -3337,17 +3387,27 @@ sub stats {
|
|||
print "Messages void (noheader) on host2 : $h2_nb_msg_noheader\n";
|
||||
print "Messages deleted on host1 : $h1_nb_msg_deleted\n";
|
||||
print "Messages deleted on host2 : $h2_nb_msg_deleted\n";
|
||||
print "Total bytes transferred : $total_bytes_transferred\n";
|
||||
print "Total bytes duplicate host1 : $h1_total_bytes_duplicate\n";
|
||||
print "Total bytes duplicate host2 : $h2_total_bytes_duplicate\n";
|
||||
print "Total bytes skipped : $total_bytes_skipped\n";
|
||||
print "Total bytes error : $total_bytes_error\n";
|
||||
printf( "Total bytes transferred : %d (%s)\n",
|
||||
$total_bytes_transferred,
|
||||
bytes_display_string($total_bytes_transferred));
|
||||
printf( "Total bytes duplicate host1 : %d (%s)\n",
|
||||
$h1_total_bytes_duplicate,
|
||||
bytes_display_string($h1_total_bytes_duplicate));
|
||||
printf( "Total bytes duplicate host2 : %d (%s)\n",
|
||||
$h2_total_bytes_duplicate,
|
||||
bytes_display_string($h2_total_bytes_duplicate));
|
||||
printf( "Total bytes skipped : %d (%s)\n",
|
||||
$total_bytes_skipped,
|
||||
bytes_display_string($total_bytes_skipped));
|
||||
printf( "Total bytes error : %d (%s)\n",
|
||||
$total_bytes_error,
|
||||
bytes_display_string($total_bytes_error));
|
||||
$timediff ||= 1; # No division per 0
|
||||
printf ("Message rate : %.1f messages/s\n", $nb_msg_transferred / $timediff);
|
||||
printf ("Average bandwidth rate : %.1f KiB/s\n", $total_bytes_transferred / 1024 / $timediff);
|
||||
print "Reconnections to host1 : $host1_reconnect_count\n";
|
||||
print "Reconnections to host2 : $host2_reconnect_count\n";
|
||||
printf ("Memory consumption : %.1f MB\n", $memory_consumption / 1024 / 1024);
|
||||
printf ("Memory consumption : %.1f MiB\n", $memory_consumption / 1024 / 1024);
|
||||
print "Biggest message : $max_msg_size_in_bytes bytes\n";
|
||||
# print "Memory/biggest message ratio : $memory_ratio\n";
|
||||
print "Detected $nb_errors errors\n\n";
|
||||
|
@ -3593,7 +3653,7 @@ sub parse_header_msg {
|
|||
my $idate = $s_fir->{$m_uid}->{"INTERNALDATE"};
|
||||
$size = length($headstr) unless ($size);
|
||||
my $m_md5 = md5_base64($headstr);
|
||||
$debug and print "$s uid $m_uid sig $m_md5 size $size\n";
|
||||
$debug and print "$s uid $m_uid sig $m_md5 size $size idate $idate\n";
|
||||
my $key;
|
||||
if ($skipsize) {
|
||||
$key = "$m_md5";
|
||||
|
@ -3674,7 +3734,7 @@ sub check_last_release {
|
|||
}
|
||||
|
||||
sub imapsync_version {
|
||||
my $rcs = '$Id: imapsync,v 1.488 2012/04/15 17:38:21 gilles Exp gilles $ ';
|
||||
my $rcs = '$Id: imapsync,v 1.498 2012/07/20 14:28:45 gilles Exp gilles $ ';
|
||||
$rcs =~ m/,v (\d+\.\d+)/;
|
||||
my $VERSION = ($1) ? $1: "UNKNOWN";
|
||||
return($VERSION);
|
||||
|
@ -4270,12 +4330,13 @@ sub delete_folders_in_2_not_in_1 {
|
|||
print "Not deleting $folder because of --delete2foldersbutnot $delete2foldersbutnot\n";
|
||||
next;
|
||||
}
|
||||
my $res = $dry; # always success in dry mode!
|
||||
$res = $imap2->delete($folder) if ( ! $dry ) ;
|
||||
if ($res) {
|
||||
print "Delete $folder", "$dry_message", "\n";
|
||||
my $res = $dry ; # always success in dry mode!
|
||||
$imap2->unsubscribe( $folder ) if ( ! $dry ) ;
|
||||
$res = $imap2->delete( $folder ) if ( ! $dry ) ;
|
||||
if ( $res ) {
|
||||
print "Delete $folder", "$dry_message", "\n" ;
|
||||
}else{
|
||||
print "Delete $folder failure", "\n";
|
||||
print "Delete $folder failure", "\n" ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
127
index.shtml
127
index.shtml
|
@ -5,7 +5,7 @@
|
|||
<title>Imapsync: an IMAP migration tool ( release <!--#exec cmd="cat VERSION"--> )</title>
|
||||
<meta name="generator" content="Bluefish 1.0.7"/>
|
||||
<meta name="author" content="Gilles LAMIRAL"/>
|
||||
<meta name="date" content="2012-04-15T21:16:36+0200"/>
|
||||
<meta name="date" content="2012-07-20T16:47:33+0200"/>
|
||||
<meta name="copyright" content="None"/>
|
||||
<meta name="keywords" content="imap, transfert, migration"/>
|
||||
<meta name="description" content="imap migration tool"/>
|
||||
|
@ -63,11 +63,12 @@ for <b>2 ways synchronizations</b>.
|
|||
<p>Alternatives to imapsync are listed in the <a href="#similar"><b>Similar softwares</b></a> section.
|
||||
</p>
|
||||
|
||||
<h2><a id="NUMBERS"></a>Some numbers for 2011</h2>
|
||||
<h2><a id="NUMBERS"></a>Some numbers for 2011 and 2012</h2>
|
||||
|
||||
<ul>
|
||||
<li>Number of <b>imapsync users</b> per month: between <b>2 and 3 thousands </b>users</li>
|
||||
<li>Number of <b>imapsync transfers</b> between <b>3 and 25 millions mailboxes </b>transfers per month, total is 93 millions in 2011</li>
|
||||
<li>Number of <b>imapsync transfers</b> between <b>3 and 25 millions mailboxes </b>transfers per month,
|
||||
total is 93 millions for 2011</li>
|
||||
<li>Percentage between <b>operating systems</b> users running imapsync:
|
||||
<ul>
|
||||
<li><b>Linux: 65 %</b></li>
|
||||
|
@ -93,15 +94,29 @@ for <b>2 ways synchronizations</b>.
|
|||
|
||||
<p>New features or bugfixes since previous releases:</p>
|
||||
|
||||
<ul>
|
||||
<li><b>1.498</b></li>
|
||||
<li><b>Usability</b>: Use KiB MiB GiB etc in result summary. Patch from Mark Atwood.</li>
|
||||
<li><b>Enhancement</b>: Added --authmech PREAUTH capabiliy. (Patch from David Abrahams).</li>
|
||||
<li><b>Bug fix</b>: Unsubsribe folder before deleting it (deleting alone could bug sometimes on some servers).</li>
|
||||
<li><b>Bug fix</b>: Added several connection ckecks like old good imapsync-1.181 to imapsync-1.398 (Phil idea)</li>
|
||||
<li><b>Bug fix</b>: Default port 993 when --ssl and --tls are set together (was 143).</li>
|
||||
<li><b>Bug fix</b>: Don't filter flag when --nofilterflags is used during the message copy.</li>
|
||||
<li><b>Usability</b>: Print dry mode when expunging in dry mode.</li>
|
||||
<li><b>Usability</b>: Added value of internal date in --debug mode.</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li><b>1.488</b></li>
|
||||
<li><b>Bug fix</b>: Reverse half of the last patch about --delete2foldersonly since it destroyed a good feature permitting imapsync variables like ${h2_sep}
|
||||
in --delete2foldersonly, the good escaping has to be done in the parameter value:
|
||||
<ul>
|
||||
<li>--delete2foldersonly --delete2foldersbutnot need good escaping in call, not in code. Example: --delete2foldersbutnot "/\[Gmail\]/"</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Bug fix: removed several useless Perl warnings in different contexts.</li>
|
||||
<li><b>Bug fix</b>: Reverse half of the last patch about --delete2foldersonly since it destroyed
|
||||
a good feature permitting imapsync variables like ${h2_sep} in --delete2foldersonly,
|
||||
the good escaping has to be done in the parameter value.
|
||||
Example: --delete2foldersbutnot "/\[Gmail\]/"</li>
|
||||
|
||||
<li><b>Win32 fix</b>: updated Perl modules to latest, it fixes a compile error that happened sometimes on XP.
|
||||
imapsync.exe is smaller now.</li>
|
||||
|
||||
<li>Update: tested with Perl Module Mail-IMAPClient-3.31</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
|
@ -150,8 +165,6 @@ Thanks to Phil Pearl for this advice.</li>
|
|||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
<!--
|
||||
<p>The next imapsync release should see:</p>
|
||||
<ul>
|
||||
|
@ -196,18 +209,18 @@ See <b><a href="./file.txt">file.txt</a></b> example for <b>batch massive migrat
|
|||
</p>
|
||||
|
||||
<p>
|
||||
The Perl <b>imapsync</b> source code will run anywhere a <b>Perl interpreter can run</b>: any Unix, Linux, Windows, or Mac OS operating system.
|
||||
The Perl <b>imapsync</b> source code will run anywhere a <b>Perl interpreter can run</b>:
|
||||
any Unix, Linux, Windows, or Mac OS operating system.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>+ One year</b> of imapsync <b>updates</b> without extra payment.<br/>
|
||||
<b>+ 30 days money-back guarantee!</b><br/>
|
||||
<b>+ Limited support</b>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Payment by Paypal account and credit card accepted. <br/>
|
||||
Price <b>42 EUR</b> is equal to around <b>54 USD</b>, no problem to pay in USD (or any currency) via paypal:
|
||||
Price <b>42 EUR</b> is equal to around <b>50 USD</b>, no problem to pay in USD (or any currency) via paypal:
|
||||
</p>
|
||||
|
||||
|
||||
|
@ -226,34 +239,12 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>
|
|||
</p>
|
||||
</form>
|
||||
|
||||
<p>You will receive a download link <b>just after</b> the payment.
|
||||
<p>You will receive a <b>download link just after</b> the payment.<br/>
|
||||
You will also receive a gpg signed <b>invoice</b> within <b>a few days by email</b>.<br/>
|
||||
Please give a <b>postal address where the invoice will be needed</b> (your company for example),
|
||||
since reedit is not easy (and forbidden by law).
|
||||
</p>
|
||||
|
||||
<h2><a id="buy_support"></a>Buy full professional support for imapsync</h2>
|
||||
|
||||
<p>You will be able to expose your issues by email or phone and we'll work together until complete success.
|
||||
</p>
|
||||
|
||||
<p>For <b>90 EUR</b> buy imapsync <b>full support</b> done by the imapsync designer/developper.
|
||||
</p>
|
||||
<p>
|
||||
Payment by Paypal account and credit card accepted. <br/>
|
||||
90 EUR is equal to around <b>120 USD</b>, no problem to pay in USD (or any currency) with paypal:
|
||||
</p>
|
||||
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
<p>
|
||||
<input type="hidden" name="cmd" value="_s-xclick" />
|
||||
<input type="hidden" name="hosted_button_id" value="E25UVGFNDJWW8" />
|
||||
<input type="image"
|
||||
src="https://www.paypalobjects.com/WEBSCR-640-20110401-1/en_US/i/btn/btn_buynowCC_LG.gif"
|
||||
name="submit"
|
||||
alt="PayPal - The safer, easier way to pay online!" />
|
||||
<img alt="" src="https://www.paypalobjects.com/WEBSCR-640-20110401-1/fr_FR/i/scr/pixel.gif" width="1" height="1" />
|
||||
<input name="return" type="hidden" value="http://imapsync.lamiral.info/paypal_return_support.shtml?utm_nooverride=1" />
|
||||
</p>
|
||||
</form>
|
||||
|
||||
|
||||
<h2><a id="buy_exe"></a>Buy standalone imapsync.exe for win32</h2>
|
||||
|
||||
|
@ -266,12 +257,11 @@ buying the latest win32 <b>standalone imapsync.exe</b> for <b>42 EUR</b>
|
|||
<p>
|
||||
<b>+ One year</b> of imapsync <b>updates</b> without extra payment.<br/>
|
||||
<b>+ 30 days money-back guarantee!</b><br/>
|
||||
<b>+ Limited support</b>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Payment by Paypal account and credit card accepted. <br/>
|
||||
Price <b>42 EUR</b> is equal to around <b>54 USD</b>, no problem to pay in USD (or any currency) via paypal:
|
||||
Price <b>42 EUR</b> is equal to around <b>50 USD</b>, no problem to pay in USD (or any currency) via paypal:
|
||||
</p>
|
||||
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
|
@ -290,6 +280,9 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>
|
|||
</form>
|
||||
|
||||
<p>You will receive a download link <b>just after</b> the payment.<br/>
|
||||
You will also receive a gpg signed <b>invoice</b> within <b>a few days by email</b>.<br/>
|
||||
Please give a <b>postal address where the invoice will be needed</b> (your company for example),
|
||||
since reedit is not easy (and forbidden by law).
|
||||
</p>
|
||||
|
||||
|
||||
|
@ -299,6 +292,35 @@ thanks to Strawberry Perl 5.12 and Par::Packer module.<br/>
|
|||
The build system for imapsync.exe is XP Pro SP2 on a Intel Celeron 400 MHz 256 Mo RAM. </p>
|
||||
-->
|
||||
|
||||
<h2><a id="buy_support"></a>Buy full professional support for imapsync</h2>
|
||||
|
||||
<p>You will be able to expose your issues by email or phone and we'll work together until complete success.
|
||||
</p>
|
||||
|
||||
<p>For <b>90 EUR</b> buy imapsync <b>full support</b> done by the imapsync designer/developper.
|
||||
</p>
|
||||
<p>
|
||||
Payment by Paypal account and credit card accepted. <br/>
|
||||
90 EUR is equal to around <b>110 USD</b>, no problem to pay in USD (or any currency) with paypal:
|
||||
</p>
|
||||
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
<p>
|
||||
<input type="hidden" name="cmd" value="_s-xclick" />
|
||||
<input type="hidden" name="hosted_button_id" value="E25UVGFNDJWW8" />
|
||||
<input type="image"
|
||||
src="https://www.paypalobjects.com/WEBSCR-640-20110401-1/en_US/i/btn/btn_buynowCC_LG.gif"
|
||||
name="submit"
|
||||
alt="PayPal - The safer, easier way to pay online!" />
|
||||
<img alt="" src="https://www.paypalobjects.com/WEBSCR-640-20110401-1/fr_FR/i/scr/pixel.gif" width="1" height="1" />
|
||||
<input name="return" type="hidden" value="http://imapsync.lamiral.info/paypal_return_support.shtml?utm_nooverride=1" />
|
||||
</p>
|
||||
</form>
|
||||
|
||||
<p>You will also receive a gpg signed <b>invoice</b> within <b>a few days by email</b>.<br/>
|
||||
Please give a <b>postal address where the invoice will be needed</b> (your company for example),
|
||||
since reedit is not easy (and forbidden by law).
|
||||
</p>
|
||||
|
||||
<h2>Documentation</h2>
|
||||
|
||||
|
@ -399,15 +421,10 @@ Don't hesitate to have a try, I will help you and make efforts to switch them to
|
|||
<li>Courier IMAP 1.5.1, 2.2.0, 2.1.1, 2.2.1, 3.0.8, 3.0.3, 4.1.1 (GPL)
|
||||
(http://www.courier-mta.org/)</li>
|
||||
<li>Critical Path (7.0.020)</li>
|
||||
<li>Cyrus IMAP 1.5, 1.6, 2.1, 2.1.15, 2.1.16, 2.1.18
|
||||
2.2.1, 2.2.2-BETA, 2.2.10, 2.2.12,
|
||||
v2.2.3-Invoca-RPM-2.2.3-8,
|
||||
2.3-alpha (OSI Approved),
|
||||
v2.2.12-Invoca-RPM-2.2.12-3.RHEL4.1,
|
||||
2.2.13,
|
||||
v2.3.1-Invoca-RPM-2.3.1-2.7.fc5,
|
||||
v2.3.1-Invoca-RPM-2.3.1-2.8.fc5 [host1],
|
||||
v2.3.7,
|
||||
<li>Cyrus IMAP 1.5, 1.6,
|
||||
2.1, 2.1.15, 2.1.16, 2.1.18
|
||||
2.2.1, 2.2.2-BETA, 2.2.3, 2.2.6, 2.2.10, 2.2.12, 2.2.13,
|
||||
2.3-alpha (OSI Approved), 2.3.1, 2.3.7, 2.3.16
|
||||
(http://asg.web.cmu.edu/cyrus/)
|
||||
</li>
|
||||
<li>David Tobit V8.</li>
|
||||
|
@ -428,7 +445,7 @@ Don't hesitate to have a try, I will help you and make efforts to switch them to
|
|||
<li>IMail 7.15 (Ipswitch/Win2003), 8.12, 11.03 [host1]</li>
|
||||
<li>Kerio 7.2.0P1 [host1]</li>
|
||||
<li><b>MailEnable</b> 4.23 [host1][host2], 4.26 [host1][host2], 5 [host1]</li>
|
||||
<li>MDaemon 7.0.1, 8.0.2, 8.1, 9.5.4 (Windows server 2003 R2 platform), 12 [host2], 12.0.3 [host1]</li>
|
||||
<li>MDaemon 7.0.1, 8.0.2, 8.1, 9.5.4 (Windows server 2003 R2 platform), 12 [host2], 12.0.3 [host1], 12.5.5 [host1]</li>
|
||||
<li>Mercury 4.1 (Windows server 2000 platform)</li>
|
||||
<li><b>Microsoft Exchange Server</b> 5.5, 6.0.6249.0[host1], 6.0.6487.0[host1],
|
||||
6.5.7638.1 [host2], 6.5 [host1], Exchange 2007 SP1 (with Update Rollup 2),
|
||||
|
@ -492,8 +509,8 @@ Prices are given par mailbox and may be outdated (december 2011).</p>
|
|||
<li> Mailbox Mover 7 USD: <a href="https://mailboxmover.com/">https://mailboxmover.com/</a></li>
|
||||
<li> Migrationwiz 10 USD: <a href="http://www.migrationwiz.com/">http://www.migrationwiz.com/</a></li>
|
||||
<li> Rackspace migration 10 USD: <a href="http://www.rackspace.com/apps/email_hosting/migrations/">http://www.rackspace.com/apps/email_hosting/migrations/</a></li>
|
||||
<li> Audriga Gmbh 9.99 EUR: <a href="https://www.email-umzug.de/en.html">https://www.email-umzug.de/</a></li>
|
||||
<li> Yippiemove 15 USD: <a href="http://www.yippiemove.com">http://www.yippiemove.com/</a></li>
|
||||
<li> Audriga Gmbh 14.99 EUR : <a href="https://www.email-umzug.de/en.html">https://www.email-umzug.de/</a></li>
|
||||
<li> Trueswitch 29.5 USD: <a href="http://www.trueswitch.com">http://www.trueswitch.com</a></li>
|
||||
</ul>
|
||||
|
||||
|
@ -523,7 +540,7 @@ alt="Viewable With Any Browser" />
|
|||
<!--#config timefmt="%D" -->
|
||||
<!--#config timefmt="%A %B %d, %Y" -->
|
||||
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
|
||||
($Id: index.shtml,v 1.117 2012/04/15 19:16:51 gilles Exp gilles $)
|
||||
($Id: index.shtml,v 1.122 2012/07/20 15:24:40 gilles Exp gilles $)
|
||||
</p>
|
||||
|
||||
</body>
|
||||
|
|
5543
patches/imapsync.dave
Normal file
5543
patches/imapsync.dave
Normal file
File diff suppressed because it is too large
Load diff
|
@ -36,7 +36,7 @@ border:0px;
|
|||
<h1>imapsync donation</h1>
|
||||
|
||||
<p>Help the author to maintain imapsync:<br/>
|
||||
(<b>1 EUR ~ 1.3 USD</b> on 02/2012)
|
||||
(<b>1 EUR ~ 1.3 USD</b> on 06/2012)
|
||||
</p>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
<p>
|
||||
|
@ -65,7 +65,7 @@ border:0px;
|
|||
<!--#config timefmt="%D" -->
|
||||
<!--#config timefmt="%A %B %d, %Y" -->
|
||||
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
|
||||
($Id: paypal.shtml,v 1.6 2012/02/05 01:08:05 gilles Exp gilles $)
|
||||
($Id: paypal.shtml,v 1.7 2012/06/10 09:06:46 gilles Exp gilles $)
|
||||
</p>
|
||||
|
||||
</body>
|
||||
|
|
99
tests.sh
99
tests.sh
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $Id: tests.sh,v 1.194 2012/04/15 19:17:33 gilles Exp gilles $
|
||||
# $Id: tests.sh,v 1.195 2012/07/18 11:10:00 gilles Exp gilles $
|
||||
|
||||
# Example 1:
|
||||
# CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' sh -x tests.sh
|
||||
|
@ -217,6 +217,18 @@ ll_ask_password() {
|
|||
}
|
||||
|
||||
|
||||
ll_authmech_PREAUTH() {
|
||||
# No PREAUTH on my box
|
||||
! $CMD_PERL ./imapsync \
|
||||
--host1 $HOST1 --user1 tata --authmech1 PREAUTH \
|
||||
--host2 $HOST2 --user2 titi \
|
||||
--passfile2 ../../var/pass/secret.titi \
|
||||
--justlogin
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ll_timeout() {
|
||||
$CMD_PERL ./imapsync \
|
||||
|
@ -1021,12 +1033,6 @@ ll_include()
|
|||
|
||||
ll_exclude()
|
||||
{
|
||||
if can_send; then
|
||||
#echo3 Here is plume
|
||||
sendtestmessage
|
||||
else
|
||||
:
|
||||
fi
|
||||
$CMD_PERL ./imapsync \
|
||||
--host1 $HOST1 --user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
|
@ -1035,6 +1041,16 @@ ll_exclude()
|
|||
--exclude '^INBOX.yop' --justfolders --nofoldersizes
|
||||
}
|
||||
|
||||
ll_exclude_2()
|
||||
{
|
||||
$CMD_PERL ./imapsync \
|
||||
--host1 $HOST1 --user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--host2 $HOST2 --user2 titi \
|
||||
--passfile2 ../../var/pass/secret.titi \
|
||||
--exclude '^INBOX.yop$' --justfolders --nofoldersizes
|
||||
}
|
||||
|
||||
ll_exclude_INBOX()
|
||||
{
|
||||
$CMD_PERL ./imapsync \
|
||||
|
@ -1432,6 +1448,15 @@ ll_ssl_justlogin() {
|
|||
--justlogin
|
||||
}
|
||||
|
||||
ll_ssl_tls_justlogin() {
|
||||
$CMD_PERL ./imapsync \
|
||||
--host1 $HOST1 --user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--host2 $HOST2 --user2 titi \
|
||||
--passfile2 ../../var/pass/secret.titi \
|
||||
--tls1 --ssl2 --tls2 \
|
||||
--justlogin --debug
|
||||
}
|
||||
|
||||
ll_ssl() {
|
||||
if can_send; then
|
||||
|
@ -1905,6 +1930,7 @@ gmail_gmail() {
|
|||
|
||||
}
|
||||
|
||||
|
||||
gmail_gmail2() {
|
||||
! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \
|
||||
--host1 imap.gmail.com \
|
||||
|
@ -1917,9 +1943,38 @@ gmail_gmail2() {
|
|||
--passfile2 ../../var/pass/secret.imapsync.gl_gmail \
|
||||
--folder INBOX
|
||||
#--dry # --debug --debugimap # --authmech1 LOGIN
|
||||
}
|
||||
|
||||
gmail_gmail3_delete() {
|
||||
! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \
|
||||
--host1 imap.gmail.com \
|
||||
--ssl1 \
|
||||
--user1 imapsync.gl@gmail.com \
|
||||
--passfile1 ../../var/pass/secret.imapsync.gl_gmail \
|
||||
--host2 imap.gmail.com \
|
||||
--ssl2 \
|
||||
--user2 gilles.lamiral@gmail.com \
|
||||
--passfile2 ../../var/pass/secret.gilles_gmail \
|
||||
--folder '[Gmail]/All Mail' --delete
|
||||
# '[Gmail]/All Mail' is not expunge by default!
|
||||
|
||||
}
|
||||
|
||||
gmail_gmail4_tls() {
|
||||
! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \
|
||||
--host1 imap.gmail.com \
|
||||
--ssl1 \
|
||||
--user1 gilles.lamiral@gmail.com \
|
||||
--passfile1 ../../var/pass/secret.gilles_gmail \
|
||||
--host2 imap.gmail.com \
|
||||
--ssl2 --tls2 --port2 993 \
|
||||
--user2 imapsync.gl@gmail.com \
|
||||
--passfile2 ../../var/pass/secret.imapsync.gl_gmail \
|
||||
--folder INBOX
|
||||
#--dry # --debug --debugimap # --authmech1 LOGIN
|
||||
}
|
||||
|
||||
|
||||
yahoo_xxxx_login() {
|
||||
! ping -c1 imap.mail.yahoo.com || $CMD_PERL ./imapsync \
|
||||
--host1 imap.mail.yahoo.com \
|
||||
|
@ -2212,6 +2267,35 @@ ll_nofastio()
|
|||
# specific tests
|
||||
##########################
|
||||
|
||||
|
||||
exchange_hoch_1() {
|
||||
$CMD_PERL ./imapsync \
|
||||
--host1 $HOST1 --user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--host2 ex.fhstp.ac.at --ssl2 --user2 nscdummy@fhstp.local \
|
||||
--passfile2 ../../var/pass/secret.fhstp \
|
||||
--folder INBOX.oneemail --debug --delete2
|
||||
}
|
||||
|
||||
exchange_hoch_2() {
|
||||
$CMD_PERL ./imapsync \
|
||||
--host1 $HOST1 --user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--host2 ex.fhstp.ac.at --ssl2 --user2 nscdummy@fhstp.local \
|
||||
--passfile2 ../../var/pass/secret.fhstp \
|
||||
--folder INBOX.oneemail --dry --debugflags --debug --nofilterflags
|
||||
}
|
||||
|
||||
exchange_hoch_3() {
|
||||
$CMD_PERL ./imapsync \
|
||||
--host1 $HOST1 --user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--host2 ex.fhstp.ac.at --ssl2 --user2 nscdummy2@fhstp.local \
|
||||
--passfile2 ../../var/pass/secret.fhstp \
|
||||
--folder INBOX.few_emails --debugflags --debug --regexflag 's#\$Forwarded#\$MDNSent#'
|
||||
}
|
||||
|
||||
|
||||
dbmail_uid() {
|
||||
# --useuid alone does not work on dbmaikl server 2.2.17 ready to run
|
||||
# because uids are += 2 and uidnext is in fact uidnext + 1
|
||||
|
@ -2805,6 +2889,7 @@ ll_useuid
|
|||
ll_useuid_nousecache
|
||||
ll_noheader_force
|
||||
ll_noheader
|
||||
ll_authmech_PREAUTH
|
||||
'
|
||||
|
||||
other_tests='
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue