This commit is contained in:
Nick Bebout 2014-05-29 20:56:21 -05:00
parent 428581af1e
commit 459f6a81cb
151 changed files with 10053 additions and 1910 deletions

View file

@ -1,17 +1,58 @@
RCS file: RCS/imapsync,v RCS file: RCS/imapsync,v
Working file: imapsync Working file: imapsync
head: 1.584 head: 1.592
branch: branch:
locks: strict locks: strict
gilles: 1.584 gilles: 1.592
access list: access list:
symbolic names: symbolic names:
keyword substitution: kv keyword substitution: kv
total revisions: 584; selected revisions: 584 total revisions: 592; selected revisions: 592
description: description:
---------------------------- ----------------------------
revision 1.584 locked by: gilles; revision 1.592 locked by: gilles;
date: 2014/05/22 10:03:17; author: gilles; state: Exp; lines: +23 -12
Bugfix. Make TLS works with last IO::Socket::SSL default value (SSL_verify_mode => 'SSL_VERIFY_NONE') in tls.
----------------------------
revision 1.591
date: 2014/05/22 01:32:52; author: gilles; state: Exp; lines: +30 -19
Bugfix. IO::Tee and Open3 in backstic() were incompatible.
FailedBugFix. Tried to fix Tls issue "ERROR: Unable to start TLS: SSL connect attempt failed with unknown error error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at c:/strawberry/perl/site/lib/Mail/IMAPClient.pm line 455." No success.
----------------------------
revision 1.590
date: 2014/05/20 23:07:14; author: gilles; state: Exp; lines: +12 -6
Added option --disarmreadreceipts to fix resending read receipts with Exchange as host2.
----------------------------
revision 1.589
date: 2014/05/20 21:35:16; author: gilles; state: Exp; lines: +93 -37
Added logging by default in subdirectory LOG_imapsync/.
Added option --log. --log is on by default. --nolog to disable logging.
Added option --logfile. Default is like LOG_imapsync/YYYY_MM_DD_HH_MM_SS_user2.txt
where YYYY_MM_DD_HH_MM_SS is the current date and time like 2014_05_20_23_45_10
Use IO::Tee Perl module for logging.
Fixed bug when creating folders on host2 with sep2 to \\ (Lotus Notes).
Updated the code to easily switch on --noreleasecheck by default.
----------------------------
revision 1.588
date: 2014/05/15 10:36:10; author: gilles; state: Exp; lines: +18 -11
Added FTGate support (no EXAMINE).
----------------------------
revision 1.587
date: 2014/05/09 17:03:27; author: gilles; state: Exp; lines: +14 -7
Typo when advising about prefix.
Easy way to switch releasecheck of by default.
----------------------------
revision 1.586
date: 2014/04/10 16:02:39; author: gilles; state: Exp; lines: +9 -7
Just a test for good_date and pop2imap
----------------------------
revision 1.585
date: 2014/02/17 15:24:34; author: gilles; state: Exp; lines: +39 -34
Warn syncing messges will not be simulated when --dry mode is on and folder on host2 does not exist yet.
Try to get folder size when a folder on host2 has the same name but with a different case like OLD_MAIL -> old_mail. Avoid "does not exist" output.
----------------------------
revision 1.584
date: 2014/02/05 00:40:59; author: gilles; state: Exp; lines: +77 -50 date: 2014/02/05 00:40:59; author: gilles; state: Exp; lines: +77 -50
Debug. Print separator given by NAMESPACE even when --sep1 oe --sep2 is used. Debug. Print separator given by NAMESPACE even when --sep1 oe --sep2 is used.
Debug. Prints prefix given by NAMESPACE even when --prefix1 or --prefix2 is used. Debug. Prints prefix given by NAMESPACE even when --prefix1 or --prefix2 is used.

