This commit is contained in:
Nick Bebout 2011-03-12 02:45:02 +00:00
parent 34c3add845
commit 804a713af1
17 changed files with 462 additions and 235 deletions

11
CREDITS
View file

@ -1,5 +1,5 @@
#!/bin/cat
# $Id: CREDITS,v 1.143 2010/08/15 11:18:09 gilles Exp gilles $
# $Id: CREDITS,v 1.144 2010/09/06 01:08:41 gilles Exp gilles $
If you want to make a donation to the author, Gilles LAMIRAL:
@ -20,6 +20,15 @@ to remove one.
I thank very much all of these people.
Kirk Ismay
Contributed by giving money 50 USD
Fast-Serv Technologies
Contributed by giving money 10 USD
Christian Leue
Contributed by giving money 25 USD
Tony Pearse
Contributed by giving money 25 USD

View file

@ -1,17 +1,42 @@
RCS file: RCS/imapsync,v
Working file: imapsync
head: 1.344
head: 1.350
branch:
locks: strict
gilles: 1.344
gilles: 1.350
access list:
symbolic names:
keyword substitution: kv
total revisions: 344; selected revisions: 344
total revisions: 350; selected revisions: 350
description:
----------------------------
revision 1.344 locked by: gilles;
revision 1.350 locked by: gilles;
date: 2010/09/06 01:05:09; author: gilles; state: Exp; lines: +33 -24
Added --noreleasecheck option.
Added User-agent information (OS, perl version, Mail::IMAPClient version)
----------------------------
revision 1.349
date: 2010/09/06 00:25:03; author: gilles; state: Exp; lines: +71 -13
Added new release checking
----------------------------
revision 1.348
date: 2010/09/05 21:28:35; author: gilles; state: Exp; lines: +16 -18
Strong regex for month in good_date()
----------------------------
revision 1.347
date: 2010/09/05 21:12:10; author: gilles; state: Exp; lines: +61 -50
Rewrote good_date and removed Date::Manip usage.
----------------------------
revision 1.346
date: 2010/09/05 16:28:18; author: gilles; state: Exp; lines: +34 -36
Simplified default output.
----------------------------
revision 1.345
date: 2010/08/24 01:44:59; author: gilles; state: Exp; lines: +45 -45
Better output when copying messages.
----------------------------
revision 1.344
date: 2010/08/20 02:06:13; author: gilles; state: Exp; lines: +123 -49
Added function fetch_hash_2() allowing a list of uid to be fetched.
Changed fetch_hash() calls by fetch_hash_2() calls

View file

@ -1,5 +1,5 @@
# $Id: Makefile,v 1.36 2010/08/15 17:36:04 gilles Exp gilles $
# $Id: Makefile,v 1.37 2010/08/24 01:46:36 gilles Exp gilles $
.PHONY: help usage all
@ -23,7 +23,7 @@ DEB_FILE=$(DIST_NAME).deb
VERSION=$(shell perl -I./Mail-IMAPClient-2.2.9 ./imapsync --version)
all: ChangeLog README VERSION
all: ChangeLog README VERSION VERSION_EXE
.PHONY: test tests testp testf test3xx
@ -69,9 +69,10 @@ ChangeLog: imapsync
README: imapsync
perldoc -t imapsync > README
VERSION: imapsync Makefile
VERSION: imapsync
perl -I./Mail-IMAPClient-2.2.9 ./imapsync --version > VERSION
.PHONY: clean clean_tilde clean_test
clean: clean_tilde clean_man
@ -130,10 +131,11 @@ clean_dist:
.PHONY: lfo upload_lfo niouze_lfo niouze_fm public dosify_bat imapsync_cidone
upload_index: index.shtml
upload_index: index.shtml
rcsdiff index.shtml
rsync -avH index.shtml \
/home/gilles/public_html/www.linux-france.org/html/prj/imapsync/
sh ~/memo/lfo-rsync
../../public_html/www.linux-france.org/html/prj/imapsync/
sh $(HOME)/memo/lfo-rsync
.dosify_bat: build_exe.bat test_exe.bat test.bat
unix2dos build_exe.bat test.bat test_exe.bat
@ -158,6 +160,7 @@ imapsync.exe: imapsync imapsync_cidone dosify_bat
time ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/build_exe.bat'
time ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/test_exe.bat'
scp Admin@c:'C:/msys/1.0/home/Admin/imapsync/imapsync.exe' .
ssh Admin@c 'C:/msys/1.0/home/Admin/imapsync/imapsync.exe --version' > VERSION_EXE
lfo: dist niouze_lfo upload_lfo

9
README
View file