213
FAQ
View file

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: FAQ,v 1.166 2014/01/27 02:23:30 gilles Exp gilles $ # $Id: FAQ,v 1.175 2014/05/21 01:20:20 gilles Exp gilles $
+------------------+ +------------------+
| FAQ for imapsync | | FAQ for imapsync |
@ -128,7 +128,7 @@ R2. It can be done, depending on the email server softwares used.
a) From Exchange to Exchange, export contacts and calendar to a) From Exchange to Exchange, export contacts and calendar to
PST format files on host1 and import them on host2. PST format files on host1 and import them on host2.
b) From Gmail to Gmail, export and import calandars in ical format, b) From Gmail to Gmail, export and import calendars in ical format,
extension for those files is .ics. extension for those files is .ics.
Contacts can be copied using a csv file. See the help page Contacts can be copied using a csv file. See the help page
http://support.google.com/mail/bin/topic.py?hl=en&topic=1669027 http://support.google.com/mail/bin/topic.py?hl=en&topic=1669027
@ -172,12 +172,12 @@ The ... can be replaced by nothing or any supplementary imapsync option.
======================================================================= =======================================================================
Q. Where I can find old imapsync releases? Q. Where I can find old imapsync releases?
R. Search the internet. R. Search the Internet.
======================================================================= =======================================================================
Q. Where I can find free open and gratis imapsync releases? Q. Where I can find free open and gratis imapsync releases?
R. Search the internet. R. Search the Internet.
Q. Is is legal to find imapsync gratis (or not) elsewhere? Q. Is is legal to find imapsync gratis (or not) elsewhere?
@ -208,9 +208,9 @@ R. Yes
Q. How can I fix this? Q. How can I fix this?
R. The cache path reflects hostnames or ip adresses, just change the R. The cache path reflects hostnames or ip addresses, just change the
directory names of host1 or host2. Use --dry to see if next runs directory names of host1 or host2. Use --dry to see if next runs
will generate duplucates. will generate duplicates.
By default the cache is like By default the cache is like
/tmp/imapsync_cache/host1/user1/host2/user2/... /tmp/imapsync_cache/host1/user1/host2/user2/...
@ -245,7 +245,7 @@ Notes about --useuid
Case where building the cache first is necessary (to avoid multiples transfers) 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 If you run again imapsync with --useuid on a transfer already done without --useuid
then, to avoid messages be copied again, first run imapsync with --usecache then, to avoid messages be copied again, first run imapsync with --usecache
but without --useuid, example scenario: but without --useuid, example scenario:
@ -275,7 +275,7 @@ B] I began with --useuid from the first time
Inodes number issue Inodes number issue
The cache is simple, it uses the filsystem natively, The cache is simple, it uses the file-system natively,
it's just an empty file per message transfered. it's just an empty file per message transfered.
When mailboxes are huge the cache can exhaust the number of inodes When mailboxes are huge the cache can exhaust the number of inodes
allowed in the filesystem, that's a limitation like size but less allowed in the filesystem, that's a limitation like size but less
@ -430,13 +430,13 @@ It looks like you use POP3 instead of IMAP, POP3 has only INBOX.
======================================================================= =======================================================================
Q. I am interested in creating a local clone of the IMAP on a LAN Q. I am interested in creating a local clone of the IMAP on a LAN
server for faster synchronisations, email will always be delivered server for faster synchronizations, email will always be delivered
to the remote server and so the synchronisation will be one way - from to the remote server and so the synchronization will be one way - from
remote to local. How suited is imapsync for continuous one-way remote to local. How suited is imapsync for continuous one-way
synchronisation of mailboxes? Is there a better solution? synchronization of mailboxes? Is there a better solution?
R. If messages are delivered remotely and you play locally with the R. If messages are delivered remotely and you play locally with the
copy, in order to have fast access, then the synchronisation can't copy, in order to have fast access, then the synchronization can't
be one way. You may change flags, you may move messages in be one way. You may change flags, you may move messages in
different folders etc. different folders etc.
@ -509,7 +509,7 @@ messages on both sides but it uses their imap uid. In that case
duplicates on host1 are transfered on host2. duplicates on host1 are transfered on host2.
======================================================================= =======================================================================
Q. How can I remove duplicates on a uniq host Q. How can I remove duplicates on a unique host
R. Just run imapsync on the same account with option --delete2, R. Just run imapsync on the same account with option --delete2,
ie with host1 == host2 and user1 == user2 ie with host1 == host2 and user1 == user2
@ -535,6 +535,34 @@ http://code.google.com/p/wintee/
imapsync ... 2>&1 | tee log.txt imapsync ... 2>&1 | tee log.txt
=======================================================================
Q. Can I run more instances of imapsync in parallel on a Windows host.
R. Yes!
Q. Any performance issue?
You have to try and check the transfer rates, sum them up to
have a uniq numeric criteria.
There is always a limit, depending on remote imap servers
and the one running imapsync;
CPU, memory, Inputs/Outputs are the classical bottlenecks,
the worst is the winner that sets the limit.
examples/sync_loop_windows.bat says
...
REM ==== Parallel executions ====
REM If you want to do parallel runs of imapsync then this current script is a good start.
REM Just copy it several times and replace, on each copy, the csvfile variable value.
REM Instead of SET csvfile=file.txt write for example
REM SET csvfile=file01.txt in the first copy
REM then also
REM SET csvfile=file02.txt in the second copy etc.
REM Of course you also have to split the data contained in file.txt
REM into file01.txt file02.txt etc.
REM After that, just double-click on each batch file to launch each process
======================================================================= =======================================================================
Q. I run multiple imapsync applications at the same time then get a Q. I run multiple imapsync applications at the same time then get a
warning "imapsync.pid already exists, overwriting it". warning "imapsync.pid already exists, overwriting it".
@ -563,7 +591,7 @@ R. Some servers take care about character case in folder names,
and the host2 server already has a folder "Trash" or "TRASH" and the host2 server already has a folder "Trash" or "TRASH"
then imapsync will try to create the folder "trash" on host2, then imapsync will try to create the folder "trash" on host2,
because trash and Trash are different strings. But if host2 because trash and Trash are different strings. But if host2
does not repect character case it will consider folder "trash" does not respect character case it will consider folder "trash"
already exists and will say it, that's the error message already exists and will say it, that's the error message
reported by imapsync: "Mailbox already exists", message coming reported by imapsync: "Mailbox already exists", message coming
from the server. from the server.
@ -592,7 +620,7 @@ Example:
sep1 = / sep1 = /
sep2 = . sep2 = .
imapsync reverts each separator automaticaly. imapsync reverts each separator automatically.
a) All / character coming from host1 are converted to . (convert the separator) a) All / character coming from host1 are converted to . (convert the separator)
b) All . character coming from host1 are converted to / (to avoid b) All . character coming from host1 are converted to / (to avoid
@ -602,7 +630,7 @@ So
INBOX/Ops.foo.bar (Ops.foo.bar is just one folder name) will be translated to INBOX/Ops.foo.bar (Ops.foo.bar is just one folder name) will be translated to
INBOX.Ops/foo/bar INBOX.Ops/foo/bar
Sometimes the sep1 character is not valid on host2 (character "/" usualy) Sometimes the sep1 character is not valid on host2 (character "/" usually)
R. Try : R. Try :
@ -853,7 +881,7 @@ 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? Q. I need to keep only a defined list of flags, how can I do?
The destination imap server complains about bad flags (Exchange). The destination imap server complains about bad flags (Exchange).
R1. Recent imapsync deals with this issue by filter with PERMANENTFLAGS R1. Recent imapsync deals with this issue by filter with PERMANENTFLAGS
@ -895,7 +923,7 @@ Recent imapsync deals with this issue by filter with PERMANENTFLAGS
automatically. automatically.
======================================================================= =======================================================================
Q. Flags are not well synchonized. Is it a bug? Q. Flags are not well synchronized. Is it a bug?
R. It happens with some servers on the first sync. R. It happens with some servers on the first sync.
Also, it was a bug from revision 1.200 to revision 1.207 Also, it was a bug from revision 1.200 to revision 1.207
@ -1030,7 +1058,7 @@ Q: I'm trying to use imapsync on win32 for gmail and it requires ssl.
Imapsync appears to require IO::Socket::SSL. What can I do? Imapsync appears to require IO::Socket::SSL. What can I do?
R1: use standalone imapsync.exe, it contains IO::Socket::SSL R1: use standalone imapsync.exe, it contains IO::Socket::SSL
Perl module embeded. Perl module embedded.
R2: Module IO::Socket::SSL is available on Win32 R2: Module IO::Socket::SSL is available on Win32
with Strawberry Perl. with Strawberry Perl.
@ -1122,7 +1150,7 @@ or maybe
--exclude '^"public\.' --exclude '^"public\.'
In the example given the character "." is the folder separator, you In the example given the character "." is the folder separator, you
can ommit it. Just take the string as it appears on the imapsync can omit it. Just take the string as it appears on the imapsync
output line : output line :
From folders list : [INBOX] [public.dreams] [etc.] From folders list : [INBOX] [public.dreams] [etc.]
@ -1247,6 +1275,18 @@ As it seems you need to use the mailNickname (e.g. alias) defined
for user2, not the username itself. for user2, not the username itself.
http://blogs.technet.com/b/exchange/archive/2004/03/31/105275.aspx http://blogs.technet.com/b/exchange/archive/2004/03/31/105275.aspx
A little note from John Becker.
After you pointed out that I had issues with authorization, I realized that
as an admin user I don't have all the rights on the mailboxes.
So I added myself to the user mailbox with full rights.
I also changed the login type on the Exchange CAS to type 1, plain text.
The command that I used for imapsync is:
imapsync ... ^
--host2 exchange-server ^
--user2 "windows-domain\admin-user\aaaa" ^
--password2 admin-password ...
====================================================================== ======================================================================
Q. How to migrate from or to Office 365 with an admin/authuser account? Q. How to migrate from or to Office 365 with an admin/authuser account?
@ -1342,7 +1382,7 @@ another without recreating the folder structure and the target server.
R. Yes. R. Yes.
For example, to synchronize all messages in all forders on host1 For example, to synchronize all messages in all folders on host1
to folder INBOX only on host2: to folder INBOX only on host2:
1) First try (safe mode): 1) First try (safe mode):
@ -1364,7 +1404,7 @@ imapsync \
====================================================================== ======================================================================
Q. I have moved from Braunschweig to Graz, so I would like to have my Q. I have moved from Braunschweig to Graz, so I would like to have my
whole Braunschweig mail sorted into a subfolder INBOX.Braunschweig whole Braunschweig mail sorted into a sub-folder INBOX.Braunschweig
of my new mail account. of my new mail account.
R. R.
@ -1453,7 +1493,7 @@ a) Manually:
1) You create a folder INBOX.2010-INBOX 1) You create a folder INBOX.2010-INBOX
2) Mostly every email software allow sorting by date. In INBOX, you 2) Mostly every email software allow sorting by date. In INBOX, you
select from 1 january to 31 december 2010 messages with the shift key. select from 1 January to 31 December 2010 messages with the shift key.
(in mutt, use ~d) (in mutt, use ~d)
3) Cut/paste in INBOX.2010-INBOX 3) Cut/paste in INBOX.2010-INBOX
@ -1554,47 +1594,64 @@ format issues. And now it works fine. (Thanks to Hansjoerg.Maurer)
Server specific issues and solutions Server specific issues and solutions
======================================================================= =======================================================================
=======================================================================
Q. From XXX to Exchange 2010/2013 or Office365
R. Here is a command line resume that solves most encountered issues when
migrating to Exchange or Office365. To understand or change the
details you have to read next Q/R sections.
On Windows:
imapsync ... ^
--maxsize 10000000 ^
--maxlinelength 9900 ^
--regexflag "s/\\Flagged//g" ^
--disarmreadreceipts
On Unix:
imapsync ... \
--maxsize 10000000 \
--maxlinelength 9900 \
--regexflag "s/\\Flagged//g" \
--disarmreadreceipts
======================================================================= =======================================================================
Q. From XXX to Exchange 2013 or Office365 read receipts are all resent Q. From XXX to Exchange 2013 or Office365 read receipts are all
again after a sync. Even for old messages. How can I fix that? resent again after a sync. Even for old messages. How can I fix that?
R. imapsync can remove the header containing this read receipt request. R. imapsync can remove the header containing this read receipt request.
On Unix, add: On Unix or Windows use:
--regexmess 's{\A(.*?(?! ^$))(^Disposition-Notification-To:.*?\n)}{$1}gxms' imapsync ... --disarmreadreceipts
On Windows, add: Since read receipts should be sent for unseen messages that will go
--regexmess "s{\A(.*?(?! ^$))(^Disposition-Notification-To:.*?\n)}{$1}gxms"
Since those read receipts should be sent for unseen messages going
to a seen state after the migration, you could be strict and apply to a seen state after the migration, you could be strict and apply
the regex only to seen messages. the regex only to seen messages.
Selecting seen message can be done with: Selecting seen message can be done with:
imapsync ... --search1 "SEEN" --regexmess "..." imapsync ... --search1 "SEEN" --disarmreadreceipts
Of course a second run has to be run without the --regexmess for Of course a second run has to be run without the --regexmess for
unseen messages: unseen messages:
imapsync ... --search1 "SEEN" imapsync ... --search1 "UNSEEN"
If you want to keep the header content and still suppress read receipts If fact --disarmreadreceipts is just an option equivalent to:
then use the following instead, it adds a prefix "X-" to "Disposition-Notification-To:"
--regexmess 's{\A(.*?(?! ^$))^Disposition-Notification-To:(.*?)$}{$1X-Disposition-Notification-To:$2}igxms' --regexmess 's{\A(.*?(?! ^$))^Disposition-Notification-To:(.*?)$}{$1X-Disposition-Notification-To:$2}igxms'
The small regex remove the header Disposition-Notification-To, the long one That regex prefixes the header Disposition-Notification-To with an X-
replace it so users can still see messages had a Disposition-Notification-To so that it becomes inactive.
header before.
I will add an option to set this regex.
Thanks to David Karnowski for pointing and solving this issue. Thanks to David Karnowski for pointing and solving this issue.
======================================================================= =======================================================================
Q. From XXX to Exchange 2013 or Office365 I get this error message Q. From XXX to Exchange 2010/2013 or Office365 I get this error message
sometimes: "BAD Command Argument Error 11" sometimes: "BAD Command Argument Error 11"
R. This error message comes from Exchange IMAP server when it R. This error message comes from Exchange IMAP server when it
@ -1602,9 +1659,10 @@ R. This error message comes from Exchange IMAP server when it
* Some messages are bigger than the size limit. 10 MB by default * Some messages are bigger than the size limit. 10 MB by default
on Exchange. It can be upped by configuration for Exchange. on Exchange. It can be upped by configuration for Exchange.
If you configure this limit then use option --maxsize 10000000 If you can't configure this limit then use option
for 10 MB, change it if needed) to tell imapsync to skip those messages. --maxsize 10000000 for 10 MB, change it if needed) to tell
This value is 25 MB for Office365 --maxsize 25000000 imapsync to skip those messages.
This value is 25 MB by default for Office365 --maxsize 25000000
imapsync ... --maxsize 10000000 # 10 MB for Exchange imapsync ... --maxsize 10000000 # 10 MB for Exchange
@ -1617,9 +1675,9 @@ R. This error message comes from Exchange IMAP server when it
* Some messages have some lines too long. Use option --maxlinelength * Some messages have some lines too long. Use option --maxlinelength
to skip messages whose max line length is over a number of bytes. to skip messages whose max line length is over a number of bytes.
--maxlinelength 1000 is a RFC2822 must but most server support --maxlinelength 1000 is a RFC2822 must but most server support
higher values. higher values. Exchange supports 9900:
imapsync ... --maxlinelength 1000 imapsync ... --maxlinelength 9900
Have also in mind that Exchange closes the connection after 10 errors Have also in mind that Exchange closes the connection after 10 errors
encountered so you might also see "BYE Connection closed" errors from encountered so you might also see "BYE Connection closed" errors from
@ -1685,7 +1743,7 @@ and report me what you discover in case you detect something.
The --addheader option is there because "Sent" folder messages The --addheader option is there because "Sent" folder messages
sometimes lack the "Message-Id:" and "Received:" headers needed sometimes lack the "Message-Id:" and "Received:" headers needed
by imapsync to identify messages (only when --useuid is not used). by imapsync to identify messages (only when --useuid is not used).
So option --addheader adds a "Message-Id" header consiting fo So option --addheader adds a "Message-Id" header consisting of
the imap UID of the message on the host1 folder, like the imap UID of the message on the host1 folder, like
"Message-Id: 12345@imapsync". "Message-Id: 12345@imapsync".
@ -1696,8 +1754,11 @@ the imap UID of the message on the host1 folder, like
--regextrans2 "s/[ ]+/_/g" is there to convert blank characters not --regextrans2 "s/[ ]+/_/g" is there to convert blank characters not
accepted by gmail to character _ underscore. In fact only leading accepted by gmail to character _ underscore. In fact only leading
and trailing blank characters are problems with gmail, and and trailing blank characters are problems with gmail, and
also succesive blank ending whith the IMAP error also successive blanks ending with the IMAP error
"NO [CANNOT] Folder contains excess whitespace (Failure)" "NO [CANNOT] Folder contains excess whitespace (Failure)"
If you want to change only leading and trailing blank characters
then use instead:
--regextrans2 "s,(/|^) +,\$1,g" --regextrans2 "s, +(/|$),\$1,g"
--regextrans2 "s/[\^]/_/g" is mandatory. It converts, since --regextrans2 "s/[\^]/_/g" is mandatory. It converts, since
not accepted by gmail, character ^ to character _ underscore. not accepted by gmail, character ^ to character _ underscore.
@ -1718,9 +1779,9 @@ You can add --folder "INBOX.Sent" in the example in case
you want to sync only the "Sent" folder. you want to sync only the "Sent" folder.
You can select folders exported to imap within the gmail preferences, You can select folders exported to imap within the gmail preferences,
unselect all "System labels" depending on your needs. unselect some "System labels", depending on your needs.
The "All Mail" archive pseudo-folder should be updated automaticaly. The "All Mail" archive pseudo-folder should be updated automatically.
@ -1803,7 +1864,7 @@ syncs folders (Gmail labels) using the classical alphanumeric order.
--folderlast "CanWait" will sync only messages that have the --folderlast "CanWait" will sync only messages that have the
label CanWait and only it. label CanWait and only it.
--folderlast "[Gmail]/All Mail", in conjonction with option --folderlast "[Gmail]/All Mail", in conjunction with option
--skipcrossduplicates, will only put in "[Gmail]/All Mail" --skipcrossduplicates, will only put in "[Gmail]/All Mail"
the messages that are not labeled at all. the messages that are not labeled at all.
@ -2115,8 +2176,8 @@ Any user having time to spend to debug Exchange2007 with imapsync
is welcome. is welcome.
R2. Other solution R2. Other solution
Two users succeded by using "MS Transporter Suite" (which is closed Two users succeeded by using "MS Transporter Suite" (which is closed
expensive nonfree software). expensive non-free software).
====================================================================== ======================================================================
Q. From Microsoft Exchange 2000 IMAP4rev1 server version 6.0.6487.0. Q. From Microsoft Exchange 2000 IMAP4rev1 server version 6.0.6487.0.
@ -2141,6 +2202,50 @@ Q. From or to QQMail IMAP4Server
R. imapsync ... --noabletosearch R. imapsync ... --noabletosearch
======================================================================
Q. From FirstClass to XXX
http://www.firstclass.com/
R. Migrating from FirstClass is not easy because FirstClass, strangely,
does not show all messages via IMAP. To make it show all messages,
a trick, painful to follow by hand, is moving emails
out and back in, for each folder. May be it can be done by a script.
FirstClass releases prior to release 12 do not shows the "Sent"
folder in IMAP but FirstClass release 12 shows it.
I advice you to upgrade to FirstClass release 12 before leaving it
with imapsync or another imap tool.
Here is a command line used to migrate from FirtClass release 12:
imapsync ... \
--tmpdir /var/tmp --usecache \
--useheader Message-ID \
--idatefromheader \
--addheader \
--regextrans2 "s,(/|^) +,\$1,g" --regextrans2 "s, +(/|$),\$1,g" \
--regextrans2 "s/[\^]/_/g" \
--regextrans2 "s/['\"\\\\]/_/g" \
--regextrans2 "s,&AC8-,-,g" \
--regextrans2 "s,&APg-,oe,g" \
--noabletosearch
Special thanks to Kristian Wind for helping me to write this FAQ item.
See also this worth reading discussion in a Zimbra forum:
http://www.zimbra.com/forums/migration/20349-help-needed-migrating-firstclass.html
======================================================================
Q. From XXX to FTGate
R. Do NOT use --usecache since new UIDs are not given by FTGate and also
badly guessed by imapsync. UIDEXPUNGE does not work so use also
--expunge2 when using --delete2
imapsync ... \
--sep2 / --prefix2 "" \
--useheader Message-Id \
====================================================================== ======================================================================
Q: How can I write an .rpm with imapsync Q: How can I write an .rpm with imapsync
@ -2149,7 +2254,7 @@ R. You'll find an RPM imapsync.spec file in the directory learn/rpm/
https://svn.fysik.dtu.dk/projects/rpmbuild/trunk/SPECS/imapsync.spec https://svn.fysik.dtu.dk/projects/rpmbuild/trunk/SPECS/imapsync.spec
It has been tested with imapsync 1.434 (May 2011) on CentOS5 It has been tested with imapsync 1.434 (May 2011) on CentOS5
and RedHat RHEL5 Linux. (Thanks to Ole Holm Nielsen). and RedHat RHEL5 Linux. (Thanks to Ole Holm Nielsen).
This imapsync.spec is derivated from Neil Brown work in 2007. This imapsync.spec is coming from Neil Brown work in 2007.
======================================================================= =======================================================================
Q. Where I can read up on the various IMAP RFCs? Q. Where I can read up on the various IMAP RFCs?

125
INSTALL
View file

@ -1,17 +1,23 @@
# $Id: INSTALL,v 1.33 2013/12/25 03:25:18 gilles Exp gilles $ # $Id: INSTALL,v 1.38 2014/05/29 23:42:11 gilles Exp gilles $
# #
# INSTALL file for imapsync # INSTALL file for imapsync
# imapsync : IMAP sync and migrate tool. # imapsync : IMAP sync and migrate tool.
INTRODUCTION INTRODUCTION
------------ ============
imapsync works fine under any operating system with Perl and Perl modules (listed below). imapsync works fine under any operating system with Perl and Perl modules (listed below).
imapsync.exe works fine standalone under Windows XP, Vista, Seven, 20XX, either 32 or 64bit. imapsync.exe works fine standalone under Windows XP, Vista, Seven, 20XX, either 32 or 64bit.
WINDOWS
=======
Read the file README_Windows.txt
UNIX UNIX
---- ====
This section doesn't concern Windows imapsync.exe users.
Purchase imapsync at Purchase imapsync at
http://imapsync.lamiral.info/ http://imapsync.lamiral.info/
@ -24,49 +30,6 @@ UNIX
Go into the directory imapsync-x.xx and read the INSTALL file. Go into the directory imapsync-x.xx and read the INSTALL file.
You're already reading the INSTALL file. You're already reading the INSTALL file.
WINDOWS
-------
a) Simplest way:
- Buy imapsync.exe at http://imapsync.lamiral.info/
- Run imapsync.exe in a command prompt (execute cmd.exe)
but I suggest the next process, I use it myself.
- Since it is simpler to edit a batch file with notepad than
the command line in DOS mode:
a) Look at the batch file at
http://imapsync.lamiral.info/examples/imapsync_example.bat
b) Take it and put this batch file in the same directory as imapsync.exe
c) Edit this batch file with notepad and replace the parameters
with your own values
d) Run the batch file with a double-click.
b) Hard way. It is the hard way because it installs all software
dependencies. The way for changing imapsync if needed.
- Get imapsync-x.xx.tgz
- Install Perl if it isn't already installed.
Strawberry Perl is a very good candidate
http://strawberryperl.com/
- Use the command CPAN to install modules listed in the PREREQUISITES section.
There is also a batch file that does this install for you
It is called install_modules.bat available at
http://imapsync.lamiral.info/examples/install_modules.bat
c) How to build imapsync.exe?
- Do the hard stuff in b)
- Run build_exe.bat (found in the tarball)
PREREQUISITES
-------------
This section doesn't concern Windows imapsync.exe users.
You need : You need :
- Perl - Perl
@ -113,45 +76,11 @@ Here is some individual module help:
run imapsync with included Mail-IMAPClient-3.35/ wherever you run imapsync with included Mail-IMAPClient-3.35/ wherever you
unpacked the imapsync tarball. unpacked the imapsync tarball.
- Digest::MD5 Test all Perl modules dependency in one command:
perl -mDigest::MD5 -e ""
http://search.cpan.org/
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.39 (Ubuntu package)
- Term::ReadKey
perl -mTerm::ReadKey -e ""
- IO::Socket::SSL
perl -mIO::Socket::SSL -e ""
- Digest::HMAC_MD5
Good for non plain text password over network.
perl -mDigest::HMAC_MD5 -e ""
- Authen::NTLM
perl -mAuthen::NTLM -e ""
- Time::HiRes
perl -mTime::HiRes -e ""
- Data::Uniqid
perl -mData::Uniqid -e ""
- URI::Escape
perl -mURI::Escape -e ""
- File::Copy::Recursive
perl -mFile::Copy::Recursive -e ""
Test everything in one command:
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL \ perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL \
-mDigest::HMAC_MD5 -mAuthen::NTLM -e -mTime::HiRes \ -mDigest::HMAC_MD5 -mAuthen::NTLM -e -mTime::HiRes \
-mData::Uniqid -mURI::Escape "" -mData::Uniqid -mURI::Escape -mFile::Copy::Recursive -mIO::Tee ""
You can install easily those Perl modules in latest release via the You can install easily those Perl modules in latest release via the
following commands (with root permissions) following commands (with root permissions)
@ -162,21 +91,22 @@ following commands (with root permissions)
perl -MCPAN -e "install Digest::HMAC_MD5" perl -MCPAN -e "install Digest::HMAC_MD5"
perl -MCPAN -e "install URI::Escape" perl -MCPAN -e "install URI::Escape"
perl -MCPAN -e "install File::Copy::Recursive" perl -MCPAN -e "install File::Copy::Recursive"
perl -MCPAN -e "install IO::Tee"
perl -MCPAN -e "install Data::Uniqid" perl -MCPAN -e "install Data::Uniqid"
perl -MCPAN -e "install Authen::NTLM" perl -MCPAN -e "install Authen::NTLM"
You can also install them easily too by using the standard install You can also install them easily by using the standard install
command on your system if the packages have been made on it command on your system if the packages have been made on it.
(so you may not have the latest but most of the time it Doing so you may not have the latest release but most of the time
doesn't care). it doesn't care.
Modules Modules
Authen::NTLM Authen::NTLM
Data::Uniqid Data::Uniqid
may be not available this distribution way since I haven't find them may be not available in the distribution way since I haven't find them
on Ubuntu nor on Mandriva. on Ubuntu nor on Mandriva but Centos supports them.
On Debian/Ubuntu: On Debian/Ubuntu:
@ -186,6 +116,7 @@ On Debian/Ubuntu:
aptitude install libdigest-hmac-perl # Digest::HMAC_MD5 Digest::HMAC_SHA1 aptitude install libdigest-hmac-perl # Digest::HMAC_MD5 Digest::HMAC_SHA1
aptitude install liburi-perl # URI::Escape aptitude install liburi-perl # URI::Escape
aptitude install libfile-copy-recursive-perl # File::Copy::Recursive aptitude install libfile-copy-recursive-perl # File::Copy::Recursive
aptitude install libio-tee-perl # IO::Tee
On Mandriva: On Mandriva:
@ -195,6 +126,8 @@ On Mandriva:
urpmi perl-Digest-HMAC # Digest::HMAC_MD5 Digest::HMAC_SHA1 urpmi perl-Digest-HMAC # Digest::HMAC_MD5 Digest::HMAC_SHA1
urpmi perl-URI # URI::Escape urpmi perl-URI # URI::Escape
urpmi perl-File-Copy-Recursive # File::Copy::Recursive urpmi perl-File-Copy-Recursive # File::Copy::Recursive
urpmi perl-IO-Tee # IO::Tee
On CentOS (thanks to Ralf Hauber) On CentOS (thanks to Ralf Hauber)
@ -204,17 +137,18 @@ On CentOS (thanks to Ralf Hauber)
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release*rpm rpm -Uvh epel-release*rpm
yum install perl-Mail-IMAPClient yum install perl-Mail-IMAPClient # Mail::IMAPClient
yum install "perl(Term::ReadKey)" yum install "perl(Term::ReadKey)" # Term::ReadKey
yum install "perl(Authen::NTLM)" yum install "perl(Authen::NTLM)" # Authen::NTLM
yum install perl-Data-Uniqid yum install perl-Data-Uniqid # Data::Uniqid
yum install perl-File-Copy-Recursive yum install perl-File-Copy-Recursive # File::Copy::Recursive
yum install perl-IO-Tee # IO::Tee
INSTALLING on Unix INSTALLING on Unix
------------------ ------------------
To see what will be done, just run: To see what will be done, just run (you need the make command):
make -n install make -n install
@ -223,6 +157,9 @@ To install imapsync in /usr/bin/ and man page in /usr/share/man/man1/, just run
make install make install
or copy the file imapsync where you want it to be. or copy the file imapsync where you want it to be.
For example:
cp imapsync /usr/bin/
TESTING on Unix TESTING on Unix
--------------- ---------------

View file

@ -1,5 +1,5 @@
# $Id: Makefile,v 1.141 2014/02/13 03:18:50 gilles Exp gilles $ # $Id: Makefile,v 1.149 2014/05/29 23:41:53 gilles Exp gilles $
.PHONY: help usage all .PHONY: help usage all
@ -33,7 +33,7 @@ DIST_NAME=imapsync-$(VERSION)
DIST_FILE=$(DIST_NAME).tgz DIST_FILE=$(DIST_NAME).tgz
DEB_FILE=$(DIST_NAME).deb DEB_FILE=$(DIST_NAME).deb
VERSION=$(shell perl -I$(IMAPClient) ./imapsync --version) VERSION=$(shell perl -I$(IMAPClient) ./imapsync --version 2>/dev/null || cat VERSION)
VERSION_EXE=$(shell cat ./VERSION_EXE) VERSION_EXE=$(shell cat ./VERSION_EXE)
HELLO=$(shell date;uname -a) HELLO=$(shell date;uname -a)
@ -48,7 +48,7 @@ hello:
all: ChangeLog README VERSION imapsync_elf_x86.bin imapsync.exe all: ChangeLog README VERSION imapsync_elf_x86.bin imapsync.exe
testp : testp :
perl -c imapsync perl -c imapsync || { echo; echo "Read the INSTALL file to solve Perl module dependencies!"; exit 1; }
ChangeLog: imapsync ChangeLog: imapsync
rlog imapsync > ChangeLog rlog imapsync > ChangeLog
@ -68,9 +68,9 @@ TUTORIAL.html: TUTORIAL.t2t
doc: README ChangeLog TUTORIAL.html GOOD_PRACTICES.html doc: README ChangeLog TUTORIAL.html GOOD_PRACTICES.html
.PHONY: clean clean_tilde clean_test doc .PHONY: clean clean_tilde clean_test doc clean_log
clean: clean_tilde clean_man clean: clean_tilde clean_man clean_log
clean_test: clean_test:
rm -f .test_3xx rm -f .test_3xx
@ -78,6 +78,10 @@ clean_test:
clean_tilde: clean_tilde:
rm -f *~ rm -f *~
clean_log:
rm -f LOG_imapsync/*.txt
rm -f examples/LOG_imapsync/*.txt
.PHONY: install dist man .PHONY: install dist man
man: imapsync.1 man: imapsync.1
@ -149,8 +153,8 @@ testf: clean_test test
.PHONY: lfo upload_lfo public imapsync_cidone .PHONY: lfo upload_lfo public imapsync_cidone
.dosify_bat: W/*.bat examples/*.bat .dosify_bat: W/*.bat examples/*.bat build_exe.bat
unix2dos W/*.bat examples/*.bat unix2dos W/*.bat examples/*.bat build_exe.bat
touch .dosify_bat touch .dosify_bat
dosify_bat: .dosify_bat dosify_bat: .dosify_bat
@ -204,6 +208,15 @@ exe: imapsync build_exe.bat .dosify_bat
scp Admin@c:'C:/msys/1.0/home/Admin/imapsync/imapsync.exe' . scp Admin@c:'C:/msys/1.0/home/Admin/imapsync/imapsync.exe' .
(date "+%s"| tr "\n" " "; echo -n "END " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME (date "+%s"| tr "\n" " "; echo -n "END " $(VERSION) ": "; date) >> W/.BUILD_EXE_TIME
zip: dosify_bat
rm -rfv ../prepa_zip/imapsync_$(VERSION_EXE)/
mkdir -p ../prepa_zip/imapsync_$(VERSION_EXE)/
cp -av examples/imapsync_example.bat examples/sync_loop_windows.bat examples/file.txt ../prepa_zip/imapsync_$(VERSION_EXE)/
for f in FAQ README ; do cp -av $$f ../prepa_zip/imapsync_$(VERSION_EXE)/$$f.txt ; done
cp -av imapsync.exe README_Windows.txt ../prepa_zip/imapsync_$(VERSION_EXE)/
unix2dos ../prepa_zip/imapsync_$(VERSION_EXE)/*.txt
cd ../prepa_zip/ && rm -f ./imapsync_$(VERSION_EXE).zip && zip -r ./imapsync_$(VERSION_EXE).zip ./imapsync_$(VERSION_EXE)/
scp ../prepa_zip/imapsync_$(VERSION_EXE).zip Admin@c:'C:/msys/1.0/home/Admin/'
@ -256,7 +269,7 @@ tarball: .tarball
mkdir -p ../prepa_dist/$(DIST_NAME) mkdir -p ../prepa_dist/$(DIST_NAME)
rsync -aCvH --delete --omit-dir-times --exclude dist/ --exclude imapsync.exe ./ ../prepa_dist/$(DIST_NAME)/ rsync -aCvH --delete --omit-dir-times --exclude dist/ --exclude imapsync.exe ./ ../prepa_dist/$(DIST_NAME)/
#rsync -av ./imapsync.exe ../prepa_dist/$(DIST_NAME)/ #rsync -av ./imapsync.exe ../prepa_dist/$(DIST_NAME)/
cd ../prepa_dist && (tar czfv $(DIST_FILE) $(DIST_NAME) || tar czfv $(DIST_FILE) $(DIST_NAME)) cd ../prepa_dist && tar czfv $(DIST_FILE) $(DIST_NAME)
#ln -f ../prepa_dist/$(DIST_FILE) dist/ #ln -f ../prepa_dist/$(DIST_FILE) dist/
cd ../prepa_dist && md5sum $(DIST_FILE) > $(DIST_FILE).md5.txt cd ../prepa_dist && md5sum $(DIST_FILE) > $(DIST_FILE).md5.txt
cd ../prepa_dist && md5sum -c $(DIST_FILE).md5.txt cd ../prepa_dist && md5sum -c $(DIST_FILE).md5.txt
@ -271,7 +284,13 @@ DIST_PATH := ./dist/$(DIST_SECRET)
lalala: lalala:
echo $(DIST_SECRET) echo $(DIST_SECRET)
dist: cidone test clean all perlcritic dist_prepa dist_prepa_exe dist: cidone test clean all perlcritic dist_prepa dist_zip README_dist.txt
md5:
cd $(DIST_PATH)/ && md5sum *
sha:
cd $(DIST_PATH)/ && sha512sum *
dist_prepa: tarball dist_dir dist_prepa: tarball dist_dir
@ -289,12 +308,17 @@ dist_dir:
ln -f ./dist/path_$(VERSION).txt ./dist/path_last.txt ln -f ./dist/path_$(VERSION).txt ./dist/path_last.txt
dist_prepa_exe: imapsync.exe dist_exe: imapsync.exe
mkdir -p $(DIST_PATH)
cp -a ./imapsync.exe $(DIST_PATH)/ cp -a ./imapsync.exe $(DIST_PATH)/
#cd $(DIST_PATH)/ && md5sum ./imapsync.exe > ./imapsync.exe.md5.txt #cd $(DIST_PATH)/ && md5sum ./imapsync.exe > ./imapsync.exe.md5.txt
#cd $(DIST_PATH)/ && md5sum -c ./imapsync.exe.md5.txt #cd $(DIST_PATH)/ && md5sum -c ./imapsync.exe.md5.txt
dist_zip: zip
cp -a ../prepa_zip/imapsync_$(VERSION_EXE).zip $(DIST_PATH)/
README_dist.txt: dist_dir
sh W/tools/gen_README_dist > $(DIST_PATH)/README_dist.txt
unix2dos $(DIST_PATH)/README_dist.txt
.PHONY: publish upload_ks ks .PHONY: publish upload_ks ks
@ -324,7 +348,7 @@ publish: dist upload_ks ksa
echo Now ou can do make ml echo Now ou can do make ml
PUBLIC_FILES = ./ChangeLog ./NOLIMIT ./LICENSE ./CREDITS ./FAQ \ PUBLIC_FILES = ./ChangeLog ./NOLIMIT ./LICENSE ./CREDITS ./FAQ \
./index.shtml ./INSTALL \ ./index.shtml ./INSTALL ./README_Windows.txt \
./VERSION ./VERSION_EXE \ ./VERSION ./VERSION_EXE \
./README ./TODO ./TUTORIAL.html ./GOOD_PRACTICES.html ./README ./TODO ./TUTORIAL.html ./GOOD_PRACTICES.html

49
README
View file

@ -4,7 +4,7 @@ NAME
More than 52 different IMAP server softwares supported with success, few More than 52 different IMAP server softwares supported with success, few
failures. failures.
$Revision: 1.584 $ $Revision: 1.592 $
SYNOPSIS SYNOPSIS
To synchronize imap account "foo" on "imap.truc.org" to imap account To synchronize imap account "foo" on "imap.truc.org" to imap account
@ -96,6 +96,7 @@ USAGE
[--split1] [--split2] [--split1] [--split2]
[--reconnectretry1 <int>] [--reconnectretry2 <int>] [--reconnectretry1 <int>] [--reconnectretry2 <int>]
[--noreleasecheck] [--noreleasecheck]
[--releasecheck]
[--pidfile <filepath>] [--pidfile <filepath>]
[--tmpdir <dirpath>] [--tmpdir <dirpath>]
[--version] [--help] [--version] [--help]
@ -248,7 +249,7 @@ AUTHOR
(see the license) over decades. (see the license) over decades.
BUG REPORT GUIDELINES BUG REPORT GUIDELINES
Help us to help you: follow the following guidelines. Help me to help you: follow the following guidelines.
Report any bugs or feature requests to the public mailing-list or to the Report any bugs or feature requests to the public mailing-list or to the
author. author.
@ -260,26 +261,28 @@ BUG REPORT GUIDELINES
Upgrade to last Mail-IMAPClient Perl module. Upgrade to last Mail-IMAPClient Perl module.
http://search.cpan.org/dist/Mail-IMAPClient/ maybe the bug is already http://search.cpan.org/dist/Mail-IMAPClient/ maybe the bug is already
fixed. fixed there.
Make a good title with word "imapsync" in it (my spam filter won't Make a good title with word "imapsync" in it (my spam filter won't
filter it), Don't write an email title with just "imapsync" or filter it), Try to write an email title with more words than just
"problem", a good title is made of keywords summary, not too long (one "imapsync" or "problem", a good title is made of keywords summary, but
visible line). not too long (one visible line).
Don't write imapsync in uppercase in the email title, I'll then know you
run Windows and you haven't read this README yet.
Help us to help you: in your report, please include: Help us to help you: in your report, please include:
- imapsync version. - imapsync version.
- output given with --debug --debugimap near the failure point. - output near the first failures, a few lines before is good to get the context
Isolate a message or two in a folder 'BUG' and use of the issue. First failures messages are often more significant than
the last ones.
- if the issue is always related to the same messages, include the output
with --debug --debugimap, near the failure point. For example,
Isolate a buggy message or two in a folder 'BUG' and use
imapsync ... --folder 'BUG' --debug --debugimap imapsync ... --folder 'BUG' --debug --debugimap
- imap server software on both side and their version number. - imap server softwares on both sides and their version number.
- imapsync with all the options you use, the full command line - imapsync with all the options you use, the full command line
you use (except the passwords of course). you use (except the passwords of course).
@ -297,15 +300,19 @@ BUG REPORT GUIDELINES
you run imapsync on a foreign host from the both. you run imapsync on a foreign host from the both.
Most of those values can be found as a copy/paste at the begining of the Most of those values can be found as a copy/paste at the begining of the
output, so a copy of the output is a very easy and very good debug output, so a carbon copy of the output is a very easy and very good
report for me. debug report for me.
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 then forget Way" http://www.catb.org/~esr/faqs/smart-questions.html and then forget
it. it.
IMAP SERVERS IMAP SERVERS
Failure stories reported with the following 3 imap servers: Failure stories reported in the past with the following 6 imap servers.
Maybe last imapsync release can run successfully with them. Don't
hesitate to have a try, It's been a long time since last failure
occured, I will help you and make efforts to switch them to the success
list, that's my job.
- MailEnable 1.54 (Proprietary) but MailEnable 4.23 is supported. - MailEnable 1.54 (Proprietary) but MailEnable 4.23 is supported.
- DBMail 0.9, 2.0.7 (GPL). But DBMail 1.2.1 is supported. - DBMail 0.9, 2.0.7 (GPL). But DBMail 1.2.1 is supported.
@ -317,7 +324,7 @@ IMAP SERVERS
- Hotmail since hotmail.com does not provide IMAP access - Hotmail since hotmail.com does not provide IMAP access
- Outlook.com since outlook.com does not provide IMAP access - Outlook.com since outlook.com does not provide IMAP access
Success stories reported with the following 57 imap servers (software Success stories reported with the following 62 imap servers (software
names are in alphabetic order): names are in alphabetic order):
- 1und1 H mimap1 84498 [host1] H mibap4 95231 [host1] - 1und1 H mimap1 84498 [host1] H mibap4 95231 [host1]
@ -349,6 +356,8 @@ IMAP SERVERS
- Dovecot 0.99.10.4, 0.99.14, 0.99.14-8.fc4, 1.0-0.beta2.7, - Dovecot 0.99.10.4, 0.99.14, 0.99.14-8.fc4, 1.0-0.beta2.7,
1.0.0 [dest/source] (LGPL) (http://www.dovecot.org/) 1.0.0 [dest/source] (LGPL) (http://www.dovecot.org/)
- Eudora WorldMail v2 - Eudora WorldMail v2
- FirtClass 9 [host1] Read the FAQ! (http://www.firstclass.com/)
- FTGate (http://www.ftgate.com/)
- Fusemail imap.fusemail.net:143 (https://www.fusemail.com/). - Fusemail imap.fusemail.net:143 (https://www.fusemail.com/).
- Gimap (Gmail imap) - Gimap (Gmail imap)
- GMX IMAP4 StreamProxy. - GMX IMAP4 StreamProxy.
@ -443,9 +452,11 @@ HUGE MIGRATION
--host1 imap.side1.org --user1 %%G --password1 %%H ^ --host1 imap.side1.org --user1 %%G --password1 %%H ^
--host2 imap.side2.org --user2 %%I --password2 %%J ... --host2 imap.side2.org --user2 %%I --password2 %%J ...
The ... have to be replaced by nothing or any imapsync option. The ... have to be replaced by nothing or any imapsync option. Welcome
in shell programming !
Welcome in shell programming ! You will find already written scripts at
http://imapsync.lamiral.info/examples/
Hacking Hacking
Feel free to hack imapsync as the NOLIMIT license permits it. Feel free to hack imapsync as the NOLIMIT license permits it.
@ -472,5 +483,5 @@ SIMILAR SOFTWARES
Feedback (good or bad) will often be welcome. Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.584 2014/02/05 00:40:59 gilles Exp gilles $ $Id: imapsync,v 1.592 2014/05/22 10:03:17 gilles Exp gilles $

103
README_Windows.txt Normal file
View file

@ -0,0 +1,103 @@
# $Id: README_Windows.txt,v 1.4 2014/05/29 23:41:41 gilles Exp gilles $
#
# README_Windows.txt file for imapsync
# imapsync : IMAP sync and migrate tool.
WINDOWS
=======
Two ways to install and use imapsync on Windows systems: A) or B).
Standard users should only take the A) way.
Developpers, users that want to build their own imapsync.exe
or modify it, have to consider the B) way.
A) Simplest way
---------------
A.1) Get imapsync.
Buy imapsync at http://imapsync.lamiral.info/
You'll then have access to a zip archive file named imapsync_1.xxx.zip
where 1.xxx is the imapsync release number.
A.2) Extract the zip file in a folder where you'll work with imapsync
You can work on the Desktop since the zip file extraction creates
a uniq folder named imapsync_1.xxx (where 1.xxx is the imapsync
release number).
A.3) Check the folder
In the folder extracted imapsync_1.xxx you see 6 files:
* README_Windows.txt is the current file you are reading
* imapsync_example.bat is a batch file example you will copy and edit
* sync_loop_windows.bat is a batch file example for syncing many accounts
* FAQ.txt contains many useful tips,
FAQ is a must read when something goes wrong.
* README.txt imapsync general documentation.
* imapsync.exe is the imapsync binary. You don't have to run it directly.
You can copy or rename imapsync_example.bat as you wish as long as
its extension remains ".bat". On Windows systems .bat extension
means "I'm a batch script". Same thing for sync_loop_windows.bat.
The batch scripts have to stay with imapsync.exe because
of the way they call it, they use ".\imapsync.exe", so
let them be in the same directory.
For the rest of this documentation I assume you copied
imapsync_example.bat to a file named imapsync_stuff.bat
A.4) Edit the batch file
Edit imapsync_stuff.bat and change the values with yours.
In order to edit it you have do a right click on it and select "modify"
in the list presented in the small window menu.
Notepad is a good editor to modify it,
Office Word is not good for that job.
File FAQ.txt contains many tips and special options sometimes
needed by specific imap server softwares like Exchange or Gmail.
A.5) Run the batch file
To run imapsync with your values just double-clic on
the batch file imapsync_example.bat
You do not need to have administrator priviledge to run imapsync.
A.6) Loop on A.5) A.6)
Loop the process of editing and running imapsync until
you solve all issues and all values suit your needs.
A.7) Look the sync running. You can abort it at any time with a ctrl-c.
A.8) When the sync is finished you can find the whole log of the output
in the folder named "LOG_imapsync", the logfile name is based
on the launching date and hour and the user2 parameter, one logfile per run.
The logfile name is printed at the end of the imapsync run.
If you do not want logging in a file use option --nolog
B) Hard way. It is the hard way because it installs all software
dependencies. This is the way for modifying imapsync if needed.
- Get imapsync-x.xx.tgz
- Install Perl if it isn't already installed.
Strawberry Perl is a very good candidate
http://strawberryperl.com/
- Use the command CPAN to install modules listed in the PREREQUISITES section.
There is also a batch file that does this install for you
It is called install_modules.bat available at
http://imapsync.lamiral.info/examples/install_modules.bat
c) How to build imapsync.exe?
- Do the hard stuff in B)
- Run build_exe.bat (found in the tarball)

6
README_dist.txt Normal file
View file

@ -0,0 +1,6 @@
imapsync-1.592.tgz is for Unix and Mac users.
imapsync-1.592.zip is for Windows users.
the file script imapsync for a fast upgrade on Unix.

33
TODO
View file

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: TODO,v 1.124 2013/12/25 03:04:53 gilles Exp gilles $ # $Id: TODO,v 1.126 2014/05/21 01:15:47 gilles Exp gilles $
TODO file for imapsync TODO file for imapsync
---------------------- ----------------------
@ -17,12 +17,9 @@ http://www.yippiemove.com/
http://www.migrationwiz.com/ http://www.migrationwiz.com/
http://www.microsoft.com/download/en/details.aspx?id=1329 "Microsoft Transporter Suite" http://www.microsoft.com/download/en/details.aspx?id=1329 "Microsoft Transporter Suite"
Write --disarm_read_receipts that does: Add an option to remove empty folders on host1, except INBOX.
--regexmess 's{\A(.*?(?! ^$))^Disposition-Notification-To:(.*?)$}{$1X-Disposition-Notification-To:$2}igxms'
May be apply it only to UNSEEN messages.
Write --max_messages_per_second and --max_bytes_per_second for staying under Microsoft's throttling policies.
Apply --disarmreadreceipts only to UNSEEN messages.
Convert folder names to utf-8 and print them next to the uft-7 ones. Convert folder names to utf-8 and print them next to the uft-7 ones.
Look at imapsync/W/learn/ Look at imapsync/W/learn/
@ -76,9 +73,6 @@ Does \lalala can be forbidden (courier does a
with with
* OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited * OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited
Add an option to log both on screen and append to a file.
At least document the tee command solution (Unix and Windows)
Suggestion: it's very difficult to track down messages which are behaving Suggestion: it's very difficult to track down messages which are behaving
funny during the sync. It would be great - and presumably easy to code - funny during the sync. It would be great - and presumably easy to code -
to have an option to have imapsync display e.g. the subject of an to have an option to have imapsync display e.g. the subject of an
@ -117,8 +111,6 @@ Take a look at Mail::IMAPTalk
Simon Bertrang said "way better performance, less problems, easier to use and no Simon Bertrang said "way better performance, less problems, easier to use and no
issues so far". Sounds good! issues so far". Sounds good!
Add an option to implement the faq entry about copying a contact folder.
imapsync doesn't report well. It should says "I had imapsync doesn't report well. It should says "I had
to sync 123 messages but I could transfer only 99 messages" to sync 123 messages but I could transfer only 99 messages"
Maybe count messages not transfered because they're dupplicate. Maybe count messages not transfered because they're dupplicate.
@ -150,9 +142,6 @@ is changing and have it replace the domain in all user names that are
related to ACLs. related to ACLs.
See patches/imapsync-acls-users See patches/imapsync-acls-users
Use examine() instead of select() in --dry mode.
Add a method doing the switch automagicaly.
Add --verbose from Kjetil jumbo patch. Add --verbose from Kjetil jumbo patch.
Read the IMAP RFC http://www.faqs.org/rfcs/rfc3501.html Read the IMAP RFC http://www.faqs.org/rfcs/rfc3501.html
@ -167,6 +156,22 @@ http://asg.web.cmu.edu/cyrus/download/imapd/altnamespace.html
=========================================================================== ===========================================================================
DONE. Add options --log and --logfile to log both on screen and to a file.
DONE. Document the tee command solution (Unix and Windows) in the FAQ.
NEVER. Add an option to implement the faq entry about copying a contact folder.
(write an dedicated software instead!)
NEVER. Use examine() instead of select() in --dry mode.
Add a method doing the switch automagicaly.
DONE. Write --disarmreadreceipts that does:
--regexmess 's{\A(.*?(?! ^$))^Disposition-Notification-To:(.*?)$}{$1X-Disposition-Notification-To:$2}igxms'
DONE. With --foldersizes make the listing on host2 independent of case
(avoid "not yet created" if the folder exists in another case string)
DONE. Write --maxmessagespersecond and --maxbytespersecond for staying under Microsoft's throttling policies.
DONE. Inform about --addheader when the problem occurs "(no wanted headers so we ignore this message)" DONE. Inform about --addheader when the problem occurs "(no wanted headers so we ignore this message)"

View file

@ -1 +1 @@
1.584 1.592

View file

@ -1 +1 @@
1.584 1.592

View file

@ -269,3 +269,21 @@
1390875240 END 1.582 : mardi 28 janvier 2014, 03:14:00 (UTC+0100) 1390875240 END 1.582 : mardi 28 janvier 2014, 03:14:00 (UTC+0100)
1391561330 BEGIN 1.584 : mercredi 5 février 2014, 01:48:50 (UTC+0100) 1391561330 BEGIN 1.584 : mercredi 5 février 2014, 01:48:50 (UTC+0100)
1391562789 END 1.584 : mercredi 5 février 2014, 02:13:09 (UTC+0100) 1391562789 END 1.584 : mercredi 5 février 2014, 02:13:09 (UTC+0100)
1399288404 BEGIN 1.586 : lundi 5 mai 2014, 13:13:24 (UTC+0200)
1399655068 BEGIN 1.587 : vendredi 9 mai 2014, 19:04:28 (UTC+0200)
1399657515 END 1.587 : vendredi 9 mai 2014, 19:45:15 (UTC+0200)
1399729631 BEGIN 1.587 : samedi 10 mai 2014, 15:47:11 (UTC+0200)
1399730345 END 1.587 : samedi 10 mai 2014, 15:59:05 (UTC+0200)
1400630617 BEGIN 1.590 : mercredi 21 mai 2014, 02:03:37 (UTC+0200)
1400639261 BEGIN 1.590 : mercredi 21 mai 2014, 04:27:41 (UTC+0200)
1400640226 END 1.590 : mercredi 21 mai 2014, 04:43:46 (UTC+0200)
1400722992 BEGIN 1.591 : jeudi 22 mai 2014, 03:43:12 (UTC+0200)
1400723946 END 1.591 : jeudi 22 mai 2014, 03:59:06 (UTC+0200)
1400754149 BEGIN 1.592 : jeudi 22 mai 2014, 12:22:29 (UTC+0200)
1400755228 END 1.592 : jeudi 22 mai 2014, 12:40:28 (UTC+0200)
1401188766 BEGIN 1.592 : mardi 27 mai 2014, 13:06:06 (UTC+0200)
1401190037 END 1.592 : mardi 27 mai 2014, 13:27:17 (UTC+0200)
1401197283 BEGIN 1.592 : mardi 27 mai 2014, 15:28:03 (UTC+0200)
1401227679 BEGIN 1.592 : mardi 27 mai 2014, 23:54:39 (UTC+0200)
1401262215 END 1.592 : mercredi 28 mai 2014, 09:30:15 (UTC+0200)
1401407642 BEGIN 1.592 : vendredi 30 mai 2014, 01:54:02 (UTC+0200)

View file

@ -7,7 +7,8 @@ my $t = Unicode::IMAPUtf7->new();
while (<>) { while (<>) {
chomp ; chomp ;
push( @result, sprintf( "%33s %s\n", $_, $t->decode($_) ) ) ; #push( @result, sprintf( "%33s %s\n", $_, $t->decode($_) ) ) ;
push( @result, sprintf( "%s\n", $t->decode($_) ) ) ;
} }
print @result ; print @result ;

8
W/learn/log.txt Normal file
View file

@ -0,0 +1,8 @@
print 01
warn 02
print 03
warn 04
warn 05
print 06
print 07
warn 08

25
W/learn/tee_log Executable file
View file

@ -0,0 +1,25 @@
#!/usr/bin/perl
use warnings ;
use strict ;
use IO::Tee;
my $log_filename = "log.txt";
my $log_filehandle;
open( $log_filehandle, '>>', $log_filename )
or die("Can't open $log_filename for append: $!");
my $tee = IO::Tee->new( $log_filehandle, \*STDOUT );
*STDERR = *$tee{IO};
select $tee;
print "print 01\n" ;
warn "warn 02\n" ;
print "print 03\n" ;
warn "warn 04\n" ;
warn "warn 05\n" ;
print "print 06\n" ;
print "print 07\n" ;
warn "warn 08\n" ;
exit ;

15
W/learn/tee_log.bat Normal file
View file

@ -0,0 +1,15 @@
REM
REM scp tee_log tee_log.bat Admin@c:'C:/msys/1.0/home/Admin/imapsync/'
perl -MCPAN -e "install IO::Tee"
perl ./tee_log
PAUSE
pp -o tee_log.exe -M IO::Tee ./tee_log
PAUSE
./tee_log.exe

31
W/paypal_reply/Makefile Normal file
View file

@ -0,0 +1,31 @@
#
help:
@echo " You can do :"
@echo "make test"
.PHONY: test test_paypal_build_reply
test: test_paypal_build_reply
test_init: test_paypal_build_reply_init
test_paypal_build_reply_init:
./paypal_build_reply /g/var/paypal_build_reply/msg-5088-3.txt /g/var/paypal_build_reply/_1395313727_30838_paypal_com_ > /g/var/paypal_build_reply/t01_paypal_build_reply_support_ref.out
./paypal_build_reply /g/var/paypal_build_reply/msg-4425-3.txt /g/var/paypal_build_reply/_1396257031_22182_paypal_com_ > /g/var/paypal_build_reply/t01_paypal_build_reply_software_ref.out
./paypal_build_reply --debug /g/var/paypal_build_reply/msg-5088-3.txt /g/var/paypal_build_reply/_1395313727_30838_paypal_com_ > /g/var/paypal_build_reply/t01_paypal_build_reply_support_debug_ref.out
./paypal_build_reply --debug /g/var/paypal_build_reply/msg-4425-3.txt /g/var/paypal_build_reply/_1396257031_22182_paypal_com_ > /g/var/paypal_build_reply/t01_paypal_build_reply_software_debug_ref.out
test_paypal_build_reply:
./paypal_build_reply /g/var/paypal_build_reply/msg-5088-3.txt /g/var/paypal_build_reply/_1395313727_30838_paypal_com_ > /g/var/paypal_build_reply/t01_paypal_build_reply_support_new.out
diff /g/var/paypal_build_reply/t01_paypal_build_reply_support_ref.out /g/var/paypal_build_reply/t01_paypal_build_reply_support_new.out
./paypal_build_reply /g/var/paypal_build_reply/msg-4425-3.txt /g/var/paypal_build_reply/_1396257031_22182_paypal_com_ > /g/var/paypal_build_reply/t01_paypal_build_reply_software_new.out
diff /g/var/paypal_build_reply/t01_paypal_build_reply_software_ref.out /g/var/paypal_build_reply/t01_paypal_build_reply_software_new.out
./paypal_build_reply --debug /g/var/paypal_build_reply/msg-5088-3.txt /g/var/paypal_build_reply/_1395313727_30838_paypal_com_ > /g/var/paypal_build_reply/t01_paypal_build_reply_support_debug_new.out
diff /g/var/paypal_build_reply/t01_paypal_build_reply_support_debug_ref.out /g/var/paypal_build_reply/t01_paypal_build_reply_support_debug_new.out
./paypal_build_reply --debug /g/var/paypal_build_reply/msg-4425-3.txt /g/var/paypal_build_reply/_1396257031_22182_paypal_com_ > /g/var/paypal_build_reply/t01_paypal_build_reply_software_debug_new.out
diff /g/var/paypal_build_reply/t01_paypal_build_reply_software_debug_ref.out /g/var/paypal_build_reply/t01_paypal_build_reply_software_debug_new.out

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# $Id: memo,v 1.14 2013/04/29 08:15:35 gilles Exp gilles $ # $Id: memo,v 1.16 2014/05/01 22:08:06 gilles Exp $
echo paypal_bilan_todo echo paypal_bilan_todo
@ -28,8 +28,139 @@ Europe a un autre assujetti : Article 262 ter => Exoneration
EOF EOF
} }
echo paypal_bilan_licence_support_same_button_04_2014_04_csv
paypal_bilan_licence_support_same_button_04_2014_04_csv() {
# DID output diff between paypal_bilan_1.78 and next
(
#set -x
perl -c /g/public_html/imapsync/W/paypal_reply/paypal_bilan || return 1
cd /g/var/paypal_bilan_A_B_C/
/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.78 \
--debug --debug_csv --debug_email --details --debug_invoice \
--dir_invoices /g/var/paypal_invoices_dev --write_invoices --first_in 30001 \
2014_04.csv \
> 2014_04.out1 2>&1
echo paypal_bilan_tva_taux_20 /g/public_html/imapsync/W/paypal_reply/paypal_bilan \
--debug --debug_csv --debug_email --details --debug_invoice \
--dir_invoices /g/var/paypal_invoices_dev --write_invoices --first_in 30001 \
2014_04.csv \
> 2014_04.out2 2>&1
echo diff 2014_04.out1 2014_04.out2
diff 2014_04.out1 2014_04.out2
)
}
echo paypal_bilan_licence_support_same_button_03_A_B_several_csv
paypal_bilan_licence_support_same_button_03_A_B_several_csv() {
# DID output diff between paypal_bilan_1.78 and next
(
#set -x
perl -c /g/public_html/imapsync/W/paypal_reply/paypal_bilan || return 1
cd /g/var/paypal_bilan_A_B_C/
/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.78 \
--debug --debug_csv --debug_email --details --debug_invoice \
--dir_invoices /g/var/paypal_invoices_dev --write_invoices --first_in 20001 \
??_*.csv \
> several.out1 2>&1
/g/public_html/imapsync/W/paypal_reply/paypal_bilan \
--debug --debug_csv --debug_email --details --debug_invoice \
--dir_invoices /g/var/paypal_invoices_dev --write_invoices --first_in 20001 \
??_*.csv \
> several.out2 2>&1
echo diff several.out1 several.out2
diff several.out1 several.out2
)
}
echo paypal_bilan_licence_support_same_button_02_A_B_one_line
paypal_bilan_licence_support_same_button_02_A_B_one_line() {
# DID output diff between paypal_bilan_1.78 and next
(
#set -x
perl -c /g/public_html/imapsync/W/paypal_reply/paypal_bilan || return 1
cd /g/var/paypal_bilan_A_B_C/
for csv in ??_*.csv ; do
b=`basename $csv .csv`
/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.78 \
--debug --debug_csv --debug_email --details --debug_invoice \
--dir_invoices /g/var/paypal_invoices_dev --write_invoices --first_in 10001 \
$b.csv \
> $b.out1 2>&1
/g/public_html/imapsync/W/paypal_reply/paypal_bilan \
--debug --debug_csv --debug_email --details --debug_invoice \
--dir_invoices /g/var/paypal_invoices_dev --write_invoices --first_in 10001 \
$b.csv \
> $b.out2 2>&1
echo diff $b.out1 $b.out2
diff $b.out1 $b.out2
done
)
}
echo paypal_bilan_licence_support_same_button_01_ALL_before_B_C
paypal_bilan_licence_support_same_button_01_ALL_before_B_C() {
# DID output diff between paypal_bilan_1.77 and next
(
set -x
perl -c /g/public_html/imapsync/W/paypal_reply/paypal_bilan || return 1
/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.77 --bnc --debug --details --debug_email --debug_invoice --first_in 147 \
--avoid_numbers '292 293 643 644 731 732 1093
1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298
2625 2626 2970 2971 2972 3093' \
/g/paypal/paypal_201[01234]_??_complet.csv \
> /g/var/paypal_bilan/tests/paypal_invoice.out1 2>&1
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug --details --debug_email --debug_invoice --first_in 147 \
--avoid_numbers '292 293 643 644 731 732 1093
1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298
2625 2626 2970 2971 2972 3093' \
/g/paypal/paypal_201[01234]_??_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_final_presentation_for_tva
paypal_bilan_final_presentation_for_tva() {
# DID output diff between paypal_bilan_1.72 and 1.73
(
set -x
perl -c /g/public_html/imapsync/W/paypal_reply/paypal_bilan || return 1
/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.72 --bnc --debug --details --debug_invoice --first_in 147 \
--avoid_numbers '292 293 643 644 731 732 1093
1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298
2625 2626 2970 2971 2972 3093' \
/g/paypal/paypal_201[01234]_??_complet.csv \
> /g/var/paypal_bilan/tests/paypal_invoice.out1 2>&1
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug --details --debug_invoice --first_in 147 \
--avoid_numbers '292 293 643 644 731 732 1093
1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298
2625 2626 2970 2971 2972 3093' \
/g/paypal/paypal_201[01234]_??_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_tva_taux_20
paypal_bilan_tva_taux_20() { paypal_bilan_tva_taux_20() {
# DID output diff between paypal_bilan_1.70 and 1.71 # DID output diff between paypal_bilan_1.70 and 1.71
( (

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
#!/usr/bin/perl #!/usr/bin/perl
# $Id: paypal_bilan,v 1.70 2014/01/17 15:27:11 gilles Exp gilles $ # $Id: paypal_bilan,v 1.73 2014/04/26 16:59:32 gilles Exp $
use strict; use strict;
use warnings; use warnings;
@ -13,7 +13,7 @@ use Test::More 'no_plan' ;
die unless (utf8_supported_charset('ISO-8859-1')); die unless (utf8_supported_charset('ISO-8859-1'));
my $rcs = '$Id: paypal_bilan,v 1.70 2014/01/17 15:27:11 gilles Exp gilles $ ' ; my $rcs = '$Id: paypal_bilan,v 1.73 2014/04/26 16:59:32 gilles Exp $ ' ;
$rcs =~ m/,v (\d+\.\d+)/ ; $rcs =~ m/,v (\d+\.\d+)/ ;
my $VERSION = ($1) ? $1: "UNKNOWN" ; my $VERSION = ($1) ? $1: "UNKNOWN" ;
@ -156,19 +156,34 @@ my @invoice_suspended = sort { $a <=> $b } keys( %invoice_suspended ) ;
my @invoice_refund = sort { $a <=> $b } keys( %invoice_refund ) ; my @invoice_refund = sort { $a <=> $b } keys( %invoice_refund ) ;
print( "\n", "=" x 60, "\n" ) if $bnc ; print( "\n", "=" x 60, "\n" ) ;
my $total_usd_paypal_cost ;
$total_usd_paypal_cost = sprintf('%2.2f', $total_usd_invoice - $total_usd_received ) ;
print "USD banque $total_usd_received\n" ; print "USD received $total_usd_received\n" ;
print "USD invoice $total_usd_invoice\n" ; print "USD invoice $total_usd_invoice\n" ;
my $total_eur_from_usd ; print "USD costs $total_usd_paypal_cost\n" ;
$total_eur_from_usd = sprintf('%2.2f', $total_usd_invoice / $usdeur ) ; # au 30 nov 2010 http://fr.finance.yahoo.com/devises/convertisseur/#from=EUR;to=USD;amt=1
print "EUR from USD $total_eur_from_usd\n" ; my $total_eur_invoice_from_usd ;
print "EUR banque $total_eur_received\n" ; my $total_eur_received_from_usd ;
print "EUR invoice $total_eur_invoice\n" ; my $total_eur_paypal_cost_from_usd ;
# au 30 nov 2010 http://fr.finance.yahoo.com/devises/convertisseur/#from=EUR;to=USD;amt=1
$total_eur_invoice_from_usd = sprintf('%2.2f', $total_usd_invoice / $usdeur ) ;
$total_eur_received_from_usd = sprintf('%2.2f', $total_usd_received / $usdeur ) ;
$total_eur_paypal_cost_from_usd = sprintf('%2.2f', $total_usd_paypal_cost / $usdeur ) ;
# EUR
$total_eur_received = sprintf('%2.2f', $total_eur_received) ;
$total_eur_invoice = sprintf('%2.2f', $total_eur_invoice) ;
print "EUR invoice from USD $total_eur_invoice_from_usd\n" ;
print "EUR received from EUR $total_eur_received\n" ;
print "EUR invoice from EUR $total_eur_invoice\n" ;
my $total_eur_invoice_from_eur_usd = $total_eur_invoice_from_usd + $total_eur_invoice ;
my $total_eur_received_from_eur_usd = $total_eur_received_from_usd + $total_eur_received ;
my $total_eur_paypal_cost = $total_eur_invoice - $total_eur_received + $total_eur_paypal_cost_from_usd ;
my $total_eur = $total_eur_from_usd + $total_eur_invoice ;
$total_HT_EUR_exo = sprintf('%2.2f', $total_HT_EUR_exo) ; $total_HT_EUR_exo = sprintf('%2.2f', $total_HT_EUR_exo) ;
$total_HT_EUR_ass = sprintf('%2.2f', $total_HT_EUR_ass) ; $total_HT_EUR_ass = sprintf('%2.2f', $total_HT_EUR_ass) ;
@ -178,15 +193,26 @@ $total_HT_EUR_sup = sprintf('%2.2f', $total_HT_EUR_sup) ;
$total_TVA_EUR_sup = sprintf('%2.2f', $total_TVA_EUR_sup) ; $total_TVA_EUR_sup = sprintf('%2.2f', $total_TVA_EUR_sup) ;
$total_HT_EUR_sup_exo = sprintf('%2.2f', $total_HT_EUR_sup_exo) ; $total_HT_EUR_sup_exo = sprintf('%2.2f', $total_HT_EUR_sup_exo) ;
$total_eur = sprintf('%2.2f', $total_eur) ; $total_eur_invoice_from_eur_usd = sprintf('%2.2f', $total_eur_invoice_from_eur_usd) ;
$total_eur_paypal_cost = sprintf('%2.2f', $total_eur_paypal_cost) ;
print( "---- USD + EUR ----\n" ) ;
print "EUR total invoice $total_eur_invoice_from_eur_usd\n" ;
print "EUR total received $total_eur_received_from_eur_usd\n" ;
print "EUR total paypal cost $total_eur_paypal_cost\n" ;
print ;
print( "---- Assujeti TVA ----\n" ) ;
print "EUR total HT licen assuj $total_HT_EUR_ass (autres operations imposables)\n" ;
#print "EUR total TVA licen assuj $total_TVA_EUR\n" ;
print "EUR total HT supp assuj $total_HT_EUR_sup (ventes, prestations)\n" ;
#print "EUR total TVA supp assuj $total_TVA_EUR_sup\n" ;
print( "---- Exonere TVA ----\n" ) ;
print "EUR total HT licen exo $total_HT_EUR_exo (autres operations NON imposables)\n" ;
print "EUR total HT suppo exo $total_HT_EUR_sup_exo (autres operations NON imposables)\n" ;
print( "---- Invoices ----\n" ) ;
print "EUR total $total_eur\n" ;
print "EUR total HT exo $total_HT_EUR_exo\n" ;
print "EUR total HT assuj $total_HT_EUR_ass\n" ;
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 "EUR total HT sup exo $total_HT_EUR_sup_exo\n" ;
print "Nb invoice $nb_invoice ( from $first_invoice_paypal to $last_invoice )\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 canceled ($nb_invoice_canceled) @invoice_canceled\n" ;
print "Nb invoice suspended ($nb_invoice_suspended) @invoice_suspended\n" ; print "Nb invoice suspended ($nb_invoice_suspended) @invoice_suspended\n" ;
@ -196,8 +222,8 @@ print "Have to send invoices @invoice_not_sent\n" if ( @invoice_not_sent ) ;
my $total_eur2 = $total_HT_EUR_exo + $total_HT_EUR_ass + $total_TVA_EUR + $total_HT_EUR_sup + $total_TVA_EUR_sup + $total_HT_EUR_sup_exo ; my $total_eur2 = $total_HT_EUR_exo + $total_HT_EUR_ass + $total_TVA_EUR + $total_HT_EUR_sup + $total_TVA_EUR_sup + $total_HT_EUR_sup_exo ;
$total_eur2 = sprintf('%2.2f', $total_eur2) ; $total_eur2 = sprintf('%2.2f', $total_eur2) ;
print "$total_eur != $total_eur2 = $total_HT_EUR_exo + $total_HT_EUR_ass + $total_TVA_EUR + $total_HT_EUR_sup + $total_TVA_EUR_sup + $total_HT_EUR_sup_exo\n" print "$total_eur_invoice_from_eur_usd != $total_eur2 = $total_HT_EUR_exo + $total_HT_EUR_ass + $total_TVA_EUR + $total_HT_EUR_sup + $total_TVA_EUR_sup + $total_HT_EUR_sup_exo\n"
if ( $total_eur != $total_eur2 ) ; if ( $total_eur_invoice_from_eur_usd != $total_eur2 ) ;
sub parse_one_line_io { sub parse_one_line_io {
my $csv = shift ; my $csv = shift ;
@ -375,6 +401,7 @@ sub tests {
tests_invoice_00000( ) ; tests_invoice_00000( ) ;
#tests_exportbnc( ) ; #tests_exportbnc( ) ;
tests_tva_rate( ) ; tests_tva_rate( ) ;
tests_tva_rate_str( ) ;
} }
sub compute_line { sub compute_line {
@ -1086,6 +1113,34 @@ sub tests_tva_rate {
} }
sub tva_rate_str {
my $date_aaaa_mm_jj = shift ;
if ( '2014_01_01' gt $date_aaaa_mm_jj ) {
#print "tva_rate 0.196\n" ;
return( '19,60\%' ) ;
}
if ( '2014_01_01' le $date_aaaa_mm_jj ) {
return( '20\%' ) ;
}
#print "tva_rate 0\n" ;
return( '' ) ;
}
sub tests_tva_rate_str {
ok( '19,60\%' eq tva_rate_str( '2013_01_01' ), 'tva_rate_str: old 0.196' ) ;
ok( '19,60\%' eq tva_rate_str( '2013_12_31' ), 'tva_rate_str: old 0.196' ) ;
ok( '20,00\%' eq tva_rate_str( '2014_01_01' ), 'tva_rate_str: new 0.2' ) ;
ok( '20,00\%' eq tva_rate_str( '2014_12_31' ), 'tva_rate_str: new 0.2' ) ;
ok( '20,00\%' eq tva_rate_str( '2050_01_01' ), 'tva_rate_str: new 0.2' ) ;
ok( '20,00\%' eq tva_rate_str( '2050_12_31' ), 'tva_rate_str: new 0.2' ) ;
return( 0 ) ;
}
sub tva_line { sub tva_line {
my( $Devise, $Montant2, $Pays, $Nom_Option_1, $Valeur_Option_1, $Titre_de_l_objet, $Date ) = @_ ; my( $Devise, $Montant2, $Pays, $Nom_Option_1, $Valeur_Option_1, $Titre_de_l_objet, $Date ) = @_ ;
my( $montant_HT_EUR_exo, $montant_HT_EUR_ass, $montant_TVA_EUR ) = ( 0, 0, 0 ) ; my( $montant_HT_EUR_exo, $montant_HT_EUR_ass, $montant_TVA_EUR ) = ( 0, 0, 0 ) ;
@ -1165,8 +1220,8 @@ sub tva_stuff {
( 'France' eq $Pays ) ( 'France' eq $Pays )
) { ) {
$priceHT = sprintf('%2.2f', $Hors_taxe / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) ) ; $priceHT = sprintf('%2.2f', $Hors_taxe / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) ) ;
$tvaFR = '19,60\%'; $tvaFR = tva_rate_str( $date_aaaa_mm_jj ) ;
$tvaEN = ''; $tvaEN = '' ;
$priceTVA = sprintf('%2.2f', $Hors_taxe / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) * tva_rate( $date_aaaa_mm_jj ) ) ; $priceTVA = sprintf('%2.2f', $Hors_taxe / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) * tva_rate( $date_aaaa_mm_jj ) ) ;
$priceTTC = sprintf('%2.2f', $Hors_taxe) ; $priceTTC = sprintf('%2.2f', $Hors_taxe) ;
$HTorTTC = 'TTC' ; $HTorTTC = 'TTC' ;

1448
W/paypal_reply/paypal_bilan_1.74 Executable file

File diff suppressed because it is too large Load diff

1372
W/paypal_reply/paypal_bilan_1.75 Executable file

File diff suppressed because it is too large Load diff

1347
W/paypal_reply/paypal_bilan_1.76 Executable file

File diff suppressed because it is too large Load diff

1417
W/paypal_reply/paypal_bilan_1.77 Executable file

File diff suppressed because it is too large Load diff

1445
W/paypal_reply/paypal_bilan_1.78 Executable file

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# $Id: paypal_build_invoices,v 1.63 2014/01/18 01:26:53 gilles Exp gilles $ # $Id: paypal_build_invoices,v 1.71 2014/05/20 20:13:45 gilles Exp gilles $
# usage: sh paypal_build_invoices /g/var/paypal_invoices/???? # usage: sh paypal_build_invoices /g/var/paypal_invoices/????
@ -45,8 +45,13 @@ cp /home/gilles/public_html/AGIL/factures/000/facture_imapsync-000.tex /g/var/pa
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 2891 /g/paypal/paypal_2013_10_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 2891 /g/paypal/paypal_2013_10_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 2973 /g/paypal/paypal_2013_11_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 2973 /g/paypal/paypal_2013_11_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3040 /g/paypal/paypal_2013_12_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3040 /g/paypal/paypal_2013_12_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3094 /g/paypal/paypal_2014_01_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3163 /g/paypal/paypal_2014_02_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3205 /g/paypal/paypal_2014_03_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3251 /g/paypal/paypal_2014_04_complet.csv
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3297 /g/paypal/paypal_2014_05_complet.csv
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3094 /g/paypal/paypal_2014_01_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 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 : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 214 /g/paypal/paypal_2010_12_complet.csv
@ -86,9 +91,13 @@ cp /home/gilles/public_html/AGIL/factures/000/facture_imapsync-000.tex /g/var/pa
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 2891 /g/paypal/paypal_2013_10_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 2891 /g/paypal/paypal_2013_10_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 2973 /g/paypal/paypal_2013_11_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 2973 /g/paypal/paypal_2013_11_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3040 /g/paypal/paypal_2013_12_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3040 /g/paypal/paypal_2013_12_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3094 /g/paypal/paypal_2014_01_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3163 /g/paypal/paypal_2014_02_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3205 /g/paypal/paypal_2014_03_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3251 /g/paypal/paypal_2014_04_complet.csv
set -x set -x
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3094 /g/paypal/paypal_2014_01_complet.csv /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3297 /g/paypal/paypal_2014_05_complet.csv
set +x set +x
# La totale # La totale
@ -96,25 +105,32 @@ set +x
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug \ : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug \
--first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093
1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298 1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298
2625 2626 2970 2971 2972 3093' \ 2625 2626 2970 2971 2972 3093 3296' \
/g/paypal/paypal_201?_??_complet.csv /g/paypal/paypal_201?_??_complet.csv
set -v set -v
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan \ : /g/public_html/imapsync/W/paypal_reply/paypal_bilan \
--first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093
1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298 1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298
2625 2626 2970 2971 2972 3093' \ 2625 2626 2970 2971 2972 3093 3296' \
/g/paypal/paypal_201?_??_complet.csv /g/paypal/paypal_201?_??_complet.csv
set +v set +v
# 2012
#echo 2012 #echo 2012
#set -v #set -v
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan \ : /g/public_html/imapsync/W/paypal_reply/paypal_bilan \
--first_in 1335 --usdeur 1.2952 --bnc --avoid_numbers '1652 1653 2131 2132 2295 2296 2297 2298' \ --first_in 1335 --usdeur 1.2952 --avoid_numbers '1652 1653 2131 2132 2295 2296 2297 2298' \
/g/paypal/paypal_2012_??_complet.csv /g/paypal/paypal_2012_??_complet.csv
#set +v #set +v
#echo 2013
#set -v
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan \
--first_in 2299 --avoid_numbers '2625 2626 2970 2971 2972' \
/g/paypal/paypal_2013_??_complet.csv
#set +v
echo 'sh paypal_build_invoices /g/var/paypal_invoices/3???' echo 'sh paypal_build_invoices /g/var/paypal_invoices/3???'

View file

@ -1,6 +1,6 @@
#!/usr/bin/perl #!/usr/bin/perl
# $Id: paypal_build_reply,v 1.21 2013/03/27 14:42:59 gilles Exp gilles $ # $Id: paypal_build_reply,v 1.26 2014/05/22 10:35:33 gilles Exp gilles $
use warnings; use warnings;
use strict; use strict;
@ -28,22 +28,31 @@ usage() and exit if ($help or ! $numopt) ;
$msg_id_file = $ARGV[1]; $msg_id_file = $ARGV[1];
$msg_id = firstline($msg_id_file); $msg_id = firstline($msg_id_file);
$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 = "http://ks.lamiral.info/imapsync/dist/$path_last/" ;
$debug and print "Hi!\n" ; $debug and print "Hi!\n" ;
while(<>) { my @input = <> ;
next if ( ! /^(.*Num.+ro de transaction.*)$/ );
while( my $line = shift @input ) {
next if ( $line !~ /^(.*Num.+ro de transaction.*)$/ );
$paypal_line = $1; $paypal_line = $1;
$paypal_info = "===== Paypal id =====\n$paypal_line\n"; $paypal_info = "===== Paypal id =====\n$paypal_line\n";
$debug and print "$paypal_info" ; $debug and print "$paypal_info" ;
last; last;
} }
while(<>) { while( my $line = shift @input ) {
if ( /^Vous avez re.*paiement d'un montant de (.*) de la part de (.*) \((.*)\)/) { if ( $line =~ /^Vous avez re.*paiement d'un montant de (.*) de la part de (.*) \((.*)\)/) {
($amount, $name, $email) = ($1, $2, $3); ($amount, $name, $email) = ($1, $2, $3);
$debug and print "1 ($amount, $name, $email)\n" ; $debug and print "1 ($amount, $name, $email)\n" ;
last; last;
} }
if ( /^Vous avez re.*paiement d'un montant de (.*) de la part de (.*)/) { if ( $line =~ /^Vous avez re.*paiement d'un montant de (.*) de la part de (.*)/) {
($amount, $name, $email) = ($1, "", $2); ($amount, $name, $email) = ($1, "", $2);
$debug and print "2 ($amount, $name, $email)\n" ; $debug and print "2 ($amount, $name, $email)\n" ;
last; last;
@ -51,58 +60,54 @@ 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 = "http://ks.lamiral.info/imapsync/dist/$path_last/" ;
$debug and print "[$amount] [$name] [$email] [$paypal_line]\n"; $debug and print "[$amount] [$name] [$email] [$paypal_line]\n";
$amount =~ /^.*?(\d+.*)/ ;
my $amount_ascii = $1 || '' ;
while(<>) { while( my $line = shift @input ) {
if ( /^Acheteur/ ) { if ( $line =~ /^Acheteur/ ) {
$buyer .= "===== Acheteur =====\n"; $buyer .= "===== Acheteur =====\n";
$debug and print "1 $buyer\n" ; $debug and print "1 $buyer\n" ;
last; last;
} }
if ( /^Informations sur l'acheteur/ ) { if ( $line =~ /^Informations sur l'acheteur/ ) {
$buyer .= "===== Acheteur =====\n"; $buyer .= "===== Acheteur =====\n";
chomp( $name = <> ); chomp( $name = shift @input );
$buyer .= "$name\n" ; $buyer .= "$name\n" ;
$debug and print "2 $buyer\n" ; $debug and print "2 $buyer\n" ;
last; last;
} }
} }
while(<>) { while( my $line = shift @input ) {
$buyer .= $_ if ( ! /^-----------------------------------/ ); $buyer .= $line if ( $line !~ /^-----------------------------------/ );
last if ( /^-----------------------------------/ ); last if ( $line =~ /^-----------------------------------/ );
} }
$debug and print "3 $buyer\n" ; $debug and print "3 $buyer\n" ;
while(<>) { while( my $line = shift @input ) {
$debug and print "Search Description [$_]\n" ; $debug and print "Search Description [$line]\n" ;
next if ( ! /Description..?:(.*)/ ); next if ( $line !~ /Description..?:(.*)/ ) ;
$object = $1 ; $object = $1 ;
$description = "===== Details =====\n"; $description = "===== Details =====\n" ;
$description .= $_; $description .= $line ;
last; last ;
} }
$debug and print "[$object] [$description]\n"; $debug and print "[$object] [$description]\n" ;
while(<>) { while( my $line = shift @input ) {
$debug and print "LINE:$_" ; $debug and print "LINE:$line" ;
$description .= $_; $description .= $line;
last if ( /^Paiement envoy/ ); last if ( $line =~ /^Paiement envoy/ );
last if ( /^N.*d'avis de r.*ception/ ); last if ( $line =~ /^N.*d'avis de r.*ception/ );
} }
my $address = 'gilles.lamiral@laposte.net'; my $address = 'gilles.lamiral@laposte.net';
my $address2 = 'gilles@lamiral.info'; my $address2 = 'gilles@lamiral.info';
my $rcstag = '$Id: paypal_build_reply,v 1.21 2013/03/27 14:42:59 gilles Exp gilles $'; my $rcstag = '$Id: paypal_build_reply,v 1.26 2014/05/22 10:35:33 gilles Exp gilles $';
my $download_info = "You will find the latest imapsync.exe binary (release $release_exe) 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: and the latest imapsync source code (release $release) at the following link:
@ -110,55 +115,46 @@ $url" ;
my $next_releases = my $next_releases =
"Next imapsync releases will be available to you for lifetime without extra payment. "Next imapsync releases will be available to you for lifetime without extra payment.
You'll be subscribed to a newsletter [imapsync_update] announcing new releases.
You are subscribed to a newsletter [imapsync_update] announcing new releases.
Just keep this message and ask for the new links in case you miss the newsletter. Just keep this message and ask for the new links in case you miss the newsletter.
Ask me to be unsubscribed, you can also do it yourself at
http://lists.lamiral.info/cgi-bin/mailman/listinfo/imapsync_update
Run imapsync without any argument to know if a new release is available. Run imapsync without any argument to know if a new release is available.
A permanent link to last release is http://imapsync.lamiral.info/paypal_return.shtml A permanent link to last release is http://imapsync.lamiral.info/paypal_return.shtml
also written on the invoice you'll receive soon (I edit invoices once a week or on demand)." ; also written on the invoice you'll receive soon, I edit invoices once a week or on demand." ;
my $support_info = 'For imapsync professional support,
my $thanks_software = "I thank you for buying and using imapsync, contact me (Gilles LAMIRAL) by email or phone at:
I wish you successful transfers!" ;
my $thanks_support = "I thank you for buying support and using imapsync,
I wish you successful transfers, I will help you to succeed." ;
my $support_info = 'Now you have access to imapsync professional support.
You can contact me (Gilles LAMIRAL) by email or phone.
Email address: gilles.lamiral@laposte.net. Email address: gilles.lamiral@laposte.net.
Professionnal phone number: +33 951 84 42 42 (France) Professionnal phone number: +33 951 84 42 42 (France)
Mobile phone number: +33 620 79 76 06 (France). Mobile phone number: +33 620 79 76 06 (France).
I can call you back for free in many countries on landline telephone numbers I can call you back toll-free in many countries on landline telephone numbers
and to mobile numbers in the United States and France. So do not hesitate and to mobile numbers in the United States and France. So do not hesitate
to send me a note if you need vocal support.' ; to send me a note if you need vocal support.' ;
my $thanks_software = "I thank you for buying and using imapsync,
I wish you successful transfers!" ;
my $text_software = "$download_info\n my $text_software = "$download_info\n
$next_releases\n $next_releases\n
$support_info\n
You will receive an invoice soon.\n You will receive an invoice soon.\n
$thanks_software" ; $thanks_software" ;
my $text_support = "$support_info\n my $subject_software = "[imapsync download] imapsync release $release [$amount_ascii from $email]" ;
You will receive an invoice soon.\n
$thanks_support" ;
my $subject_software = "[imapsync download] imapsync release $release [$email]" ;
my $subject_support = "[imapsync support] imapsync release $release [$email]" ;
my $subject ; my $subject ;
my $text ; my $text ;
if ( $object =~ m{imapsync support} ) { $text = $text_software ;
$text = $text_support ; $subject = $subject_software ;
$subject = $subject_support ;
}else{
$text = $text_software ;
$subject = $subject_software ;
}
my $message = <<EOM my $message = <<EOM
@ -178,7 +174,7 @@ $buyer
$description $description
==== Vendeur ==== ==== Vendeur ====
Gilles LAMIRAL Gilles LAMIRAL
4 La Billais La Billais
35580 Baulon 35580 Baulon
FRANCE FRANCE

View file

@ -1,13 +1,13 @@
#!/bin/sh #!/bin/sh
# $Id: paypal_run_dev,v 1.8 2013/02/08 14:58:47 gilles Exp gilles $ # $Id: paypal_run_dev,v 1.10 2014/03/31 09:19:43 gilles Exp gilles $
set -e set -e
#set -x #set -x
# Add path to commands at home # Add path to commands at home
PATH=$PATH:/g/public_html/imapsync/W/paypal_reply PATH=$PATH:/g/public_html/imapsync/W/paypal_reply
PERL5LIB=/g/public_html/imapsync/W/Mail-IMAPClient-3.33/lib PERL5LIB=/g/public_html/imapsync/W/Mail-IMAPClient-3.35/lib
export PERL5LIB export PERL5LIB
test -f /g/public_html/imapsync/W/paypal_reply/paypal_functions \ test -f /g/public_html/imapsync/W/paypal_reply/paypal_functions \

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# $Id: paypal_send_invoices,v 1.10 2013/11/17 06:36:39 gilles Exp gilles $ # $Id: paypal_send_invoices,v 1.12 2014/05/27 11:16:15 gilles Exp gilles $
# usages: # usages:
# sh paypal_send_invoices /g/var/paypal_invoices/147 # sh paypal_send_invoices /g/var/paypal_invoices/147
@ -36,10 +36,10 @@ send_invoice() {
} }
more facture_message.txt more facture_message.txt
echo '====== END of message ======' echo '====== END of message ======'
mailq
test -f "SENT_TO_$email" || acroread facture_imapsync-${invoice}.pdf& test -f "SENT_TO_$email" || acroread facture_imapsync-${invoice}.pdf&
echo "Send this invoice ${invoice} to $email?" echo "Send this invoice ${invoice} to $email?"
read r < /dev/tty read r < /dev/tty
mailq
echo SAID "[$r]" echo SAID "[$r]"
test X"$r" = Xy && { test X"$r" = Xy && {
echo | mutt -H facture_message.txt -a facture_imapsync-${invoice}.pdf facture_imapsync-${invoice}.pdf.asc -- echo | mutt -H facture_message.txt -a facture_imapsync-${invoice}.pdf facture_imapsync-${invoice}.pdf.asc --
@ -47,7 +47,7 @@ send_invoice() {
} }
} }
echo $0 '/g/var/paypal_invoices/2???' echo $0 '/g/var/paypal_invoices/3???'
for d in "$@"; do for d in "$@"; do
( send_invoice "$d" ) ( send_invoice "$d" )

View file

@ -5,7 +5,7 @@
<title>imapsync download</title> <title>imapsync download</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="2013-04-18T15:52:05+0200"/> <meta name="date" content="2014-04-17T13:01:45+0200"/>
<meta name="copyright" content=""/> <meta name="copyright" content=""/>
<meta name="keywords" content=""/> <meta name="keywords" content=""/>
<meta name="description" content=""/> <meta name="description" content=""/>
@ -54,10 +54,18 @@ Ask for it if you need it before.</p>
This current page will be updated to reflect the lastest release of imapsync.<br/> This current page will be updated to reflect the lastest release of imapsync.<br/>
You will be soon subscribed to the newsletter announcing new releases (and only new releases).</p> You will be soon subscribed to the newsletter announcing new releases (and only new releases).</p>
<p>To explain your <b>specific needs</b>, find <b>best solutions</b> for them, <b>avoid loosing time</b>, <br/>
and then <b>succeed</b> your migration <b>quickly</b> you can buy <p>For <b>professionnal support</b>, in order to explain your <b>specific needs</b>,
<a href="../#buy_support"><b>professionnal support</b></a>. find <b>best solutions</b> for them, <b>avoid loosing time</b>,
</p> and then <b>succeed</b> your migration <b>quickly</b>, <b>contact me</b>
(Gilles LAMIRAL) by email or phone at:</p>
<ul>
<li>Email address: <b>gilles.lamiral@laposte.net</b>.</li>
<li>Professionnal phone number: <b>+33 951 84 42 42</b> (in France) I can <b>call you back</b> toll-free in many countries.</li>
<li>Mobile phone number: <b>+33 620 79 76 06</b> (in France).</li>
</ul>
<p><b>I thank you</b> again for buying and using imapsync,<br/> <p><b>I thank you</b> again for buying and using imapsync,<br/>
<b>I wish you successful imap transfers!</b></p> <b>I wish you successful imap transfers!</b></p>
@ -83,7 +91,7 @@ gilles.lamiral@laposte.net</p>
<!--#config timefmt="%D" --> <!--#config timefmt="%D" -->
<!--#config timefmt="%A %B %d, %Y" --> <!--#config timefmt="%A %B %d, %Y" -->
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b><br/> <b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b><br/>
($Id: paypal_return.shtml,v 1.14 2013/04/18 13:53:25 gilles Exp gilles $) ($Id: paypal_return.shtml,v 1.15 2014/05/21 01:22:13 gilles Exp gilles $)
</p> </p>
<!-- Google Code for Achat imapsync Conversion Page --> <!-- Google Code for Achat imapsync Conversion Page -->

View file

@ -1,11 +1,46 @@
REM $Id: test.bat,v 1.10 2012/12/22 20:00:12 gilles Exp gilles $ REM $Id: test.bat,v 1.11 2014/05/22 10:15:45 gilles Exp gilles $
cd C:\msys\1.0\home\Admin\imapsync cd /D %~dp0
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mDate::Manip -mFile::Spec -mDigest::HMAC_MD5 -e ''
@ECHO ==== Just load modules
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL ^
-mDigest::HMAC_MD5 -mAuthen::NTLM -e -mTime::HiRes ^
-mData::Uniqid -mURI::Escape -mIO::Tee ""
perl ./imapsync perl ./imapsync
perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --delete2 --expunge2
perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --delete2 --expunge2 --folder INBOX --nofoldersizes @ECHO ==== All 8 combinaisons between ssl1/tls1 ssl2/tls2 justconnect/justlogin
perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --delete2 --expunge2 --folder INBOX --nofoldersizes --usecache
@ECHO ==== 1 --SSL1 --SSL2 --JUSTCONNECT
perl ./imapsync --host1 p --ssl1 --user1 tata --passfile1 secret.tata --host2 p --ssl2 --user2 titi --passfile2 secret.titi --justconnect
@ECHO ==== 2 --SSL1 --SSL2 --JUSTLOGIN
perl ./imapsync --host1 p --ssl1 --user1 tata --passfile1 secret.tata --host2 p --ssl2 --user2 titi --passfile2 secret.titi --justlogin
@ECHO ==== 3 --TLS1 --TLS2 --JUSTCONNECT
perl ./imapsync --host1 p --tls1 --user1 tata --passfile1 secret.tata --host2 p --tls2 --user2 titi --passfile2 secret.titi --justconnect
@ECHO ==== 4 --TLS1 --TLS2 --JUSTLOGIN
perl ./imapsync --host1 p --tls1 --user1 tata --passfile1 secret.tata --host2 p --tls2 --user2 titi --passfile2 secret.titi --justlogin
@ECHO ==== 5 --SSL1 --TLS2 --JUSTCONNECT
perl ./imapsync --host1 p --ssl1 --user1 tata --passfile1 secret.tata --host2 p --tls2 --user2 titi --passfile2 secret.titi --justconnect
@ECHO ==== 6 --SSL1 --TLS2 --JUSTLOGIN
perl ./imapsync --host1 p --ssl1 --user1 tata --passfile1 secret.tata --host2 p --tls2 --user2 titi --passfile2 secret.titi --justlogin
@ECHO ==== 7 --TLS1 --SSL2 --JUSTCONNECT
perl ./imapsync --host1 p --tls1 --user1 tata --passfile1 secret.tata --host2 p --ssl2 --user2 titi --passfile2 secret.titi --justconnect
@ECHO ==== 8 --TLS1 --SSL2 --JUSTLOGIN
perl ./imapsync --host1 p --tls1 --user1 tata --passfile1 secret.tata --host2 p --ssl2 --user2 titi --passfile2 secret.titi --justlogin
@ECHO ==== All folders in ssl
perl ./imapsync --host1 p --ssl1 --user1 tata --passfile1 secret.tata --host2 p --ssl2 --user2 titi --passfile2 secret.titi --delete2 --expunge2
@ECHO ==== INBOX only
perl ./imapsync --host1 p --tls1 --user1 tata --passfile1 secret.tata --host2 p --tls2 --user2 titi --passfile2 secret.titi --delete2 --expunge2 --folder INBOX --nofoldersizes
@ECHO ==== INBOX only and --usecache
perl ./imapsync --host1 p --tls1 --user1 tata --passfile1 secret.tata --host2 p --ssl2 --user2 titi --passfile2 secret.titi --delete2 --expunge2 --folder INBOX --nofoldersizes --usecache

View file

@ -1,65 +1,64 @@
REM $Id: test2.bat,v 1.15 2013/05/06 08:15:39 gilles Exp gilles $ @REM $Id: test2.bat,v 1.16 2014/05/22 14:20:07 gilles Exp gilles $
REM @REM
cd C:\msys\1.0\home\Admin\imapsync cd C:\msys\1.0\home\Admin\imapsync
REM perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --delete2 --expunge2 --folder INBOX @REM perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --delete2 --expunge2 --folder INBOX
REM perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --delete2 --expunge1 --expunge2 --folder INBOX --usecache @REM perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --delete2 --expunge1 --expunge2 --folder INBOX --usecache
REM imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --justfolders --nofoldersize --folder INBOX.yop.yap --sep1 / --regextrans2 "s,/,_," @REM imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --justfolders --nofoldersize --folder INBOX.yop.yap --sep1 / --regextrans2 "s,/,_,"
REM imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --nofoldersize --folder INBOX.yop.yap --regexflag 's/\\Answered//g' --debug > out.txt @REM imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --nofoldersize --folder INBOX.yop.yap --regexflag 's/\\Answered//g' --debug > out.txt
REM perl imapsync --version @REM perl imapsync --version
REM perl imapsync --tests_debug @REM perl imapsync --tests_debug
REM imapsync.exe ^ @REM imapsync.exe ^
REM --host1 p --user1 big1 --passfile1 secret.big1 ^ @REM --host1 p --user1 big1 --passfile1 secret.big1 ^
REM --host2 p --user2 big2 --passfile2 secret.big2 ^ @REM --host2 p --user2 big2 --passfile2 secret.big2 ^
REM --folder INBOX.bigmail @REM --folder INBOX.bigmail
REM perl imapsync @REM perl imapsync
REM perl imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --nofoldersize --folder INBOX.yop.yap --regexflag "s/\\ /\\/g" --debugflags @REM perl imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --nofoldersize --folder INBOX.yop.yap --regexflag "s/\\ /\\/g" --debugflags
REM FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.txt) DO imapsync ^ @REM FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (file.txt) DO imapsync ^
REM --host1 imap.side1.org --user1 %%G --password1 %%H ^ @REM --host1 imap.side1.org --user1 %%G --password1 %%H ^
REM --host2 imap.side2.org --user2 %%I --password2 %%J @REM --host2 imap.side2.org --user2 %%I --password2 %%J
REM imapsync --host1 p --user1 tata --passfile1 secret.tata ^ @REM imapsync --host1 p --user1 tata --passfile1 secret.tata ^
REM --host2 p --user2 dollar --password2 "$%%&<>|^"^" --justlogin @REM --host2 p --user2 dollar --password2 "$%%&<>|^"^" --justlogin
REM imapsync --host1 p --user1 tata --passfile1 secret.tata ^ @REM imapsync --host1 p --user1 tata --passfile1 secret.tata ^
REM --host2 p --user2 equal --password2 "==lalala" --justlogin --debugimap2 @REM --host2 p --user2 equal --password2 "==lalala" --justlogin --debugimap2
REM perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata ^ @REM perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata ^
REM --host2 p --user2 titi --passfile2 secret.titi ^ @REM --host2 p --user2 titi --passfile2 secret.titi ^
REM --folder INBOX.useuid --useuid --debugcache --delete2 @REM --folder INBOX.useuid --useuid --debugcache --delete2
REM perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata ^ @REM perl ./imapsync --host1 p --user1 tata --passfile1 secret.tata ^
REM --host2 imap.gmail.com --ssl2 --user2 gilles.lamiral@gmail.com --passfile2 secret.gilles_gmail ^ @REM --host2 imap.gmail.com --ssl2 --user2 gilles.lamiral@gmail.com --passfile2 secret.gilles_gmail ^
REM --usecache --nofoldersizes --folder INBOX --regextrans2 "s(INBOX)([Gmail]/te*st)" @REM --usecache --nofoldersizes --folder INBOX --regextrans2 "s(INBOX)([Gmail]/te*st)"
REM perl ./imapsync --host1 imap.gmail.com --port1 993 --ssl1 --host2 imap.bigs.dk --justconnect @REM perl ./imapsync --host1 imap.gmail.com --port1 993 --ssl1 --host2 imap.bigs.dk --justconnect
REM imapsync.exe --host1 imap.gmail.com --port1 993 --ssl1 --host2 imap.bigs.dk --justconnect @REM imapsync.exe --host1 imap.gmail.com --port1 993 --ssl1 --host2 imap.bigs.dk --justconnect
REM @echo off @REM @ECHO off
SET csvfile=file.txt SET csvfile=file.txt
DATE /t FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (%csvfile%) DO (
TIME /t @ECHO ==== Syncing from account %%G to account %%I ====
@ECHO.
FOR /f "tokens=1-4 delims=-/: " %%a IN ('DATE /t') DO (SET mydate=%%c_%%a_%%b_%%d) imapsync ^
FOR /f "tokens=1-2 delims=-/: " %%a IN ('TIME /t') DO (SET mytime=%%a_%%b)
ECHO %mydate%_%mytime%
if not exist LOG mkdir LOG
FOR /F "tokens=1,2,3,4 delims=; eol=#" %%G IN (%csvfile%) DO ECHO syncing to user %%I & imapsync ^
--host1 imap.side1.org --user1 %%G --password1 %%H ^ --host1 imap.side1.org --user1 %%G --password1 %%H ^
--host2 imap.side2.org --user2 %%I --password2 %%J ^ --host2 imap.side2.org --user2 %%I --password2 %%J
> LOG\log_%%I_%mydate%_%mytime%.txt 2>&1
ECHO Loop finished @ECHO.==== End syncing from account %%G to account %%I ====
ECHO log files are in LOG directory @ECHO.
PAUSE )
@ECHO Loop finished!
@ECHO Log files are in LOG_imapsync directory
@PAUSE

View file

@ -1,20 +1,9 @@
REM $Id: test3.bat,v 1.12 2014/05/22 10:15:14 gilles Exp gilles $
cd /D %~dp0 cd /D %~dp0
REM E: perl ./imapsync --host1 lamiral.info --tls1 --user1 tata --passfile1 secret.tata --host2 lamiral.info --tls2 --user2 titi --passfile2 secret.titi --justconnect --debugimap
REM cd .\temp EXIT
REM cd \
REM imapsync.exe --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --usecache --tmpdir "E:\TEMP" --include "blanc"
REM PAUSE
REM perl imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --usecache --tmpdir "E:\TEMP"
REM perl imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --usecache
mkdir "\\?\E:\TEMP\lala"
REM mkdir "\\?\E:\TEMP\01_______\01_______\02_______\03_______\04_______\05_______\06_______\07_______\08_______\09_______\10_______\11_______\12_______\13_______\14_______\15_______\16_______\17_______\18_______\19_______\20_______\21_______\22_______\22_______\24_______\25_______\26_______\27_______\28_______\29_______\30_______\"
perl imapsync --tests_debug --tmpdir "\\?\E:\TEMP\long"
perl imapsync --tests --tmpdir "\\?\E:\TEMP\long"

20
W/test3_longdir.bat Normal file
View file

@ -0,0 +1,20 @@
cd /D %~dp0
REM E:
REM cd .\temp
REM cd \
REM imapsync.exe --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --usecache --tmpdir "E:\TEMP" --include "blanc"
REM PAUSE
REM perl imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --usecache --tmpdir "E:\TEMP"
REM perl imapsync --host1 p --user1 tata --passfile1 secret.tata --host2 p --user2 titi --passfile2 secret.titi --usecache
mkdir "\\?\E:\TEMP\lala"
REM mkdir "\\?\E:\TEMP\01_______\01_______\02_______\03_______\04_______\05_______\06_______\07_______\08_______\09_______\10_______\11_______\12_______\13_______\14_______\15_______\16_______\17_______\18_______\19_______\20_______\21_______\22_______\22_______\24_______\25_______\26_______\27_______\28_______\29_______\30_______\"
perl imapsync --tests_debug --tmpdir "\\?\E:\TEMP\long"
perl imapsync --tests --tmpdir "\\?\E:\TEMP\long"

View file

@ -1,10 +1,39 @@
REM $Id: test_exe.bat,v 1.11 2014/05/22 10:13:34 gilles Exp gilles $
cd /D %~dp0
cd C:\msys\1.0\home\Admin\imapsync @REM EXIT
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mFile::Spec -mDigest::HMAC_MD5 -e ''
.\imapsync.exe .\imapsync.exe
.\imapsync.exe --host1 p --user1 toto --passfile1 secret.toto --host2 p --user2 titi --passfile2 secret.titi --ssl1 --ssl2 --justconnect
@ECHO ==== All 8 combinaisons between ssl1/tls1 ssl2/tls2 justconnect/justlogin
@ECHO
@ECHO ==== 1 --SSL1 --SSL2 --JUSTCONNECT
.\imapsync.exe --host1 p --ssl1 --user1 tata --passfile1 secret.tata --host2 p --ssl2 --user2 titi --passfile2 secret.titi --justconnect
@ECHO ==== 2 --SSL1 --SSL2 --JUSTLOGIN
.\imapsync.exe --host1 p --ssl1 --user1 tata --passfile1 secret.tata --host2 p --ssl2 --user2 titi --passfile2 secret.titi --justlogin
@ECHO ==== 3 --TLS1 --TLS2 --JUSTCONNECT
.\imapsync.exe --host1 p --tls1 --user1 tata --passfile1 secret.tata --host2 p --tls2 --user2 titi --passfile2 secret.titi --justconnect
@ECHO ==== 4 --TLS1 --TLS2 --JUSTLOGIN
.\imapsync.exe --host1 p --tls1 --user1 tata --passfile1 secret.tata --host2 p --tls2 --user2 titi --passfile2 secret.titi --justlogin
@ECHO ==== 5 --SSL1 --TLS2 --JUSTCONNECT
.\imapsync.exe --host1 p --ssl1 --user1 tata --passfile1 secret.tata --host2 p --tls2 --user2 titi --passfile2 secret.titi --justconnect
@ECHO ==== 6 --SSL1 --TLS2 --JUSTLOGIN
.\imapsync.exe --host1 p --ssl1 --user1 tata --passfile1 secret.tata --host2 p --tls2 --user2 titi --passfile2 secret.titi --justlogin
@ECHO ==== 7 --TLS1 --SSL2 --JUSTCONNECT
.\imapsync.exe --host1 p --tls1 --user1 tata --passfile1 secret.tata --host2 p --ssl2 --user2 titi --passfile2 secret.titi --justconnect
@ECHO ==== 8 --TLS1 --SSL2 --JUSTLOGIN
.\imapsync.exe --host1 p --tls1 --user1 tata --passfile1 secret.tata --host2 p --ssl2 --user2 titi --passfile2 secret.titi --justlogin
.\imapsync.exe --host1 p --user1 toto --passfile1 secret.toto --host2 p --user2 titi --passfile2 secret.titi --ssl1 --ssl1_SSL_version SSLv3 --ssl2 --justconnect .\imapsync.exe --host1 p --user1 toto --passfile1 secret.toto --host2 p --user2 titi --passfile2 secret.titi --ssl1 --ssl1_SSL_version SSLv3 --ssl2 --justconnect
.\imapsync.exe --host1 p --user1 toto --passfile1 secret.toto --host2 p --user2 titi --passfile2 secret.titi --ssl1 --ssl1_SSL_version SSLv3 --ssl2 --justlogin .\imapsync.exe --host1 p --user1 toto --passfile1 secret.toto --host2 p --user2 titi --passfile2 secret.titi --ssl1 --ssl1_SSL_version SSLv3 --ssl2 --justlogin
.\imapsync.exe --host1 p --user1 toto --passfile1 secret.toto --host2 p --user2 titi --passfile2 secret.titi --ssl1 --ssl2 --delete2 .\imapsync.exe --host1 p --user1 toto --passfile1 secret.toto --host2 p --user2 titi --passfile2 secret.titi --ssl1 --ssl2 --delete2

View file

View file

@ -0,0 +1 @@
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

View file

@ -0,0 +1 @@
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

View file

@ -0,0 +1 @@
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

View file

@ -0,0 +1 @@
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show more