@ -3,7 +3,7 @@ NAME
Synchronise mailboxes between two imap servers. Good at IMAP migration.
More than 36 different IMAP server softwares supported with success.
$Revision: 1.344 $
$Revision: 1.350 $
SYNOPSIS
To synchronise imap account "foo" on "imap.truc.org" to imap account
@ -325,13 +325,14 @@ IMAP SERVERS
- SmarterMail, Smarter Mail 5.0 Enterprise.
- SunONE Messaging server 5.2, 6.0 (SUN JES - Java Enterprise System)
- Sun Java(tm) System Messaging Server 6.2-2.05, 6.2-7.05
- Sun Messaging Server 6.3
- Surgemail 3.6f5-5
- UW-imap servers (imap-2000b) rijkkramer IMAP4rev1 2000.287
(RedHat uses UW like 2003.338rh), v12.264 Solaris 5.7 (OSI Approved)
(http://www.washington.edu/imap/)
- UW - QMail v2.1
- Imap part of TCP/IP suite of VMS 7.3.2
- Zimbra-IMAP 3.0.1 GA 160, 3.1.0 Build 279, 4.0.5, 4.5.2, 4.5.6, 5.5.
- Zimbra-IMAP 3.0.1 GA 160, 3.1.0 Build 279, 4.0.5, 4.5.2, 4.5.6, 5.5, 6.x
Please report to the author any success or bad story with imapsync and
do not forget to mention the IMAP server software names and version on
@ -340,7 +341,7 @@ IMAP SERVERS
are useful to know the softwares. Example:
Host1 software:* OK louloutte Cyrus IMAP4 v1.5.19 server ready
Host2 software:* OK Courier-IMAP ready
Host2 software:* OK Courier-IMAP ready
You can use option --justconnect to get those lines. Example:
@ -400,5 +401,5 @@ SIMILAR SOFTWARES
Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.344 2010/08/20 02:06:13 gilles Exp gilles $
$Id: imapsync,v 1.350 2010/09/06 01:05:09 gilles Exp gilles $

4
TIME
View file

@ -1,3 +1,7 @@
360 Date::Manip away. good_date() rewriting. release check on lfo
210 Better output when copying messages. Profiling memory.
80 Gmail efficiency. Wanted! on homepage, email on list.
300 Large mailbox --maxage. Upload 1.344. imapsync.exe
150 Various. Upload 1.342
75 Fix. capability issue after authenticate.
240 Various

14
TODO
View file

@ -1,5 +1,5 @@
#!/bin/cat
# $Id: TODO,v 1.83 2010/08/20 02:12:05 gilles Exp gilles $
# $Id: TODO,v 1.85 2010/09/06 01:08:14 gilles Exp gilles $
TODO file for imapsync
----------------------
@ -21,6 +21,18 @@ Evaluate
http://www.rackspace.com/apps/email_hosting/migrations
http://www.yippiemove.com/
Evaluate memory consumption with (or better):
print qx{ ps o pid,pcpu,comm,vsz,rss,size $$ }, "\n"
Search memory leaks with
Test-Weaken Test-Memory-Cycle Devel-Cycle Devel-Leak Test-Weaken
sh -x tests.sh ll_bigmail
is a good candidate to stress memory.
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 -
to have an option to have imapsync display e.g. the subject of an
e-mail when it gets synced, rather than just the message ID and the date/time.
Add --noauthmd51 --noauthmd52 to permit noauthmd5 by host

View file

@ -1 +1 @@
1.344
1.350

1
VERSION_EXE Normal file
View file

@ -0,0 +1 @@
1.350

View file

@ -1,11 +1,10 @@
REM $Id: test.bat,v 1.6 2010/08/15 11:10:49 gilles Exp gilles $
REM $Id: build_exe.bat,v 1.3 2010/09/06 02:16:24 gilles Exp gilles $
echo Building imapsync.exe
cd C:\msys\1.0\home\Admin\imapsync
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mDate::Manip -mFile::Spec -mDigest::HMAC_MD5 -e ''
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mFile::Spec -mDigest::HMAC_MD5 -e ''
REM -M Date::Manip 6.xx buggy?
pp -o imapsync.exe -M Term::ReadKey -M IO::Socket::SSL -M Digest::HMAC_MD5 imapsync
echo Done building imapsync.exe

View file

@ -4,17 +4,17 @@
#RELEASE_FOCUS="Documentation"
#RELEASE_FOCUS="Code cleanup"
#RELEASE_FOCUS="Minor feature enhancements"
#RELEASE_FOCUS="Major feature enhancements"
RELEASE_FOCUS="Minor bugfixes"
RELEASE_FOCUS="Major feature enhancements"
#RELEASE_FOCUS="Minor bugfixes"
#RELEASE_FOCUS="Major bugfixes"
#RELEASE_FOCUS="Minor security fixes"
#RELEASE_FOCUS="Major security fixes"
#TEXT_BODY="Syntax cleanup"
#TEXT_BODY="Updated documentation"
TEXT_BODY="Bug fixes.
Many thanks to the freshmeat folk that correct my bad and poorly English !
TEXT_BODY="
Since 1.350:
Bug fixes.
Many thanks to the freshmeat folk that correct my bad and poorly English!
"

31
freshmeat_submition.json Normal file
View file

@ -0,0 +1,31 @@
{
"release": {
"tag_list": "Major feature enhancements",
"version": "1.350",
"hidden_from_frontpage": false,
"changelog": "
Since 1.286:
Added --noreleasecheck option.
Added new release checking.
Removed Date::Manip dependancy.
Better output when copying messages.
More effiscient with large mailboxes.
Clarity: print capability after authenticated state.
Duplicate messages on host2 are now deleted with --delete2
--skipsize turned on by default.
Usability fix: examples with --password1 instead of --passfile1
Added --debugimap1 --debugimap2 to permit imap outpout with only one host.
Added reconnect statistics.
Added reconnect behavior with Mail::IMAPClient 2.2.9
Added statistic about messages deleted.
Added statistic about average bandwith rate.
Flags are now exactly synced from host1 to host2
(Previous releases just added flags).
Added TLSv1 support.
Filter flags sync with the list given by PERMANENTFLAGS on --host2
and bug fixes.
Many thanks to the freshmeat folk that correct my bad and poorly English!
"
}
}

332
imapsync
View file

@ -6,6 +6,7 @@
# main program
# global variables initialisation
# default values
# folder loop
# subroutines
# IMAPClient 2.2.9 overrides
# IMAPClient 2.2.9 3.xx ads
@ -19,7 +20,7 @@ tool. Synchronise mailboxes between two imap servers. Good
at IMAP migration. More than 36 different IMAP server softwares
supported with success.
$Revision: 1.344 $
$Revision: 1.350 $
=head1 SYNOPSIS
@ -372,13 +373,14 @@ Success stories reported with the following 36 imap servers
- SmarterMail, Smarter Mail 5.0 Enterprise.
- SunONE Messaging server 5.2, 6.0 (SUN JES - Java Enterprise System)
- Sun Java(tm) System Messaging Server 6.2-2.05, 6.2-7.05
- Sun Messaging Server 6.3
- Surgemail 3.6f5-5
- UW-imap servers (imap-2000b) rijkkramer IMAP4rev1 2000.287
(RedHat uses UW like 2003.338rh), v12.264 Solaris 5.7 (OSI Approved)
(http://www.washington.edu/imap/)
- UW - QMail v2.1
- Imap part of TCP/IP suite of VMS 7.3.2
- Zimbra-IMAP 3.0.1 GA 160, 3.1.0 Build 279, 4.0.5, 4.5.2, 4.5.6, 5.5.
- Zimbra-IMAP 3.0.1 GA 160, 3.1.0 Build 279, 4.0.5, 4.5.2, 4.5.6, 5.5, 6.x
Please report to the author any success or bad story with
imapsync and do not forget to mention the IMAP server
@ -388,7 +390,7 @@ report the two lines at the begining of the output if they
are useful to know the softwares. Example:
Host1 software:* OK louloutte Cyrus IMAP4 v1.5.19 server ready
Host2 software:* OK Courier-IMAP ready
Host2 software:* OK Courier-IMAP ready
You can use option --justconnect to get those lines.
Example:
@ -469,7 +471,7 @@ Entries for imapsync:
Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.344 2010/08/20 02:06:13 gilles Exp gilles $
$Id: imapsync,v 1.350 2010/09/06 01:05:09 gilles Exp gilles $
=cut
@ -551,13 +553,14 @@ my(
$tests, $test_builder, $tests_debug,
$allow3xx, $justlogin,
$tmpdir,
$releasecheck,
);
# main program
# global variables initialisation
$rcs = '$Id: imapsync,v 1.344 2010/08/20 02:06:13 gilles Exp gilles $ ';
$rcs = '$Id: imapsync,v 1.350 2010/09/06 01:05:09 gilles Exp gilles $ ';
$total_bytes_transferred = 0;
$total_bytes_skipped = 0;
@ -581,6 +584,9 @@ my @argv_copy = @ARGV;
get_options();
$releasecheck = defined($releasecheck) ? $releasecheck : 1;
my $warn_release = ($releasecheck) ? check_last_release() : '';
# default values
$tmpdir ||= File::Spec->tmpdir();
@ -589,9 +595,6 @@ $pidfile ||= $tmpdir . '/imapsync.pid';
# allow Mail::IMAPClient 3.0.xx by default
$allow3xx = defined($allow3xx) ? $allow3xx : 1;
# Does not use Date::Manip by default: buggy 5.x vs 6.x and slow
$usedatemanip = defined($usedatemanip) ? $usedatemanip : 0;
print banner_imapsync(@argv_copy);
print "Temp directory is $tmpdir\n";
@ -633,21 +636,6 @@ sub connect_imap {
or die_clean("Can not open imap connection on [$host]: $@\n");
}
sub localhost_info {
my($infos) = join("",
"Here is a [$OSNAME] system (",
join(" ",
uname(),
),
")\n",
"With perl ",
sprintf("%vd", $PERL_VERSION),
" Mail::IMAPClient $Mail::IMAPClient::VERSION",
);
return($infos);
}
if ($justconnect) {
justconnect();
@ -672,32 +660,6 @@ if ($syncinternaldates) {
print "Turned OFF syncinternaldates\n";
}
if ($syncinternaldates || $idatefromheader) {
# Date::Manip is an ugly module: it exits (confess) for reading an unset value
# I should write a bug report but I'm too lazy.
no warnings 'redefine';
local *Carp::confess = sub { return undef; };
require Date::Manip;
Date::Manip->import(qw(ParseDate UnixDate Date_Init Date_TimeZone));
if ($OSNAME eq "MSWin32") {
# It seems that local *Carp does not work on win32
my $TZ = $ENV{TZ} || 'GMT';
Date_Init("TZ=$TZ");
print "TimeZone: [", Date_TimeZone(), "]\n";
}else{
#print "Date_init: [", join(" ",Date_Init()), "]\n";
print "TimeZone:[", Date_TimeZone(), "]\n";
if (not (Date_TimeZone())) {
warn "TimeZone not defined, setting it to GMT";
Date_Init("TZ=GMT");
print "TimeZone: [", Date_TimeZone(), "]\n";
}
}
}
if(defined($authmd5) and not($authmd5)) {
$authmech1 ||= 'LOGIN';
@ -1167,11 +1129,11 @@ sub foldersizes {
my $tot = 0;
my $tmess = 0;
my @folders = @{$folders_r};
print "++++ Calculating sizes ++++\n";
print "++++ Calculating sizes\n";
foreach my $folder (@folders) {
my $stot = 0;
my $smess = 0;
printf("$side Folder %-35s", "[$folder]");
printf("$side folder %-35s", "[$folder]");
unless($imap->exists($folder)) {
print("does not exist yet\n");
next;
@ -1219,8 +1181,6 @@ if ($foldersizes) {
}
sub timenext {
my ($timenow, $timerel);
# $timebefore is global, beurk !
@ -1242,7 +1202,7 @@ foreach my $folder (@h2_folders_list) {
}
print
"++++ Listing folders ++++\n",
"++++ Listing folders\n",
"Host1 folders list:\n", map("[$_]\n",@h1_folders),"\n",
"Host2 folders list:\n", map("[$_]\n",@h2_folders_list),"\n";
@ -1516,23 +1476,21 @@ sub flags_filter {
return($flags_out);
}
print "++++ Looping on each folder ++++\n";
#sleep 10;
# folder loop
print "++++ Looping on each folder\n";
FOLDER: foreach my $h1_fold (@h1_folders) {
last FOLDER if $imap1->IsUnconnected();
last FOLDER if $imap2->IsUnconnected();
my $h2_fold;
print "Host1 Folder [$h1_fold]\n";
$h2_fold = imap2_folder_name($h1_fold);
print "Host2 Folder [$h2_fold]\n";
my $h2_fold = imap2_folder_name($h1_fold);
printf("%-35s -> %-35s\n", "[$h1_fold]", "[$h2_fold]");
unless ($imap1->select($h1_fold)) {
warn
"Host1 Folder $h1_fold: Could not select: ",
"Host1 folder $h1_fold: Could not select: ",
$imap1->LastError, "\n";
$nb_errors++;
next FOLDER;
@ -1597,7 +1555,7 @@ FOLDER: foreach my $h1_fold (@h1_folders) {
my %h1_hash = ();
my %h2_hash = ();
print "++++ Host1 [$h1_fold] parsing headers ++++\n";
$debug and print "Host1 folder [$h1_fold] parsing headers\n";
last FOLDER if $imap1->IsUnconnected();
last FOLDER if $imap2->IsUnconnected();
@ -1612,7 +1570,7 @@ FOLDER: foreach my $h1_fold (@h1_folders) {
$debug and print "Time fir: ", timenext(), " s\n";
unless ($h1_fir_ref) {
warn
"Host1 Folder $h1_fold: Could not fetch_hash_2 ",
"Host1 folder $h1_fold: Could not fetch_hash_2 ",
scalar(@h1_msgs), " msgs: ", $imap1->LastError, "\n";
$nb_errors++;
next FOLDER;
@ -1641,7 +1599,7 @@ FOLDER: foreach my $h1_fold (@h1_folders) {
}
$debug and print "Time parsing headers on host1: ", timenext(), " s\n";
print "++++ Host2 [$h2_fold] parsing headers ++++\n";
$debug and print "Host2 folder [$h2_fold] parsing headers\n";
my ($h2_heads_ref, $h2_fir_ref) = ({}, {});
$h2_heads_ref = $imap2->parse_headers([@h2_msgs], @useheader) if (@h2_msgs);
@ -1671,8 +1629,8 @@ FOLDER: foreach my $h1_fold (@h1_folders) {
}
$debug and print "Time parsing headers on host2: ", timenext(), " s\n";
print "++++ Verifying [$h1_fold] -> [$h2_fold] ++++\n";
# messages in host1 that are not good in host2
$debug and print "++++ Verifying [$h1_fold] -> [$h2_fold]\n";
# messages in host1 that are not in host2
my @h1_hash_keys_sorted_by_uid
= sort {$h1_hash{$a}{'m'} <=> $h1_hash{$b}{'m'}} keys(%h1_hash);
@ -1691,7 +1649,7 @@ FOLDER: foreach my $h1_fold (@h1_folders) {
my $h2_msg = $h2_hash{$m_id}{'m'};
my $h2_flags = $h2_hash{$m_id}{'F'} || "";
my $isdel = $h2_flags =~ /\B\\Deleted\b/ ? 1 : 0;
print "deleting message [$m_id] #$h2_msg in host2 folder $h2_fold\n"
print "msg $h2_fold/$h2_msg deleted on host2 [$m_id]\n"
if ! $isdel;
push(@h2_expunge, $h2_msg) if $uidexpunge2;
unless ($dry or $isdel) {
@ -1701,7 +1659,7 @@ FOLDER: foreach my $h1_fold (@h1_folders) {
}
}
foreach my $h2_msg (@h2_msgs_duplicate) {
print "deleting message [duplicate] #$h2_msg in host2 folder $h2_fold\n";
print "msg $h2_fold/$h2_msg deleted [duplicate] on host2\n";
push(@h2_expunge, $h2_msg) if $uidexpunge2;
unless ($dry) {
$imap2->delete_message($h2_msg);
@ -1720,28 +1678,26 @@ FOLDER: foreach my $h1_fold (@h1_folders) {
}
MESS: foreach my $m_id (@h1_hash_keys_sorted_by_uid) {
my $h1_size = $h1_hash{$m_id}{'s'};
my $h1_msg = $h1_hash{$m_id}{'m'};
my $h1_size = $h1_hash{$m_id}{'s'};
my $h1_msg = $h1_hash{$m_id}{'m'};
my $h1_idate = $h1_hash{$m_id}{'D'};
if (defined $maxsize and $h1_size > $maxsize) {
print "+ Skipping msg #$h1_msg:$h1_size in host1 folder $h1_fold (exceeds maxsize limit $maxsize bytes)\n";
print "msg $h1_fold/$h1_msg skipping ($h1_size exceeds maxsize limit $maxsize bytes)\n";
$total_bytes_skipped += $h1_size;
$nb_msg_skipped += 1;
next MESS;
}
$debug and print "+ key $m_id #$h1_msg\n";
unless (exists($h2_hash{$m_id})) {
print "+ NO msg #$h1_msg [$m_id] in $h2_fold\n";
# copy
print "+ Copying msg #$h1_msg:$h1_size to folder $h2_fold\n";
$debug and print "msg $h1_fold/$h1_msg copying to $h2_fold\n";
last FOLDER if $imap1->IsUnconnected();
last FOLDER if $imap2->IsUnconnected();
last FOLDER if $imap2->IsUnconnected();
my $string;
$string = $imap1->message_string($h1_msg);
unless (defined($string)) {
warn
"Could not fetch message #$h1_msg from $h1_fold: ",
"- msg $h1_fold/$h1_msg could not fetch [$m_id $h1_size]: ",
$imap1->LastError, "\n";
$nb_errors++;
$total_bytes_error += $h1_size;
@ -1851,28 +1807,20 @@ Bye.'
"F message content begin next line\n",
$string,
"F message content ended on previous line\n", "=" x 80, "\n";
my $d = "";
my $h1_date = "";
if ($syncinternaldates) {
$d = $h1_idate;
$debug and print "internal date from 1: [$d]\n";
$d = good_date($d);
$debug and print "internal date from 1: [$d] (fixed)\n";
$h1_date = $h1_idate;
$debug and print "internal date from host1: [$h1_date]\n";
$h1_date = good_date($h1_date);
$debug and print "internal date from host1: [$h1_date] (fixed)\n";
}
if ($idatefromheader) {
$d = $imap1->get_header($h1_msg,"Date");
$debug and print "header date from 1: [$d]\n";
$d = good_date($d);
$debug and print "header date from 1: [$d] (fixed)\n";
}
sub good_date {
my ($d) = @_;
return($d) if (! $usedatemanip);
$d = UnixDate(ParseDate($d), "%d-%b-%Y %H:%M:%S %z");
$d = "\"$d\"";
return($d);
$h1_date = $imap1->get_header($h1_msg,"Date");
$debug and print "header date from host1: [$h1_date]\n";
$h1_date = good_date($h1_date);
$debug and print "header date from host1: [$h1_date] (fixed)\n";
}
my $h1_flags = $h1_hash{$m_id}{'F'} || "";
@ -1883,24 +1831,24 @@ Bye.'
$h1_flags = flags_filter($h1_flags, $permanentflags2) if ($permanentflags2);
my $new_id;
print "flags & date from: [$h1_flags][$d]\n";
$debug and print "msg $h1_fold/$h1_msg date [$h1_date] flags [$h1_flags] size [$h1_size]\n";
last FOLDER if $imap1->IsUnconnected();
last FOLDER if $imap2->IsUnconnected();
$d = undef if ($d eq "");
last FOLDER if $imap2->IsUnconnected();
$h1_date = undef if ($h1_date eq "");
unless ($dry) {
if ($OSNAME eq "MSWin32") {
$new_id = $imap2->append_string($h2_fold,$string, $h1_flags, $d);
$new_id = $imap2->append_string($h2_fold, $string, $h1_flags, $h1_date);
}
else {
# just back to append_string since append_file 3.05 does not work.
#$new_id = $imap2->append_file($h2_fold, $message_file, "", $h1_flags, $d);
# append_string 3.05 does not work too some times with $d unset.
$new_id = $imap2->append_string($h2_fold,$string, $h1_flags, $d);
$new_id = $imap2->append_string($h2_fold, $string, $h1_flags, $h1_date);
}
unless($new_id){
no warnings 'uninitialized';
warn "Couldn't append msg #$h1_msg (Subject:[".
warn "- msg $h1_fold/$h1_msg couldn't append (Subject:[".
$imap1->subject($h1_msg)."]) to folder $h2_fold: ",
$imap2->LastError, "\n";
$nb_errors++;
@ -1911,11 +1859,11 @@ Bye.'
# good
# $new_id is an id if the IMAP server has the
# UIDPLUS capability else just a ref
print "Copied msg id [$h1_msg] to folder $h2_fold msg id [$new_id]\n";
print "msg $h1_fold/$h1_msg copied to $h2_fold/$new_id\n";
$total_bytes_transferred += $h1_size;
$nb_msg_transferred += 1;
if($delete) {
print "Deleting msg #$h1_msg on host1 folder $h1_fold\n";
print "msg $h1_fold/$h1_msg deleted on host1\n";
unless($dry) {
$imap1->delete_message($h1_msg);
$h1_nb_msg_deleted += 1;
@ -1933,7 +1881,10 @@ Bye.'
next MESS;
}
else{
$debug and print "Message id [$m_id] found in t:$h2_fold\n";
#my $h2_size = $h2_hash{$m_id}{'s'};
my $h2_msg = $h2_hash{$m_id}{'m'};
#my $h2_idate = $h2_hash{$m_id}{'D'};
$debug and print "msg $h1_fold/$h1_msg equals $h2_fold/$h2_msg\n";
$total_bytes_skipped += $h1_size;
$nb_msg_skipped += 1;
}
@ -1958,7 +1909,7 @@ Bye.'
my @h2_flags = sort split(' ', $h2_flags );
my $diff = compare_lists(\@h1_flags, \@h2_flags);
$diff and $debug and print "Replacing h2 flags($h2_flags) with h1 flags($h1_flags) on msg #$h2_msg in $h2_fold\n";
$diff and $debug and print "msg $h2_fold/$h2_msg replacing h2 flags($h2_flags) with h1 flags($h1_flags)\n";
# This sets flags so flags can be removed with this
# When you remove a \Seen flag on host1 you want to it
@ -1966,8 +1917,7 @@ Bye.'
# we need most of the time.
if (!$dry and $diff and !$imap2->store($h2_msg, "FLAGS.SILENT (@h1_flags)") ) {
warn "Could not add flags @h1_flags",
" on msg #$h2_msg in $h2_fold: ",
warn "- msg $h2_fold/$h2_msg could not add flags @h1_flags",
$imap2->LastError, "\n";
#$nb_errors++;
}
@ -1990,21 +1940,21 @@ Bye.'
"host2 internal date: $h2_idate\n";
#unless ($h1_idate eq $h2_idate) {
# print "!!! Dates differ !!!\n";
# print "!!! Dates differs !!!\n";
#}
};
unless ($skipsize or ($h1_size == $h2_size)) {
# Bad size
print
"Message $m_id SZ_BAD f:$h1_msg:$h1_size t:$h2_msg:$h2_size\n";
"- msg $h1_fold/$h1_msg size diff $h1_size != $h2_size $h2_fold/$h2_msg\n";
$nb_errors++;
}
else {
# Good
$debug and print
"Message $m_id SZ_GOOD f:$h1_msg:$h1_size t:$h2_msg:$h2_size\n";
"msg $h1_fold/$h1_msg sizes ok $h1_size <=> $h2_size $h2_fold/$h2_msg\n";
if($delete) {
print "Deleting msg #$h1_msg on host1 folder $h1_fold\n";
print "msg $h1_fold/$h1_msg deleted on host1\n";
unless($dry) {
$imap1->delete_message($h1_msg);
$h1_nb_msg_deleted += 1;
@ -2022,10 +1972,10 @@ Bye.'
unless($dry) { $imap2->expunge() };
}
print "Time: ", timenext(), " s\n";
$debug and print "Time: ", timenext(), " s\n";
}
print "++++ End looping on each folder ++++\n";
print "++++ End looping on each folder\n";
# FOLDER loop is exited any time a connection is lost be sure to log it!
@ -2085,14 +2035,6 @@ exit_clean(0);
# subroutines
sub imapsync_version {
my $rcs = '$Id: imapsync,v 1.344 2010/08/20 02:06:13 gilles Exp gilles $ ';
$rcs =~ m/,v (\d+\.\d+)/;
my $VERSION = ($1) ? $1: "UNKNOWN";
return($VERSION);
}
sub check_lib_version {
$debug and print "IMAPClient $Mail::IMAPClient::VERSION\n";
if ($Mail::IMAPClient::VERSION eq '2.2.9') {
@ -2119,8 +2061,7 @@ IO::Socket
IO::Socket::SSL
Digest::MD5
Digest::HMAC_MD5
Term::ReadKey
Date::Manip))
Term::ReadKey))
{
my $v = "?";
@ -2170,8 +2111,8 @@ sub banner_imapsync {
my @argv_copy = @_;
my $banner_imapsync = join("",
'$RCSfile: imapsync,v $ ',
'$Revision: 1.344 $ ',
'$Date: 2010/08/20 02:06:13 $ ',
'$Revision: 1.350 $ ',
'$Date: 2010/09/06 01:05:09 $ ',
"\n",localhost_info(), "\n",
"Command line used:\n",
"$0 ", command_line_nopassword(@argv_copy), "\n",
@ -2274,7 +2215,7 @@ sub select_msgs {
}
sub stats {
print "++++ Statistics ++++\n";
print "++++ Statistics\n";
print "Transfer time : $timediff sec\n";
print "Messages transferred : $nb_msg_transferred ";
print "(could be $nb_msg_skipped_dry_mode without dry mode)" if ($dry);
@ -2297,6 +2238,8 @@ sub stats {
print "Reconnections to host1 : $host1_reconnect_count\n";
print "Reconnections to host2 : $host2_reconnect_count\n";
print "Detected $nb_errors errors\n\n";
print $warn_release, "\n";
print thank_author();
}
@ -2350,7 +2293,6 @@ sub get_options {
"delete2!" => \$delete2,
"syncinternaldates!" => \$syncinternaldates,
"idatefromheader!" => \$idatefromheader,
"usedatemanip!" => \$usedatemanip,
"syncacls!" => \$syncacls,
"maxsize=i" => \$maxsize,
"maxage=i" => \$maxage,
@ -2397,7 +2339,7 @@ sub get_options {
"justlogin!" => \$justlogin,
"tmpdir=s" => \$tmpdir,
"pidfile=s" => \$pidfile,
"releasecheck!" => \$releasecheck,
);
$debug and print "get options: [$opt_ret]\n";
@ -2431,7 +2373,6 @@ sub get_options {
sub load_modules {
require IO::Socket::SSL if ($ssl1 or $ssl2 or $tls1 or $tls2);
require Date::Manip if ($syncinternaldates || $idatefromheader) ;
require Term::ReadKey if (
((not($password1 or $passfile1))
@ -2540,10 +2481,92 @@ sub string_to_file {
}
sub check_last_release {
my $public_release = not_long('imapsync_version_lfo');
return('') if ($public_release eq 'unknown');
my $imapsync_here = imapsync_version();
if ($public_release > $imapsync_here) {
return("New imapsync release $public_release available");
}else{
return("This current imapsync is up to date");
}
}
sub imapsync_version {
my $rcs = '$Id: imapsync,v 1.350 2010/09/06 01:05:09 gilles Exp gilles $ ';
$rcs =~ m/,v (\d+\.\d+)/;
my $VERSION = ($1) ? $1: "UNKNOWN";
return($VERSION);
}
sub imapsync_version_lfo {
my $local_version = imapsync_version();
my $agent_info = "$OSNAME system, perl $PERL_VERSION, Mail::IMAPClient $Mail::IMAPClient::VERSION";
my $sock = new IO::Socket::INET (
PeerAddr => 'linux-france.org',
PeerPort => '80',
Proto => 'tcp');
return('unknown') if not $sock;
print $sock
"GET /prj/imapsync/VERSION HTTP/1.0\n",
"User-Agent: imapsync/$local_version ($agent_info)\n",
"Host: www.linux-france.org\n\n";
my @line = <$sock>;
close($sock);
my $last_release = $line[-1];
chomp($last_release);
return($last_release);
}
sub not_long {
my ($func) = @_;
my $val;
eval {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm 3;
#print $func, "\n";
{
no strict "refs";
$val = &$func();
}
alarm 0;
};
if ($@) {
# timed out
return('unknown') unless $@ eq "alarm\n"; # propagate unexpected errors
}else {
# didn't
return($val);
}
}
sub localhost_info {
my($infos) = join("",
"Here is a [$OSNAME] system (",
join(" ",
uname(),
),
")\n",
"With perl ",
sprintf("%vd", $PERL_VERSION),
" Mail::IMAPClient $Mail::IMAPClient::VERSION",
);
return($infos);
}
sub usage {
my $localhost_info = localhost_info();
my $thank = thank_author();
my $warn_release = check_last_release();
print <<EOF;
usage: $0 [options]
@ -2671,6 +2694,7 @@ Several options are mandatory.
--debugimap2 : imap debug mode for host2.
--debugimap : imap debug mode for host1 and host2.
--version : print software version.
--noreleasecheck : do not check for new imapsync release (a http request).
--justconnect : just connect to both servers and print useful
information. Need only --host1 and --host2 options.
--justlogin : just login to both host1 and host2 with users
@ -2701,17 +2725,66 @@ $0 \\
$localhost_info
$rcs
$warn_release
$thank
EOF
}
sub good_date {
# two incoming formats:
# header Tue, 24 Aug 2010 16:00:00 +0200
# internal 24-Aug-2010 16:00:00 +0200
# outgoing format: internal date format
# 24-Aug-2010 16:00:00 +0200
my ($d) = @_;
return ('') if not defined($d);
if ( $d =~ m{(\d?)(\d-...-\d{4})( \d{2}:\d{2}:\d{2})( (?:\+|-)\d{4})?}o ) {
#print "internal: [$1][$2][$3][$4]\n";
my ($day_1, $date_rest, $hour, $zone) = ($1,$2,$3,$4);
$day_1 = '0' if ($day_1 eq '');
$zone = '' if not defined($zone);
$d = $day_1 . $date_rest . $hour . $zone;
}elsif ($d =~ m{(?:.{3}, )(\d?)(\d) (...) (\d{4})( \d{2}:\d{2}:\d{2})( (?:\+|-)\d{4})?}o ) {
#print "header: [$1][$2][$3][$4][$5][$6]\n";
my ($day_1, $day_rest, $month, $year, $hour, $zone) = ($1,$2,$3,$4,$5,$6);
$day_1 = '0' if ($day_1 eq '');
$zone = '' if not defined($zone);
$d = $day_1 . "$day_rest-$month-$year" . $hour . $zone;
}else{
# unknown/unmatch => return same string
return($d);
}
$d = qq("$d");
return($d);
}
sub tests_good_date {
ok('' eq good_date(), 'good_date no arg');
ok('"24-Aug-2010 16:00:00 +0200"' eq good_date('24-Aug-2010 16:00:00 +0200'), 'good_date internal 2digit zone');
ok('"24-Aug-2010 16:00:00"' eq good_date('24-Aug-2010 16:00:00'), 'good_date internal 2digit no zone');
ok('"01-Sep-2010 16:00:00 +0200"' eq good_date( '1-Sep-2010 16:00:00 +0200'), 'good_date internal SP 1digit');
ok('"24-Aug-2010 16:00:00 +0200"' eq good_date('Tue, 24 Aug 2010 16:00:00 +0200'), 'good_date header 2digit zone');
ok('"01-Sep-2010 16:00:00"' eq good_date('Wed, 1 Sep 2010 16:00:00'), 'good_date header SP 1digit zone');
ok('"01-Sep-2010 16:00:00 +0200"' eq good_date('Wed, 1 Sep 2010 16:00:00 +0200'), 'good_date header SP 1digit zone');
ok('"01-Sep-2010 16:00:00 +0200"' eq good_date('Wed, 1 Sep 2010 16:00:00 +0200 (CEST)'), 'good_date header SP 1digit zone');
}
sub tests_debug {
SKIP: {
skip "No test in normal run" if (not $tests_debug);
tests_regexmess();
tests_good_date();
}
}
@ -2727,6 +2800,7 @@ sub tests {
tests_flags_filter();
tests_imap2_folder_name();
tests_command_line_nopassword();
tests_good_date();
}
}

View file

@ -5,7 +5,7 @@
<title>imapsync <!--#exec cmd="cat VERSION" --> </title>
<meta name="generator" content="Bluefish 1.0.7"/>
<meta name="author" content="Gilles LAMIRAL"/>
<meta name="date" content="2010-08-20T04:41:30+0200"/>
<meta name="date" content="2010-08-21T15:39:13+0200"/>
<meta name="copyright" content="None"/>
<meta name="keywords" content="imap, transfert, migration"/>
<meta name="description" content="imap migration tool"/>
@ -32,8 +32,8 @@ where the user plays independently on both sides. Use <b>offlineimap</b>
(written by John Goerzen) for this purpose.
</p>
<a id="AUTHOR"></a>
<h2>AUTHOR</h2>
<h2><a id="AUTHOR"></a> AUTHOR</h2>
<p>Gilles LAMIRAL<br/>
Email: <b>lamiral@linux-france.org</b></p>
@ -52,10 +52,10 @@ where the user plays independently on both sides. Use <b>offlineimap</b>
for feedback.
</p>
<a id="donation"></a>
<h2>imapsync donation</h2>
<p>Happy with this <b>free</b>, <b>open</b> and <b>gratis</b> software?<br/></p>
<p><b>Help</b> the author to <b>maintain</b> imapsync and <b>support</b> users:</p>
<h2><a id="donation"></a> imapsync call for donation</h2>
<p>Are you happy with this <b>free</b>, <b>open</b> and <b>gratis</b> software?<br/></p>
<p>Then <b>you</b> can help the author to <b>maintain</b> imapsync and <b>support</b> happy (or unhappy) users: <b>YOU!</b></p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<p>
@ -73,8 +73,8 @@ Or offer him a book on his
<b><i>Thanks in advance!</i></b></p>
<a id="latest"></a>
<h2><a href="imapsync">Latest release
<h2><a id="latest"></a><a href="imapsync">Latest release
<!--#exec cmd="cat VERSION" -->
(<!--#flastmod file="imapsync" -->)
</a></h2>
@ -83,18 +83,21 @@ Or offer him a book on his
<h2><a href="dist/?C=M;O=D">imapsync source download</a></h2>
<b>Standalone</b> <a href="imapsync.exe"><b>imapsync executable for win32</b></a>,
<p><b>Standalone</b>
<a href="imapsync.exe"><b>imapsync <!--#exec cmd="cat VERSION_EXE" --> executable for win32</b></a>,
thanks to Strawberry Perl 5.12 and Par::Packed module.<br/>
(imapsync.exe built time is <!--#flastmod file="imapsync.exe" -->)
(imapsync.exe built time is <!--#flastmod file="imapsync.exe" -->)</p>
<h2><a href="INSTALL">imapsync installation</a></h2>
<h2><a href="README">README</a></h2>
<h2><a href="FAQ">Frequently Asked Questions</a></h2>
<a id="MAILING-LIST"></a>
<h2>MAILING-LIST</h2>
<h2><a id="MAILING-LIST"></a>MAILING-LIST</h2>
<p>
The public mailing-list may be the best way to get support.<br/>
@ -133,8 +136,11 @@ thanks to Strawberry Perl 5.12 and Par::Packed module.<br/>
<b>Thank you for your participation!</b>
</p>
<a id="TODO"></a>
<h2><a href="TODO">TODO</a></h2>
<h2><a id="TODO"></a>
<a id="WANTED"></a>
<a href="TODO">WANTED</a></h2>
<p>I code new features for free when I have time and when I find it useful.<br/>
If you really want a feature you can donate money and I'll code it.<br/>
@ -143,14 +149,15 @@ If you really want a feature you can donate money and I'll code it.<br/>
<p>Some features and their time/money to be done evaluation</p>
<table cellpadding="10" cellspacing="0" border="1">
<tr align="right"><th>DONE</th><th>Feature </th><th>Time guessed</th><th>Time spent</th><th>Money received</th><th>Money needed</th></tr>
<tr align="right"><td> No</td><td>Speedup 50% </td><td>10 hours </td><td> 80 min </td><td>10 $ </td><td>300 $ </td></tr>
<tr align="right"><td> No</td><td>Backup to files </td><td> 8 hours </td><td> 60 min </td><td> 0 $ </td><td>240 $ </td></tr>
<tr align="right"><td> No</td><td>--deletefolder2 </td><td> 3 hours </td><td> 30 min </td><td> 0 $ </td><td> 90 $ </td></tr>
<tr align="right"><td> No</td><td>NTLM auth </td><td> 3 hours </td><td> 60 min </td><td> 0 $ </td><td> 90 $ </td></tr>
<tr align="right"><td> Yes</td><td>Win32 imapsync.exe </td><td> 8 hours </td><td>520 min </td><td> 0 $ </td><td>240 $ </td></tr>
<tr align="right"><td> Yes</td><td>Fix capability changes</td><td> 1 hour </td><td> 80 min </td><td> 0 $ </td><td> 30 $ </td></tr>
<tr align="right"><td> Yes</td><td>Large mailbox --maxage</td><td> 4 hours </td><td>270 min </td><td> 0 $ </td><td>120 $ </td></tr>
<tr align="right"><th>DONE</th><th>Feature </th><th>Time guessed</th><th>Time spent</th><th>Money received</th><th>Money needed</th></tr>
<tr align="right"><td> No</td><td>Efficient Gmail backup </td><td> 8 hours </td><td> 80 min </td><td> 0 $ </td><td>240 $ </td></tr>
<tr align="right"><td> No</td><td>Speedup 50% </td><td>10 hours </td><td> 80 min </td><td>10 $ </td><td>300 $ </td></tr>
<tr align="right"><td> No</td><td>Backup to files </td><td> 8 hours </td><td> 60 min </td><td> 0 $ </td><td>240 $ </td></tr>
<tr align="right"><td> No</td><td>--deletefolder2 </td><td> 3 hours </td><td> 30 min </td><td> 0 $ </td><td> 90 $ </td></tr>
<tr align="right"><td> No</td><td>NTLM auth </td><td> 3 hours </td><td> 60 min </td><td> 0 $ </td><td> 90 $ </td></tr>
<tr align="right"><td> Yes</td><td>Win32 imapsync.exe </td><td> 8 hours </td><td>520 min </td><td> 0 $ </td><td>240 $ </td></tr>
<tr align="right"><td> Yes</td><td>Fix capability changes </td><td> 1 hour </td><td> 80 min </td><td> 0 $ </td><td> 30 $ </td></tr>
<tr align="right"><td> Yes</td><td>Large mailbox --maxage </td><td> 4 hours </td><td>270 min </td><td> 0 $ </td><td>120 $ </td></tr>
</table>
<h2><a href="COPYING">COPYING</a></h2>
@ -168,7 +175,7 @@ If you really want a feature you can donate money and I'll code it.<br/>
<!--#config timefmt="%D" -->
<!--#config timefmt="%A %B %d, %Y" -->
This document last modified <!--#echo var="LAST_MODIFIED" --> <br/>
$Id: index.shtml,v 1.20 2010/08/20 03:14:54 gilles Exp gilles $
$Id: index.shtml,v 1.22 2010/08/21 13:39:35 gilles Exp gilles $
</p>
</body>

48
learn/io_socket_get Normal file
View file

@ -0,0 +1,48 @@
#!/usr/bin/perl
use warnings;
use strict;
use IO::Socket;
sub last_release {
my $sock = new IO::Socket::INET (
PeerAddr => 'linux-france.org',
PeerPort => '80',
Proto => 'tcp');
return('unknown') if not $sock;
print $sock
"GET /prj/imapsync/VERSION HTTP/1.0\n",
"Host: www.linux-france.org\n\n";
my @line = <$sock>;
close($sock);
my $last_release = $line[-1];
chomp($last_release);
return($last_release);
}
sub not_long {
my ($func) = @_;
my $val;
eval {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm 3;
#print $func, "\n";
{
no strict "refs";
$val = &$func();
}
alarm 0;
};
if ($@) {
# timed out
return('unknown') unless $@ eq "alarm\n"; # propagate unexpected errors
}else {
# didn't
return($val);
}
}
print last_release(), "\n";
print not_long('last_release'), "\n";

24
memo
View file

@ -42,8 +42,7 @@ fm_init() {
software_version
NEWS_FILE_FM="./freshmeat_submition"
NEWS_FILE_FM_INP=${NEWS_FILE_FM}.inp
NEWS_FILE_FM_OUT=${NEWS_FILE_FM}.out
NEWS_FILE_FM_OUT=${NEWS_FILE_FM}.json
}
fm_read_param() {
@ -58,14 +57,14 @@ fm_read_announce() {
fm_read_param
cat << EOF
Project: imapsync
Version: $VERSION
Release-Focus: $RELEASE_FOCUS
Hide: N
Home-Page-URL: http://www.linux-france.org/prj/imapsync/
Gzipped-Tar-URL: http://www.linux-france.org/prj/imapsync/dist/
$TEXT_BODY
{
"release": {
"tag_list": "stable, $RELEASE_FOCUS",
"version": "$VERSION",
"hidden_from_frontpage": false,
"changelog": "$TEXT_BODY"
}
}
EOF
}
@ -82,7 +81,10 @@ fm_announce() {
fi
fm_read_announce > $NEWS_FILE_FM_OUT
freshmeat-submit < $NEWS_FILE_FM_OUT
curl -X PUT -d @../../var/pass/secret.freshmeat -d @$NEWS_FILE_FM_OUT \
-H "Content-Type: application/json" \
http://freshmeat.net/projects/imapsync.json
fi
}

View file

@ -3,8 +3,6 @@
cd C:\msys\1.0\home\Admin\imapsync
perl -mMail::IMAPClient -mDigest::MD5 -mTerm::ReadKey -mIO::Socket::SSL -mFile::Spec -mDigest::HMAC_MD5 -e ''
set TZ="GMT"
.\imapsync.exe --host1 l --user1 toto --passfile1 secret.toto --host2 l --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2
.\imapsync.exe --host1 l --user1 tata --passfile1 secret.tata --host2 l --user2 titi --passfile2 secret.titi --noauthmd5 --delete2 --expunge2 --folder INBOX

View file

@ -1,6 +1,6 @@
#!/bin/sh
# $Id: tests.sh,v 1.114 2010/08/20 02:05:26 gilles Exp gilles $
# $Id: tests.sh,v 1.116 2010/09/06 01:06:52 gilles Exp gilles $
# Example 1:
# CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' sh -x tests.sh
@ -459,6 +459,18 @@ ll_maxage()
--maxage 1
}
ll_newmessage()
{
can_send && sendtestmessage
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--maxage 1 --folder INBOX --nofoldersizes
}
ll_maxage_9999()
{
# can_send && sendtestmessage
@ -663,19 +675,6 @@ ll_bad_host_ssl()
}
ll_justfoldersizes()
{
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--justfoldersizes \
--allow3xx
}
ll_useheader()
{
$CMD_PERL ./imapsync \
@ -927,43 +926,38 @@ ll_authmech_CRAMMD5() {
ll_delete2() {
if can_send; then
sendtestmessage titi
else
:
fi
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--folder INBOX \
--delete2 --expunge2
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--folder INBOX \
--delete2 --expunge2
}
ll_delete() {
if can_send; then
sendtestmessage titi
else
:
fi
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 titi \
--passfile1 ../../var/pass/secret.titi \
--host2 $HOST2 --user2 tata \
--passfile2 ../../var/pass/secret.tata \
--folder INBOX \
--delete --expunge
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 titi \
--passfile1 ../../var/pass/secret.titi \
--host2 $HOST2 --user2 tata \
--passfile2 ../../var/pass/secret.tata \
--folder INBOX \
--delete --expunge
}
ll_bigmail() {
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--folder INBOX.bigmail \
--allow3xx
echo 'rm /home/vmail/titi/.bigmail/cur/*'
$CMD_PERL ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--folder INBOX.bigmail
echo 'sudo rm -v /home/vmail/titi/.bigmail/cur/*'
}
@ -1190,11 +1184,30 @@ dprof_bigfolder()
}
date2=`date`
echo3 "[$date1] [$date2]"
mv tmon.out dprof_bigfolder_tmon.out
mv tmon.out dprof_bigfolder_tmon.out
dprofpp -O 30 dprof_bigfolder_tmon.out
dprofpp -O 30 -I dprof_bigfolder_tmon.out
}
dprof_bigmail()
{
date1=`date`
{ $CMD_PERL -d:DProf ./imapsync \
--host1 $HOST1 --user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \
--folder INBOX.bigmail
echo 'sudo rm -v /home/vmail/titi/.bigmail/cur/*' || \
true
}
date2=`date`
echo3 "[$date1] [$date2]"
mv tmon.out dprof_bigmail_tmon.out
dprofpp -O 30 dprof_bigmail_tmon.out
dprofpp -O 30 -I dprof_bigmail_tmon.out
}
@ -1405,7 +1418,6 @@ ll_sep2
ll_bad_login
ll_bad_host
ll_bad_host_ssl
ll_justfoldersizes
ll_useheader
ll_regexmess
ll_regexmess_scwchu
@ -1433,7 +1445,8 @@ gmail_gmail
gmail_gmail2
archiveopteryx_1
allow3xx
noallow3xx'
noallow3xx
ll_newmessage'
other_tests='
msw