mirror of
https://github.com/imapsync/imapsync.git
synced 2024-11-16 15:52:47 +01:00
1.488
This commit is contained in:
parent
1466872026
commit
b62a0dae2a
17
ChangeLog
17
ChangeLog
@ -1,17 +1,26 @@
|
||||
|
||||
RCS file: RCS/imapsync,v
|
||||
Working file: imapsync
|
||||
head: 1.487
|
||||
head: 1.488
|
||||
branch:
|
||||
locks: strict
|
||||
gilles: 1.487
|
||||
gilles: 1.488
|
||||
access list:
|
||||
symbolic names:
|
||||
keyword substitution: kv
|
||||
total revisions: 487; selected revisions: 487
|
||||
total revisions: 488; selected revisions: 488
|
||||
description:
|
||||
----------------------------
|
||||
revision 1.487 locked by: gilles;
|
||||
revision 1.488 locked by: gilles;
|
||||
date: 2012/04/15 17:38:21; author: gilles; state: Exp; lines: +8 -8
|
||||
Reverse patch applied in 1.485
|
||||
It was "2) eval and --delete2foldersonly --delete2foldersbutnot that need also good escaping."
|
||||
The "good" escaping was bad. No escaping needed. It permits imapsync variables like ${h2_sep}
|
||||
in --delete2foldersonly
|
||||
But good escaping has to be done in parameter value like --delete2foldersbutnot /\[Gmail\]/
|
||||
instead of --delete2foldersbutnot /[Gmail]/ (for example).
|
||||
----------------------------
|
||||
revision 1.487
|
||||
date: 2012/02/29 05:29:21; author: gilles; state: Exp; lines: +7 -7
|
||||
Fixed a useless Perl warning.
|
||||
----------------------------
|
||||
|
17
FAQ
17
FAQ
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
# $Id: FAQ,v 1.104 2012/02/20 18:23:29 gilles Exp gilles $
|
||||
# $Id: FAQ,v 1.106 2012/04/15 19:18:29 gilles Exp gilles $
|
||||
|
||||
+------------------+
|
||||
| FAQ for imapsync |
|
||||
@ -43,6 +43,15 @@ like on Unix so in the examples of this FAQ the
|
||||
command containing single quotes ' will fail on Windows.
|
||||
To fix it just replace single quotes ' by double quotes "
|
||||
|
||||
=======================================================================
|
||||
Q. How to verify imapsync.exe I got is the right file bit per bit?
|
||||
|
||||
R. Use md5sum to check integrity of the file.
|
||||
Get md5sum.exe at http://etree.org/md5com.html
|
||||
|
||||
md5sum imapsync.exe
|
||||
|
||||
Then compare the checksum with the one given by the author.
|
||||
|
||||
=======================================================================
|
||||
Q. How to install imapsync?
|
||||
@ -319,6 +328,12 @@ R2. With option --useuid imapsync doesn't use headers to identify
|
||||
messages on both sides but it uses their imap uid. In that case
|
||||
duplicates on host1 are transfered on host2.
|
||||
|
||||
=======================================================================
|
||||
Q. How can I remove duplicates on a uniq host
|
||||
|
||||
R. Just run imapsync on the same account with option --delete2,
|
||||
ie with host1 == host2 and user1 == user2
|
||||
|
||||
=======================================================================
|
||||
Q. I need to log every output on a file named log.txt
|
||||
|
||||
|
21
INSTALL
21
INSTALL
@ -1,4 +1,4 @@
|
||||
# $Id: INSTALL,v 1.23 2012/01/30 19:23:36 gilles Exp gilles $
|
||||
# $Id: INSTALL,v 1.24 2012/04/13 09:14:22 gilles Exp gilles $
|
||||
#
|
||||
# INSTALL file for imapsync
|
||||
# imapsync : IMAP sync or copy tool.
|
||||
@ -67,19 +67,18 @@ Here is some individual module help:
|
||||
|
||||
perl -mMail::IMAPClient -e ''
|
||||
|
||||
Get the Mail::IMAPClient module here:
|
||||
http://search.cpan.org/
|
||||
http://search.cpan.org/~djkernen/
|
||||
http://search.cpan.org/~djkernen/Mail-IMAPClient-2.2.9/
|
||||
|
||||
In fact I use Mail-IMAPClient-2.2.9 and latest Mail-IMAPClient-2.xx
|
||||
(xx >= 25)
|
||||
To know the version you have on your system try :
|
||||
Get the latest Mail::IMAPClient module here:
|
||||
http://search.cpan.org/dist/Mail-IMAPClient/
|
||||
|
||||
In fact I use both Mail-IMAPClient-2.2.9 and latest Mail-IMAPClient-3.xx
|
||||
(xx >= 25) To know the version you have on your system try :
|
||||
|
||||
perl -mMail::IMAPClient -e 'print $Mail::IMAPClient::VERSION, "\n"'
|
||||
|
||||
New Mail-IMAPClient-3.xx works now with imapsync,
|
||||
at least with Mail-IMAPClient-3.25 (previous may bug)
|
||||
New Mail-IMAPClient-3.xx works now very well with imapsync,
|
||||
better than Mail-IMAPClient-2.2.9 with memory and other things,
|
||||
at least with Mail-IMAPClient-3.25 (previous may bug).
|
||||
Don't hesitate to use latest Mail-IMAPClient-3.xx
|
||||
|
||||
- Perl Digest::MD5 module.
|
||||
try:
|
||||
|
@ -5,6 +5,12 @@ Changes from 2.99_01 to 3.16 made by Mark Overmeer
|
||||
Changes from 0.09 to 2.99_01 made by David Kernen
|
||||
- Potential compatibility issues from 3.17+ highlighted with '*'
|
||||
|
||||
version 3.31: Mon, Mar 19, 2012 11:11:11 AM
|
||||
- rt.cpan.org#74799: Support for partial data responses in fetch_hash
|
||||
[Philip Garrett]
|
||||
+ bonus: cleaner handling of BODY.PEEK responses
|
||||
- properly handle ALL|FULL|FAST fetch macros in fetch_hash
|
||||
|
||||
version 3.30: Fri Nov 11 09:37:00 EST 2011
|
||||
- rt.cpan.org#72347: Starttls array ref argument dereferenced twice
|
||||
[Jonathan Buhacoff]
|
@ -1,6 +1,6 @@
|
||||
--- #YAML:1.0
|
||||
name: Mail-IMAPClient
|
||||
version: 3.30
|
||||
version: 3.31
|
||||
abstract: IMAP4 client library
|
||||
author:
|
||||
- Phil Pearl (Lobbes) <phil@zimbra.com>
|
@ -7,7 +7,7 @@ use strict;
|
||||
use warnings;
|
||||
|
||||
package Mail::IMAPClient;
|
||||
our $VERSION = '3.30';
|
||||
our $VERSION = '3.31';
|
||||
|
||||
use Mail::IMAPClient::MessageSet;
|
||||
|
||||
@ -2130,25 +2130,60 @@ sub fetch_hash {
|
||||
# fetch has similar logic for dealing with message list
|
||||
my $msgs = 'ALL';
|
||||
if ( $words[0] ) {
|
||||
if ( $words[0] eq 'ALL' || ref $words[0] ) {
|
||||
if ( ref $words[0] ) {
|
||||
$msgs = shift @words;
|
||||
}
|
||||
elsif ( $words[0] =~ s/^([,:\d]+)\s*// ) {
|
||||
$msgs = $1;
|
||||
shift @words if $words[0] eq "";
|
||||
elsif ( $#words > 0 ) {
|
||||
if ( $words[0] eq 'ALL' ) {
|
||||
$msgs = shift @words;
|
||||
}
|
||||
elsif ( $words[0] =~ s/^([,:\d]+)\s*// ) {
|
||||
$msgs = $1;
|
||||
shift @words if $words[0] eq "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# message list (if any) is now removed from @words
|
||||
my $what = join ' ', @words;
|
||||
my $what = join( " ", @words );
|
||||
|
||||
for (@words) {
|
||||
s/([\( ])FAST([\) ])/${1}FLAGS INTERNALDATE RFC822\.SIZE$2/i;
|
||||
s/([\( ])FULL([\) ])/${1}FLAGS INTERNALDATE RFC822\.SIZE ENVELOPE BODY$2/i;
|
||||
# RFC 3501:
|
||||
# fetch = "FETCH" SP sequence-set SP ("ALL" / "FULL" / "FAST" /
|
||||
# fetch-att / "(" fetch-att *(SP fetch-att) ")")
|
||||
my %macro = (
|
||||
"ALL" => [qw(FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)],
|
||||
"FULL" => [qw(FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY)],
|
||||
"FAST" => [qw(FLAGS INTERNALDATE RFC822.SIZE)],
|
||||
);
|
||||
|
||||
if ( $macro{$what} ) {
|
||||
@words = @{ $macro{$what} };
|
||||
}
|
||||
my %words = map { uc($_) => 1 } @words;
|
||||
else {
|
||||
$what = "($what)";
|
||||
my @twords;
|
||||
foreach my $word (@words) {
|
||||
$word = uc($word);
|
||||
|
||||
my $output = $self->fetch( $msgs, "($what)" )
|
||||
# server response to BODY[]<10.20> is a field named BODY[]<10>
|
||||
if ( $word =~ /^BODY/ ) {
|
||||
$word =~ s/<(\d+)\.\d+>$/<$1>/;
|
||||
|
||||
# server response to BODY.PEEK[] is a field named BODY[]
|
||||
# BUG? allow for BODY.PEEK in response (historical behavior)
|
||||
if ( $word =~ /^BODY\.PEEK/ ) {
|
||||
push( @twords, $word );
|
||||
$word =~ s/^BODY\.PEEK/BODY/;
|
||||
}
|
||||
}
|
||||
unshift( @twords, $word );
|
||||
}
|
||||
@words = @twords;
|
||||
}
|
||||
|
||||
my %words = map { $_ => 1 } @words;
|
||||
|
||||
my $output = $self->fetch( $msgs, $what )
|
||||
or return undef;
|
||||
|
||||
while ( my $l = shift @$output ) {
|
||||
@ -2157,7 +2192,7 @@ s/([\( ])FULL([\) ])/${1}FLAGS INTERNALDATE RFC822\.SIZE ENVELOPE BODY$2/i;
|
||||
my ( $key, $value );
|
||||
ATTR:
|
||||
while ( $l and $l !~ m/\G\s*\)\s*$/gc ) {
|
||||
if ( $l =~ m/\G\s*([^\s\[]+(?:\[[^\]]*\])?)\s*/gc ) {
|
||||
if ( $l =~ m/\G\s*([^\s\[]+(?:\[[^\]]*\])?(?:<[^>]*>)?)\s*/gc ) {
|
||||
$key = uc($1);
|
||||
}
|
||||
elsif ( !defined $key ) {
|
||||
@ -2220,13 +2255,9 @@ s/([\( ])FULL([\) ])/${1}FLAGS INTERNALDATE RFC822\.SIZE ENVELOPE BODY$2/i;
|
||||
$uids->{$mid} = $entry;
|
||||
}
|
||||
|
||||
# remove things not asked for (i.e. UID/$mid)
|
||||
for my $word ( keys %$entry ) {
|
||||
next if exists $words{$word};
|
||||
|
||||
if ( my ($stuff) = $word =~ m/^BODY(\[.*)$/ ) {
|
||||
next if exists $words{ "BODY.PEEK" . $stuff };
|
||||
}
|
||||
|
||||
next if ( exists $words{$word} );
|
||||
delete $entry->{$word};
|
||||
}
|
||||
}
|
@ -1,6 +1,5 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
#
|
||||
# tests for fetch_hash()
|
||||
#
|
||||
# fetch_hash() calls fetch() internally. rather than refactor
|
||||
@ -9,7 +8,7 @@
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 20;
|
||||
use Test::More tests => 22;
|
||||
|
||||
BEGIN { use_ok('Mail::IMAPClient') or exit; }
|
||||
|
||||
@ -110,6 +109,18 @@ my @tests = (
|
||||
[ [1], qw(BODY.PEEK[]) ],
|
||||
{ "1" => { "BODY.PEEK[]" => q{foo}, }, },
|
||||
],
|
||||
[
|
||||
"BODY[]<0.1024> requests match BODY[]<0> responses",
|
||||
[ q{* 1 FETCH (BODY[]<0>}, q{foo}, ")\r\n" ],
|
||||
[ [1], qw(BODY[]<0.1024>) ],
|
||||
{ "1" => { "BODY[]<0>" => q{foo}, }, },
|
||||
],
|
||||
[
|
||||
"BODY.PEEK[]<0.1024> requests match BODY[]<0> responses",
|
||||
[ q{* 1 FETCH (BODY[]<0>}, q{foo}, ")\r\n" ],
|
||||
[ [1], qw(BODY.PEEK[]<0.1024>) ],
|
||||
{ "1" => { "BODY[]<0>" => q{foo}, }, },
|
||||
],
|
||||
[
|
||||
"escaped ENVELOPE subject",
|
||||
[
|
4
Makefile
4
Makefile
@ -1,5 +1,5 @@
|
||||
|
||||
# $Id: Makefile,v 1.93 2012/02/07 10:55:04 gilles Exp gilles $
|
||||
# $Id: Makefile,v 1.94 2012/04/15 19:19:14 gilles Exp gilles $
|
||||
|
||||
.PHONY: help usage all
|
||||
|
||||
@ -32,7 +32,7 @@ VERSION_EXE=$(shell cat ./VERSION_EXE)
|
||||
|
||||
HELLO=$(shell date;uname -a)
|
||||
IMAPClient_2xx=./Mail-IMAPClient-2.2.9
|
||||
IMAPClient_3xx=./Mail-IMAPClient-3.30/lib
|
||||
IMAPClient_3xx=./Mail-IMAPClient-3.31/lib
|
||||
IMAPClient=$(IMAPClient_3xx)
|
||||
|
||||
hello:
|
||||
|
4
README
4
README
@ -3,7 +3,7 @@ NAME
|
||||
Synchronise mailboxes between two imap servers. Good at IMAP migration.
|
||||
More than 44 different IMAP server softwares supported with success.
|
||||
|
||||
$Revision: 1.487 $
|
||||
$Revision: 1.488 $
|
||||
|
||||
SYNOPSIS
|
||||
To synchronise imap account "foo" on "imap.truc.org" to imap account
|
||||
@ -444,5 +444,5 @@ SIMILAR SOFTWARES
|
||||
|
||||
Feedback (good or bad) will often be welcome.
|
||||
|
||||
$Id: imapsync,v 1.487 2012/02/29 05:29:21 gilles Exp gilles $
|
||||
$Id: imapsync,v 1.488 2012/04/15 17:38:21 gilles Exp gilles $
|
||||
|
||||
|
5
TODO
5
TODO
@ -1,5 +1,5 @@
|
||||
#!/bin/cat
|
||||
# $Id: TODO,v 1.110 2012/02/07 00:20:32 gilles Exp gilles $
|
||||
# $Id: TODO,v 1.111 2012/04/15 19:18:54 gilles Exp gilles $
|
||||
|
||||
TODO file for imapsync
|
||||
----------------------
|
||||
@ -62,6 +62,9 @@ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=503159
|
||||
http://www.linux-france.org/prj/imapsync_list/msg00022.html
|
||||
http://mail.google.com/support/bin/answer.py?hl=en&answer=77657
|
||||
http://mail.google.com/support/bin/answer.py?answer=78892
|
||||
Look at larch https://github.com/rgrove/larch/
|
||||
http://wonko.com/
|
||||
|
||||
|
||||
Add and option to sync to & from files.
|
||||
|
||||
|
@ -1 +1 @@
|
||||
1.487
|
||||
1.488
|
||||
|
@ -5,10 +5,10 @@
|
||||
|
||||
echo paypal_bilan_tests_invoice
|
||||
paypal_bilan_tests_invoice() {
|
||||
# DID output no diff between paypal_bilan_1.46 and 1.47
|
||||
# DID output no diff between paypal_bilan_1.47 and 1.48
|
||||
(
|
||||
#set -x
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.46 --bnc --debug --debug_invoice --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334' /g/paypal/paypal_201?_??_complet.csv \
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.47 --bnc --debug --debug_invoice --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334' /g/paypal/paypal_201?_??_complet.csv \
|
||||
> /g/var/paypal_bilan/tests/paypal_invoice.out1 2>&1
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug --debug_invoice --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334' /g/paypal/paypal_201?_??_complet.csv \
|
||||
> /g/var/paypal_bilan/tests/paypal_invoice.out2 2>&1
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# $Id: paypal_bilan,v 1.47 2012/02/24 12:22:05 gilles Exp gilles $
|
||||
# $Id: paypal_bilan,v 1.48 2012/04/15 09:24:49 gilles Exp gilles $
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
@ -477,8 +477,10 @@ sub compute_line {
|
||||
$FR_flag = ' FR' if $Pays eq 'France' ;
|
||||
my $IND_flag = '' ;
|
||||
$IND_flag = ' IND' if ('imapsync usage' eq $Nom_Option_1 and 'individual' eq $Valeur_Option_1 ) ;
|
||||
my $SUPPORT_flag = '' ;
|
||||
$SUPPORT_flag = ' support' if ( 'imapsync support' eq $Titre_de_l_objet ) ;
|
||||
print "FE $invoice$FR_flag$IND_flag\n" ;
|
||||
print "FE $invoice$FR_flag$IND_flag imapsync $Nom\n" ;
|
||||
print "FE $invoice$FR_flag$IND_flag imapsync$SUPPORT_flag $Nom\n" ;
|
||||
printf( "%.2f [EUR %.2f]\n", $Montant, $MontantEUR ) ;
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# $Id: paypal_bilan,v 1.46 2012/02/24 11:53:06 gilles Exp gilles $
|
||||
# $Id: paypal_bilan,v 1.47 2012/02/24 12:22:05 gilles Exp gilles $
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
@ -27,6 +27,7 @@ my $total_eur_invoice = 0 ;
|
||||
my $nb_invoice = 0 ;
|
||||
my $nb_invoice_refund = 0 ;
|
||||
my $nb_invoice_suspended = 0 ;
|
||||
my $nb_invoice_canceled = 0 ;
|
||||
|
||||
my ( $tests, $testeur ) ;
|
||||
my $debug ;
|
||||
@ -41,6 +42,7 @@ my $bnc = '' ;
|
||||
my $usdeur = 1.2981 ;
|
||||
my $invoices ;
|
||||
my %invoice_refund ;
|
||||
my %invoice_canceled ;
|
||||
my %invoice_suspended ;
|
||||
my $write_invoices = 0 ;
|
||||
my $avoid_numbers ;
|
||||
@ -148,6 +150,10 @@ foreach my $invoice ( @invoices_wanted ) {
|
||||
my $nb_invoice_sent = scalar( @invoice_sent ) ;
|
||||
@invoice_not_sent = sort { $a <=> $b } keys( %invoice_not_sent ) ;
|
||||
|
||||
my @invoice_canceled = sort { $a <=> $b } keys( %invoice_canceled ) ;
|
||||
my @invoice_suspended = sort { $a <=> $b } keys( %invoice_suspended ) ;
|
||||
my @invoice_refund = sort { $a <=> $b } keys( %invoice_refund ) ;
|
||||
|
||||
print "USD banque $total_usd_received\n" ;
|
||||
print "USD invoice $total_usd_invoice\n" ;
|
||||
my $total_eur_from_usd ;
|
||||
@ -174,8 +180,9 @@ print "EUR total TVA $total_TVA_EUR\n" ;
|
||||
print "EUR total HT sup $total_HT_EUR_sup\n" ;
|
||||
print "EUR total TVA sup $total_TVA_EUR_sup\n" ;
|
||||
print "Nb invoice $nb_invoice ( from $first_invoice_paypal to $last_invoice )\n" ;
|
||||
print "Nb invoice refund $nb_invoice_refund\n" ;
|
||||
print "Nb invoice suspended $nb_invoice_suspended\n" ;
|
||||
print "Nb invoice canceled $nb_invoice_canceled @invoice_canceled\n" ;
|
||||
print "Nb invoice suspended $nb_invoice_suspended @invoice_suspended\n" ;
|
||||
print "Nb invoice refund $nb_invoice_refund @invoice_refund\n" ;
|
||||
print "Nb invoice sent $nb_invoice_sent\n" ;
|
||||
print "Have to send invoices @invoice_not_sent\n" if ( @invoice_not_sent ) ;
|
||||
|
||||
@ -420,7 +427,6 @@ sub compute_line {
|
||||
and 'EUR' eq $Devise
|
||||
and 'Remboursé' eq $Etat
|
||||
) {
|
||||
#$invoice = $first_invoice + $nb_invoice ;
|
||||
$invoice = next_invoice( ) ;
|
||||
$nb_invoice++ ;
|
||||
$nb_invoice_refund++;
|
||||
@ -429,12 +435,24 @@ sub compute_line {
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
}
|
||||
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'EUR' eq $Devise
|
||||
and 'Annulé' eq $Etat
|
||||
) {
|
||||
$invoice = next_invoice( ) ;
|
||||
$nb_invoice++ ;
|
||||
$nb_invoice_canceled++;
|
||||
$invoice_canceled{ $invoice }++ ;
|
||||
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
}
|
||||
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'EUR' eq $Devise
|
||||
and 'Suspendu' eq $Etat
|
||||
) {
|
||||
#$invoice = $first_invoice + $nb_invoice ;
|
||||
$invoice = next_invoice( ) ;
|
||||
$nb_invoice++ ;
|
||||
$nb_invoice_suspended++;
|
||||
@ -448,7 +466,6 @@ sub compute_line {
|
||||
and 'EUR' eq $Devise
|
||||
and 'Non compensé' eq $Etat
|
||||
) {
|
||||
#$invoice = $first_invoice + $nb_invoice ;
|
||||
$invoice = next_invoice( ) ;
|
||||
$nb_invoice++ ;
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
293
W/paypal_reply/paypal_build_invoice_from_email
Executable file
293
W/paypal_reply/paypal_build_invoice_from_email
Executable file
@ -0,0 +1,293 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# $Id: paypal_build_invoice_from_email,v 1.1 2012/03/14 00:24:50 gilles Exp gilles $
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
use Test::More 'no_plan';
|
||||
|
||||
|
||||
my ($msg_id_file, $msg_id);
|
||||
my ($amount, $name, $email);
|
||||
my (
|
||||
$paypal_line, $paypal_info,
|
||||
$buyer, $description, $object,
|
||||
$url, $release, $release_exe,
|
||||
) ;
|
||||
|
||||
my( $day, $month, $year, $hour, $min, $sec, $fuseau, $transaction,
|
||||
$postal_address ) ;
|
||||
|
||||
my ( $help, $debug, $tests ) ;
|
||||
|
||||
my $numopt = scalar( @ARGV ) ;
|
||||
|
||||
my $test_builder = Test::More->builder;
|
||||
$test_builder->no_ending(1);
|
||||
|
||||
my $opt_ret = GetOptions(
|
||||
"help" => \$help,
|
||||
"debug!" => \$debug,
|
||||
"tests!" => \$tests,
|
||||
);
|
||||
|
||||
if ($tests) {
|
||||
$test_builder->no_ending(0);
|
||||
tests();
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
usage() and exit if ($help or ! $numopt) ;
|
||||
|
||||
$msg_id_file = $ARGV[1];
|
||||
$msg_id = firstline($msg_id_file);
|
||||
|
||||
$debug and print "Hi!\n" ;
|
||||
|
||||
while(<>) {
|
||||
$debug and print "LINE 1:$_" ;
|
||||
next if ( ! /^(.*Num.+ro de transaction.*)$/ );
|
||||
$paypal_line = $1;
|
||||
$paypal_info = "===== Paypal id =====\n$paypal_line\n";
|
||||
$debug and print "paypal_line: [$paypal_line]\n" ;
|
||||
( $day, $month, $year, $hour, $min, $sec, $fuseau, $transaction )
|
||||
= paypal_infos( $paypal_line ) ;
|
||||
$debug and print "$day, $month, $year, $hour, $min, $sec, $fuseau, $transaction\n" ;
|
||||
last;
|
||||
}
|
||||
while(<>) {
|
||||
$debug and print "LINE 2:$_" ;
|
||||
if ( /^Vous avez re.*paiement d'un montant de (.*) de la part de (.*) \((.*)\)/) {
|
||||
($amount, $name, $email) = ($1, $2, $3);
|
||||
last;
|
||||
}
|
||||
if ( /^Vous avez re.*paiement d'un montant de (.*) de la part de (.*)/) {
|
||||
($amount, $name, $email) = ($1, "", $2);
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$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/" ;
|
||||
|
||||
#print "[$amount] [$name] [$email] [$paypal_line]\n";
|
||||
|
||||
|
||||
while(<>) {
|
||||
$debug and print "LINE 3:$_" ;
|
||||
if ( /^Acheteur/ ) {
|
||||
$buyer .= "===== Acheteur =====\n";
|
||||
last;
|
||||
}
|
||||
if ( /^Informations sur l'acheteur/ ) {
|
||||
$buyer .= "===== Acheteur =====\n";
|
||||
chomp( $name = <> );
|
||||
$buyer .= "$name\n" ;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
while(<>) {
|
||||
$debug and print "LINE 4a:$_" ;
|
||||
$buyer .= $_ if ( ! /^Adresse de livraison/ );
|
||||
last if ( /^Adresse de livraison/ );
|
||||
}
|
||||
|
||||
|
||||
while(<>) {
|
||||
$debug and print "LINE 4b:$_" ;
|
||||
$postal_address .= $_ if ( ! /^Instructions .* l'attention du marchand/ and "\n" ne $_ );
|
||||
last if ( /^Instructions .* l'attention du marchand/ );
|
||||
}
|
||||
|
||||
my @postal_address = split( "\n", $postal_address ) ;
|
||||
my $country = $postal_address[-1] ;
|
||||
|
||||
while(<>) {
|
||||
$debug and print "LINE 4c:$_" ;
|
||||
$buyer .= $_ if ( ! /^-----------------------------------/ );
|
||||
last if ( /^-----------------------------------/ );
|
||||
}
|
||||
|
||||
while(<>) {
|
||||
$debug and print "LINE 5:$_" ;
|
||||
next if ( ! /^Description :(.*)/ );
|
||||
$object = $1 ;
|
||||
$description = "===== Details =====\n";
|
||||
$description .= $_;
|
||||
last;
|
||||
}
|
||||
|
||||
|
||||
|
||||
while(<>) {
|
||||
$debug and print "LINE 6:$_" ;
|
||||
$description .= $_;
|
||||
last if ( /^Paiement envoy/ );
|
||||
last if ( /^N.*d'avis de r.*ception/ );
|
||||
}
|
||||
|
||||
|
||||
my $address = 'gilles.lamiral@laposte.net';
|
||||
my $address2 = 'gilles@lamiral.info';
|
||||
my $rcstag = '$Id: paypal_build_invoice_from_email,v 1.1 2012/03/14 00:24:50 gilles Exp gilles $';
|
||||
|
||||
my $download_info = "You will find the latest imapsync.exe binary (release $release_exe)
|
||||
and the latest imapsync source code (release $release) at the following link:
|
||||
$url" ;
|
||||
|
||||
my $next_releases =
|
||||
"Next imapsync releases will be available to you for one year without extra payment.
|
||||
You'll be 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.
|
||||
Run imapsync without any argument to know if a new release is available." ;
|
||||
|
||||
|
||||
my $thanks_software = "I thank you for buying and using imapsync,
|
||||
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.
|
||||
Professionnal phone number: +33 951 84 42 42 (France)
|
||||
Mobile phone number: +33 620 79 76 06 (France).
|
||||
|
||||
I can call you back for free in many countries on landline telephone numbers
|
||||
and to mobile numbers in the United States and France. So do not hesitate
|
||||
to send me a note if you need vocal support.' ;
|
||||
|
||||
|
||||
my $text_software = "$download_info\n
|
||||
$next_releases\n
|
||||
You will receive an invoice soon.\n
|
||||
$thanks_software" ;
|
||||
|
||||
my $text_support = "$support_info\n
|
||||
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 $text ;
|
||||
if ( 'imapsync support' eq $object ) {
|
||||
$text = $text_support ;
|
||||
$subject = $subject_support ;
|
||||
}else{
|
||||
$text = $text_software ;
|
||||
$subject = $subject_software ;
|
||||
}
|
||||
|
||||
|
||||
my $message = <<EOM
|
||||
X-Comment: $rcstag
|
||||
In-Reply-To: $msg_id
|
||||
From: Gilles LAMIRAL <$address>
|
||||
To: <$email>
|
||||
Bcc: Gilles LAMIRAL <$address>, <$address2>
|
||||
Subject: $subject
|
||||
|
||||
Hello $name,
|
||||
|
||||
$text
|
||||
|
||||
$paypal_info
|
||||
$buyer
|
||||
$description
|
||||
==== Vendeur ====
|
||||
Gilles LAMIRAL
|
||||
4 La Billais
|
||||
35580 Baulon
|
||||
FRANCE
|
||||
|
||||
Tel: +33 951 84 42 42
|
||||
Mob: +33 620 79 76 06
|
||||
Fax: +33 956 84 42 42
|
||||
|
||||
email: $address
|
||||
|
||||
--
|
||||
Au revoir, 09 51 84 42 42
|
||||
Gilles Lamiral. France, Baulon (35580) 06 20 79 76 06
|
||||
EOM
|
||||
;
|
||||
|
||||
=pod
|
||||
=cut
|
||||
|
||||
|
||||
#print $message;
|
||||
#print "[$amount] [$name] [$email] [$paypal_line] [$object]\n";
|
||||
print "[$postal_address]
|
||||
@postal_address
|
||||
$country
|
||||
\n" ;
|
||||
|
||||
sub firstline {
|
||||
# extract the first line of a file (without \n)
|
||||
|
||||
my($file) = @_;
|
||||
my $line = "";
|
||||
|
||||
open FILE, $file or die("error [$file]: $! ");
|
||||
chomp($line = <FILE>);
|
||||
close FILE;
|
||||
$line = ($line) ? $line: "error !EMPTY! [$file]";
|
||||
return $line;
|
||||
}
|
||||
|
||||
sub tests {
|
||||
|
||||
SKIP: {
|
||||
skip "No test in normal run" if ( not $tests ) ;
|
||||
tests_paypal_infos() ;
|
||||
}
|
||||
}
|
||||
|
||||
sub paypal_infos {
|
||||
|
||||
my $paypal_infos = shift ;
|
||||
$paypal_infos =~ /(\d{1,2}) (.*) (\d{4}) (\d\d):(\d\d):(\d\d) (.*) \| Num.*ro de transaction : (.*)/ ;
|
||||
my( $day, $month, $year, $hour, $min, $sec, $fuseau, $transaction )
|
||||
= ( $1, $2, $3, $4, $5, $6, $7, $8 ) ;
|
||||
#print "$day, $month, $year, $hour, $min, $sec, $fuseau, $transaction\n" ;
|
||||
return( $day, $month, $year, $hour, $min, $sec, $fuseau, $transaction ) ;
|
||||
|
||||
}
|
||||
|
||||
sub tests_paypal_infos {
|
||||
#ok( 1 == 1 ) ;
|
||||
my( $day, $month, $year, $hour, $min, $sec, $fuseau, $transaction )
|
||||
= paypal_infos( "14 mar 2012 01:47:55 CET | Numéro de transaction : 75E02654YS4206549" ) ;
|
||||
ok( '14' eq $day, 'paypal_infos: day' ) ;
|
||||
ok( 'mar' eq $month, 'paypal_infos: month' ) ;
|
||||
ok( '2012' eq $year, 'paypal_infos: year' ) ;
|
||||
ok( '01' eq $hour, 'paypal_infos: hour' ) ;
|
||||
ok( '47' eq $min, 'paypal_infos: min' ) ;
|
||||
ok( '55' eq $sec, 'paypal_infos: sec' ) ;
|
||||
ok( 'CET' eq $fuseau, 'paypal_infos: fuseau' ) ;
|
||||
ok( '75E02654YS4206549' eq $transaction, 'paypal_infos: transaction' ) ;
|
||||
|
||||
( $day, $month, $year, $hour, $min, $sec, $fuseau, $transaction )
|
||||
= paypal_infos( "1 fév 2012 20:18:10 CET | Numéro de transaction : 5HF11160SD123724S" ) ;
|
||||
ok( '1' eq $day, 'paypal_infos: day' ) ;
|
||||
ok( 'fév' eq $month, 'paypal_infos: month' ) ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id: paypal_build_invoices,v 1.26 2012/02/24 12:32:56 gilles Exp gilles $
|
||||
# $Id: paypal_build_invoices,v 1.29 2012/04/13 10:42:44 gilles Exp gilles $
|
||||
|
||||
# usage: sh paypal_build_invoices /g/var/paypal_invoices/????
|
||||
|
||||
@ -22,24 +22,28 @@ set -x
|
||||
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1094 /g/paypal/paypal_2011_10_complet.csv
|
||||
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1185 /g/paypal/paypal_2011_11_complet.csv
|
||||
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1263 /g/paypal/paypal_2011_12_complet.csv
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1335 /g/paypal/paypal_2012_01_complet.csv
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1417 /g/paypal/paypal_2012_02_complet.csv
|
||||
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1335 /g/paypal/paypal_2012_01_complet.csv
|
||||
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1417 /g/paypal/paypal_2012_02_complet.csv
|
||||
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1508 /g/paypal/paypal_2012_03_complet.csv
|
||||
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 1575 /g/paypal/paypal_2012_04_complet.csv
|
||||
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --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 294 --usdeur 1.3385 /g/paypal/paypal_2011_01_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 382 /g/paypal/paypal_2011_02_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 473 /g/paypal/paypal_2011_03_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 570 /g/paypal/paypal_2011_04_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 645 /g/paypal/paypal_2011_05_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 733 /g/paypal/paypal_2011_06_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 824 /g/paypal/paypal_2011_07_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 917 /g/paypal/paypal_2011_08_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1094 /g/paypal/paypal_2011_10_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1185 /g/paypal/paypal_2011_11_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1263 /g/paypal/paypal_2011_12_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 382 --usdeur 1.3692 /g/paypal/paypal_2011_02_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 473 --usdeur 1.3809 /g/paypal/paypal_2011_03_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 570 --usdeur 1.4172 /g/paypal/paypal_2011_04_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 645 --usdeur 1.4810 /g/paypal/paypal_2011_05_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 733 --usdeur 1.4395 /g/paypal/paypal_2011_06_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 824 --usdeur 1.4496 /g/paypal/paypal_2011_07_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 917 --usdeur 1.4397 /g/paypal/paypal_2011_08_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1094 --usdeur 1.4380 /g/paypal/paypal_2011_10_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1185 --usdeur 1.3387 /g/paypal/paypal_2011_11_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1263 --usdeur 1.3856 /g/paypal/paypal_2011_12_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1335 /g/paypal/paypal_2012_01_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1417 /g/paypal/paypal_2012_02_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1508 /g/paypal/paypal_2012_03_complet.csv
|
||||
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 1575 /g/paypal/paypal_2012_04_complet.csv
|
||||
set +x
|
||||
|
||||
# La totale
|
||||
|
@ -83,7 +83,7 @@ extract_mail() {
|
||||
|
||||
convert_utf8() {
|
||||
mkdir -p $tmpdir/msg_out_utf8/
|
||||
test -z "`ls $tmpdir/msg_out/`" && echo no mail && return
|
||||
test -z "`ls $tmpdir/msg_out/*_d/*.txt`" && echo no mail && return
|
||||
for f in $tmpdir/msg_out/*_d/*.txt; do
|
||||
b=`basename "$f"`
|
||||
d=`dirname "$f"`
|
||||
@ -113,8 +113,9 @@ troncate_last_2_chars() {
|
||||
|
||||
build_reply() {
|
||||
mkdir -p $tmpdir/msg_reply/
|
||||
test -z "`ls $tmpdir/msg_out/`" && echo no mail && return
|
||||
for f in $tmpdir/msg_out_utf8/*/*.txt; do
|
||||
#echo "$f"
|
||||
echo "$f"
|
||||
d=`dirname "$f"`
|
||||
bd=`basename "$d"`
|
||||
file_id=`troncate_last_2_chars $bd`
|
||||
@ -122,6 +123,7 @@ build_reply() {
|
||||
test -f "$d_reply/$file_id.txt" && continue
|
||||
mkdir -p "$d_reply"
|
||||
echo building "$d_reply/$file_id.txt"
|
||||
echo paypal_build_reply "$f" "$tmpdir/msg_id/$file_id"
|
||||
paypal_build_reply "$f" "$tmpdir/msg_id/$file_id" > "$d_reply/$file_id.txt"
|
||||
done
|
||||
}
|
||||
@ -139,21 +141,38 @@ build_reply_arg() {
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
build_invoice_arg() {
|
||||
for f in "$@"; do
|
||||
#echo "$f"
|
||||
d=`dirname "$f"`
|
||||
bd=`basename "$d"`
|
||||
file_id=`troncate_last_2_chars $bd`
|
||||
d_invoice="$tmpdir/invoices/$file_id"
|
||||
echo building "$d_invoice/imapsync_var.tex"
|
||||
echo paypal_build_invoice_from_email "$f" "$tmpdir/msg_id/$file_id"
|
||||
paypal_build_invoice_from_email "$f" "$tmpdir/msg_id/$file_id"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
|
||||
debug_mode() {
|
||||
#return 0
|
||||
return 0
|
||||
return 1
|
||||
}
|
||||
|
||||
send_reply() {
|
||||
mkdir -p $tmpdir/msg_sent/
|
||||
test -z "`ls $tmpdir/msg_reply/*/*.txt`" && echo no mail && return
|
||||
for f in $tmpdir/msg_reply/*/*.txt; do
|
||||
b=`basename "$f"`
|
||||
d=`dirname "$f"`
|
||||
bd=`basename "$d"`
|
||||
d_sent="$tmpdir/msg_sent/$bd"
|
||||
debug_mode && echo "paypal_send $f"
|
||||
test -f "$d_sent/$b" && continue
|
||||
mkdir -p "$d_sent"
|
||||
debug_mode && echo "paypal_send $f"
|
||||
test X"--send" = X"$1" && paypal_send --send --subscribe "$f" && touch "$d_sent/$b"
|
||||
#test X"--send" = X"$1" && touch "$d_sent/$b"
|
||||
test X"" = X"$1" && paypal_send "$f"
|
||||
@ -218,9 +237,9 @@ paypal_all_dev() {
|
||||
build_reply
|
||||
echo "Done build_reply in $tmpdir/msg_reply/"
|
||||
echo "Will send_reply $@"
|
||||
|
||||
send_reply "$@"
|
||||
echo "Done send_reply $@"
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -5,24 +5,20 @@
|
||||
set -e
|
||||
#set -x
|
||||
|
||||
|
||||
# Add path to commands at home
|
||||
PATH=$PATH:/g/public_html/imapsync/W/paypal_reply
|
||||
PERL5LIB=/g/public_html/imapsync/Mail-IMAPClient-3.28/lib
|
||||
PERL5LIB=/g/public_html/imapsync/Mail-IMAPClient-3.30/lib
|
||||
export PERL5LIB
|
||||
|
||||
test -f /g/public_html/imapsync/W/paypal_reply/paypal_functions \
|
||||
&& . /g/public_html/imapsync/W/paypal_reply/paypal_functions
|
||||
|
||||
|
||||
DATE_1=`date`
|
||||
|
||||
echo "==== paypal_reply_test ===="
|
||||
paypal_reply_petite_dev "$@"
|
||||
echo
|
||||
|
||||
|
||||
|
||||
DATE_2=`date`
|
||||
|
||||
echo "Debut : $DATE_1"
|
||||
|
4
i3
4
i3
@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id: i3,v 1.8 2011/11/12 21:49:00 gilles Exp gilles $
|
||||
# $Id: i3,v 1.9 2012/04/15 19:18:02 gilles Exp gilles $
|
||||
|
||||
BASE=`dirname $0`
|
||||
perl -I${BASE}/Mail-IMAPClient-3.30/lib ${BASE}/imapsync "$@"
|
||||
perl -I${BASE}/Mail-IMAPClient-3.31/lib ${BASE}/imapsync "$@"
|
||||
|
||||
|
16
imapsync
16
imapsync
@ -20,7 +20,7 @@ Synchronise mailboxes between two imap servers.
|
||||
Good at IMAP migration. More than 44 different IMAP server softwares
|
||||
supported with success.
|
||||
|
||||
$Revision: 1.487 $
|
||||
$Revision: 1.488 $
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
@ -519,7 +519,7 @@ Entries for imapsync:
|
||||
|
||||
Feedback (good or bad) will often be welcome.
|
||||
|
||||
$Id: imapsync,v 1.487 2012/02/29 05:29:21 gilles Exp gilles $
|
||||
$Id: imapsync,v 1.488 2012/04/15 17:38:21 gilles Exp gilles $
|
||||
|
||||
=cut
|
||||
|
||||
@ -636,7 +636,7 @@ my(
|
||||
|
||||
# global variables initialisation
|
||||
|
||||
$rcs = '$Id: imapsync,v 1.487 2012/02/29 05:29:21 gilles Exp gilles $ ';
|
||||
$rcs = '$Id: imapsync,v 1.488 2012/04/15 17:38:21 gilles Exp gilles $ ';
|
||||
|
||||
$total_bytes_transferred = 0;
|
||||
$total_bytes_skipped = 0;
|
||||
@ -1868,8 +1868,8 @@ sub banner_imapsync {
|
||||
my @argv_copy = @_;
|
||||
my $banner_imapsync = join("",
|
||||
'$RCSfile: imapsync,v $ ',
|
||||
'$Revision: 1.487 $ ',
|
||||
'$Date: 2012/02/29 05:29:21 $ ',
|
||||
'$Revision: 1.488 $ ',
|
||||
'$Date: 2012/04/15 17:38:21 $ ',
|
||||
"\n",localhost_info(), "\n",
|
||||
"Command line used:\n",
|
||||
"$0 ", command_line_nopassword(@argv_copy), "\n",
|
||||
@ -3674,7 +3674,7 @@ sub check_last_release {
|
||||
}
|
||||
|
||||
sub imapsync_version {
|
||||
my $rcs = '$Id: imapsync,v 1.487 2012/02/29 05:29:21 gilles Exp gilles $ ';
|
||||
my $rcs = '$Id: imapsync,v 1.488 2012/04/15 17:38:21 gilles Exp gilles $ ';
|
||||
$rcs =~ m/,v (\d+\.\d+)/;
|
||||
my $VERSION = ($1) ? $1: "UNKNOWN";
|
||||
return($VERSION);
|
||||
@ -4262,11 +4262,11 @@ sub delete_folders_in_2_not_in_1 {
|
||||
my $dry_message = '';
|
||||
$dry_message = "\t(not really since --dry mode)" if $dry;
|
||||
foreach my $folder (@h2_folders_not_in_1) {
|
||||
if ( defined( $delete2foldersonly ) and eval( "\$folder !~ \$delete2foldersonly" ) ) {
|
||||
if ( defined( $delete2foldersonly ) and eval( "\$folder !~ $delete2foldersonly" ) ) {
|
||||
print "Not deleting $folder because of --delete2foldersonly $delete2foldersonly\n";
|
||||
next;
|
||||
}
|
||||
if ( defined( $delete2foldersbutnot ) and eval( "\$folder =~ \$delete2foldersbutnot" ) ) {
|
||||
if ( defined( $delete2foldersbutnot ) and eval( "\$folder =~ $delete2foldersbutnot" ) ) {
|
||||
print "Not deleting $folder because of --delete2foldersbutnot $delete2foldersbutnot\n";
|
||||
next;
|
||||
}
|
||||
|
99
index.shtml
99
index.shtml
@ -5,7 +5,7 @@
|
||||
<title>Imapsync: an IMAP migration tool ( release <!--#exec cmd="cat VERSION"--> )</title>
|
||||
<meta name="generator" content="Bluefish 1.0.7"/>
|
||||
<meta name="author" content="Gilles LAMIRAL"/>
|
||||
<meta name="date" content="2012-02-20T18:40:26+0100"/>
|
||||
<meta name="date" content="2012-04-15T21:16:36+0200"/>
|
||||
<meta name="copyright" content="None"/>
|
||||
<meta name="keywords" content="imap, transfert, migration"/>
|
||||
<meta name="description" content="imap migration tool"/>
|
||||
@ -31,7 +31,7 @@
|
||||
<ul class="none">
|
||||
<li>Buy <a href="#buy_source"><b>imapsync source code</b></a> (any OS)</li>
|
||||
<li>Buy <a href="#buy_exe"><b>standalone win32</b></a> <b>imapsync.exe</b> (also <b>works on win64</b>)</li>
|
||||
<li>Buy professional <a href="#buy_support">imapsync <b>support</b></a> to succeed your migration</li>
|
||||
<li>Buy <b>full professional</b> <a href="#buy_support">imapsync <b>support</b></a> to succeed your migration</li>
|
||||
<li>Are your <a href="#imap_server_success">imap servers <b>supported</b></a> by imapsync?</li>
|
||||
</ul>
|
||||
|
||||
@ -63,12 +63,12 @@ for <b>2 ways synchronizations</b>.
|
||||
<p>Alternatives to imapsync are listed in the <a href="#similar"><b>Similar softwares</b></a> section.
|
||||
</p>
|
||||
|
||||
<h2><a id="NUMBERS"></a>Some numbers for past year 2011</h2>
|
||||
<h2><a id="NUMBERS"></a>Some numbers for 2011</h2>
|
||||
|
||||
<ul>
|
||||
<li>Number of <b>imapsync users</b> per month: between <b>2 and 3 thousands </b>users</li>
|
||||
<li>Number of <b>imapsync transfers</b> between <b>3 and 25 millions mailboxes </b>transfers per month, 93 millions in 2011</li>
|
||||
<li>Pourcentage between <b>operating systems</b> users running imapsync:
|
||||
<li>Number of <b>imapsync transfers</b> between <b>3 and 25 millions mailboxes </b>transfers per month, total is 93 millions in 2011</li>
|
||||
<li>Percentage between <b>operating systems</b> users running imapsync:
|
||||
<ul>
|
||||
<li><b>Linux: 65 %</b></li>
|
||||
<li><b>Win32: 18 %</b></li>
|
||||
@ -93,6 +93,29 @@ for <b>2 ways synchronizations</b>.
|
||||
|
||||
<p>New features or bugfixes since previous releases:</p>
|
||||
|
||||
<ul>
|
||||
<li><b>1.488</b></li>
|
||||
<li><b>Bug fix</b>: Reverse half of the last patch about --delete2foldersonly since it destroyed a good feature permitting imapsync variables like ${h2_sep}
|
||||
in --delete2foldersonly, the good escaping has to be done in the parameter value:
|
||||
<ul>
|
||||
<li>--delete2foldersonly --delete2foldersbutnot need good escaping in call, not in code. Example: --delete2foldersbutnot "/\[Gmail\]/"</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Bug fix: removed several useless Perl warnings in different contexts.</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li><b>1.487</b></li>
|
||||
<li><b>Bug fix</b>: for example the issue was <b>brackets in [Gmail] folder names</b> in the context of cache --useuid.
|
||||
Thanks to Pierre GUILLAUME, applied patch about:
|
||||
<ul>
|
||||
<li>$cache_dir and bsd_globs() that needs escaped characters.</li>
|
||||
<li>eval and --delete2foldersonly --delete2foldersbutnot that need also good escaping.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Bug fix: removed several useless Perl warnings in different contexts.</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li><b>1.484</b></li>
|
||||
<li><b>Bug fix</b>: Back to select() (read-write mode) instead of examine() (read-only mode in 1.468) on host1. <b>Needed with --delete</b></li>
|
||||
@ -107,13 +130,14 @@ See for example <a href="http://support.google.com/a/bin/answer.py?hl=en&ans
|
||||
<li><b>Better behavior</b>: Check if a message exists before fetching it (could have been deleted recently)</li>
|
||||
<li><b>Usability</b>: Unified outout in --debug mode. Lines start with Host1 or Host2.</li>
|
||||
<li><b>Usability</b>: Changed output about messages ignored to better reflect what is going on.</li>
|
||||
<li><b>Better behavior</b>: --split down to 100 by defaultto follow the recommendation of RFC2683 section 3.2.1.5
|
||||
<li><b>Better behavior</b>: --split down to 100 by default to follow the recommendation of RFC2683 section 3.2.1.5
|
||||
Thanks to Phil Pearl for this advice.</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
|
||||
<li><b>1.476</b></li>
|
||||
<li><b>Usability</b>: Added <b>start</b> and <b>end dates</b> in the final statistics.</li>
|
||||
<li><b>Better behavior</b>: Default headers used to identify a message are now "Message-Id" and "Received" (<b>Exchange compatibility</b> bu default).</li>
|
||||
@ -135,7 +159,7 @@ Thanks to Phil Pearl for this advice.</li>
|
||||
</ul>
|
||||
-->
|
||||
|
||||
<h2><a id="DOC_BASIC"></a>Basic usage</h2>
|
||||
<h2><a id="DOC_BASIC"></a>Simple transfer on Windows</h2>
|
||||
|
||||
<p>
|
||||
See <b><a href="./imapsync_example.bat.txt">imapsync_example.bat.txt</a></b> batch file example
|
||||
@ -143,7 +167,7 @@ that you can easily adapt with your parameters (remove .txt extension in order t
|
||||
</p>
|
||||
|
||||
|
||||
<h2><a id="DOC_MASS"></a>Huge usage</h2>
|
||||
<h2><a id="DOC_MASS"></a>Massive transfers</h2>
|
||||
|
||||
<p>
|
||||
See <b><a href="./file.txt">file.txt</a></b> example for <b>batch massive migration</b>
|
||||
@ -171,20 +195,22 @@ See <b><a href="./file.txt">file.txt</a></b> example for <b>batch massive migrat
|
||||
<p>Buy <b>latest</b> imapsync Perl <b>source code</b> for <b>42 EUR</b>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>+ One year</b> of imapsync <b>updates</b> without extra payment.<br/>
|
||||
<b>+ 30 days money-back guarantee!</b><br/>
|
||||
<b>+ A little support</b>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
42 EUR is equal to around <b>54 USD</b>, no problem to pay in USD (or any currency) with paypal:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The Perl <b>imapsync</b> source code will run anywhere a <b>Perl interpreter can run</b>: any Unix, Linux, Windows, or Mac OS operating system.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<b>+ One year</b> of imapsync <b>updates</b> without extra payment.<br/>
|
||||
<b>+ 30 days money-back guarantee!</b><br/>
|
||||
<b>+ Limited support</b>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Payment by Paypal account and credit card accepted. <br/>
|
||||
Price <b>42 EUR</b> is equal to around <b>54 USD</b>, no problem to pay in USD (or any currency) via paypal:
|
||||
</p>
|
||||
|
||||
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
<p>
|
||||
<input type="hidden" name="cmd" value="_s-xclick"/>
|
||||
@ -203,15 +229,16 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>
|
||||
<p>You will receive a download link <b>just after</b> the payment.
|
||||
</p>
|
||||
|
||||
<h2><a id="buy_support"></a>Buy professional support for imapsync</h2>
|
||||
<h2><a id="buy_support"></a>Buy full professional support for imapsync</h2>
|
||||
|
||||
<p>You will be able to expose your issues by email or phone and to converse until your issues are solved.
|
||||
<p>You will be able to expose your issues by email or phone and we'll work together until complete success.
|
||||
</p>
|
||||
|
||||
<p>For <b>180 EUR</b> buy imapsync <b>support</b> by the developper who wrote and maintains imapsync.
|
||||
<p>For <b>90 EUR</b> buy imapsync <b>full support</b> done by the imapsync designer/developper.
|
||||
</p>
|
||||
<p>
|
||||
180 EUR is equal to around <b>230 USD</b>, no problem to pay in USD (or any currency) with paypal:
|
||||
Payment by Paypal account and credit card accepted. <br/>
|
||||
90 EUR is equal to around <b>120 USD</b>, no problem to pay in USD (or any currency) with paypal:
|
||||
</p>
|
||||
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
@ -239,12 +266,12 @@ buying the latest win32 <b>standalone imapsync.exe</b> for <b>42 EUR</b>
|
||||
<p>
|
||||
<b>+ One year</b> of imapsync <b>updates</b> without extra payment.<br/>
|
||||
<b>+ 30 days money-back guarantee!</b><br/>
|
||||
<b>+ A little support</b>.
|
||||
<b>+ Limited support</b>.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
42 EUR is equal to around <b>54 USD</b>, no problem to pay in USD (or any currency) with paypal:
|
||||
Payment by Paypal account and credit card accepted. <br/>
|
||||
Price <b>42 EUR</b> is equal to around <b>54 USD</b>, no problem to pay in USD (or any currency) via paypal:
|
||||
</p>
|
||||
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||
@ -284,8 +311,7 @@ The build system for imapsync.exe is XP Pro SP2 on a Intel Celeron 400 MHz 256 M
|
||||
<p>The <a href="FAQ">FAQ</a> file presents Frequently Asked Questions (and not so frequently asked ones).
|
||||
</p>
|
||||
|
||||
<p>The <a href="TODO">TODO</a> file list what may be coded or done in the future.<br/>
|
||||
See also the <a href="#WANTED">wanted</a> section.
|
||||
<p>The <a href="TODO">TODO</a> file list what may be coded or done in the future.
|
||||
</p>
|
||||
|
||||
<p>All the people I thank are in the <a href="CREDITS">CREDITS</a> file.
|
||||
@ -343,20 +369,6 @@ See also the <a href="#WANTED">wanted</a> section.
|
||||
</p>
|
||||
|
||||
|
||||
<h2><a id="WANTED"></a>WANTED!</h2>
|
||||
|
||||
<p>I fix bugs as soon as possible and I code new features when I find them useful.<br/>
|
||||
Don't hesitate to ask for them.
|
||||
</p>
|
||||
|
||||
<p>Some features and their time 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></tr>
|
||||
<tr align="right"><td> <b>No</b></td><td>Backup to files </td><td>20 hours </td><td> 60 min </td></tr>
|
||||
<tr align="right"><td> <b>No</b></td><td>Efficient Gmail backup </td><td>20 hours </td><td> 80 min </td></tr>
|
||||
<tr align="right"><td> <b>No</b></td><td>Better error reporting </td><td> 5 hours </td><td> 0 min </td></tr>
|
||||
</table>
|
||||
|
||||
<h2><a id="imap_server_success"></a>Lists of imap server software failures and success stories</h2>
|
||||
|
||||
@ -481,7 +493,8 @@ Prices are given par mailbox and may be outdated (december 2011).</p>
|
||||
<li> Migrationwiz 10 USD: <a href="http://www.migrationwiz.com/">http://www.migrationwiz.com/</a></li>
|
||||
<li> Rackspace migration 10 USD: <a href="http://www.rackspace.com/apps/email_hosting/migrations/">http://www.rackspace.com/apps/email_hosting/migrations/</a></li>
|
||||
<li> Yippiemove 15 USD: <a href="http://www.yippiemove.com">http://www.yippiemove.com/</a></li>
|
||||
<li>Trueswitch 29.5 USD: <a href="http://www.trueswitch.com">http://www.trueswitch.com</a></li>
|
||||
<li> Audriga Gmbh 14.99 EUR : <a href="https://www.email-umzug.de/en.html">https://www.email-umzug.de/</a></li>
|
||||
<li> Trueswitch 29.5 USD: <a href="http://www.trueswitch.com">http://www.trueswitch.com</a></li>
|
||||
</ul>
|
||||
|
||||
<hr/>
|
||||
@ -510,7 +523,7 @@ alt="Viewable With Any Browser" />
|
||||
<!--#config timefmt="%D" -->
|
||||
<!--#config timefmt="%A %B %d, %Y" -->
|
||||
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
|
||||
($Id: index.shtml,v 1.112 2012/02/20 18:23:06 gilles Exp gilles $)
|
||||
($Id: index.shtml,v 1.117 2012/04/15 19:16:51 gilles Exp gilles $)
|
||||
</p>
|
||||
|
||||
</body>
|
||||
|
74
tests.sh
74
tests.sh
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $Id: tests.sh,v 1.192 2012/02/25 14:41:47 gilles Exp gilles $
|
||||
# $Id: tests.sh,v 1.194 2012/04/15 19:17:33 gilles Exp gilles $
|
||||
|
||||
# Example 1:
|
||||
# CMD_PERL='perl -I./Mail-IMAPClient-3.25/lib' sh -x tests.sh
|
||||
@ -23,7 +23,7 @@ echo HOST2=$HOST2
|
||||
|
||||
# few debugging tests use:
|
||||
CMD_PERL_2xx='perl -I./Mail-IMAPClient-2.2.9'
|
||||
CMD_PERL_3xx='perl -I./Mail-IMAPClient-3.30/lib'
|
||||
CMD_PERL_3xx='perl -I./Mail-IMAPClient-3.31/lib'
|
||||
|
||||
CMD_PERL=${CMD_PERL:-$CMD_PERL_3xx}
|
||||
|
||||
@ -248,6 +248,8 @@ ll_folder() {
|
||||
--folder INBOX.yop --folder INBOX.Trash
|
||||
}
|
||||
|
||||
|
||||
|
||||
ll_folder_noexist() {
|
||||
! $CMD_PERL ./imapsync \
|
||||
--host1 $HOST1 --user1 tata \
|
||||
@ -449,7 +451,8 @@ ll_delete2foldersonly() {
|
||||
--justfolders --nofoldersizes \
|
||||
--regextrans2 's,${h1_prefix}(.*),${h2_prefix}NEW${h2_sep}$1,' \
|
||||
--regextrans2 's,^INBOX$,${h2_prefix}NEW${h2_sep}INBOX,' \
|
||||
--delete2foldersonly '/${h2_prefix}NEW/'
|
||||
--delete2foldersonly '/${h2_prefix}NEW/' --dry
|
||||
# --delete2foldersonly '${h2_prefix}NEW'
|
||||
}
|
||||
|
||||
ll_delete2foldersonly_tmp() {
|
||||
@ -471,7 +474,7 @@ ll_delete2foldersbutnot() {
|
||||
--host2 $HOST2 --user2 titi \
|
||||
--passfile2 ../../var/pass/secret.titi \
|
||||
--justfolders --nofoldersizes \
|
||||
--delete2foldersbutnot '/NEW_2|NEW_3/' \
|
||||
--delete2foldersbutnot '/NEW_2|NEW_3|\[abc\]/' \
|
||||
--dry
|
||||
}
|
||||
|
||||
@ -1260,6 +1263,32 @@ ll_regexmess_scwchu()
|
||||
echo 'rm /home/vmail/titi/.scwchu/cur/*'
|
||||
}
|
||||
|
||||
ll_regexmess_wong()
|
||||
{
|
||||
$CMD_PERL ./imapsync \
|
||||
--host1 $HOST1 --user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--host2 $HOST2 --user2 titi \
|
||||
--passfile2 ../../var/pass/secret.titi \
|
||||
--folder INBOX.scwchu \
|
||||
--regexmess 's{\A}{Content-Type: text/plain; charset="big5"\n}gxms' \
|
||||
--debugcontent --debug
|
||||
echo "sudo sh -c 'rm /home/vmail/titi/.scwchu/cur/*'"
|
||||
}
|
||||
|
||||
ll_regexmess_wong_2()
|
||||
{
|
||||
#Received: from hkuhp22.hku.hk
|
||||
$CMD_PERL ./imapsync \
|
||||
--host1 $HOST1 --user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--host2 $HOST2 --user2 titi \
|
||||
--passfile2 ../../var/pass/secret.titi \
|
||||
--folder INBOX.scwchu \
|
||||
--regexmess 's{\A(.*?(?!^$))^(Received: from hkuhp22.hku.hk.*?)$}{$1Content-Type: text/plain; charset="big5"\n$2}gms' \
|
||||
--debugcontent --debug --dry
|
||||
echo "sudo sh -c 'rm /home/vmail/titi/.scwchu/cur/*'"
|
||||
}
|
||||
|
||||
ll_flags()
|
||||
{
|
||||
@ -1648,6 +1677,17 @@ ll_memory_consumption() {
|
||||
}
|
||||
|
||||
|
||||
ll_remove_duplicates() {
|
||||
$CMD_PERL ./imapsync \
|
||||
--host1 $HOST1 --user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--host2 $HOST1 --user2 tata \
|
||||
--passfile2 ../../var/pass/secret.tata \
|
||||
--folder INBOX.duplicates --delete2
|
||||
}
|
||||
|
||||
|
||||
|
||||
msw() {
|
||||
if can_send; then
|
||||
sendtestmessage toto
|
||||
@ -1678,13 +1718,13 @@ msw2() {
|
||||
xxxxx_gmail() {
|
||||
|
||||
! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \
|
||||
--host1 $HOST2 \
|
||||
--user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--host2 imap.gmail.com \
|
||||
--ssl2 \
|
||||
--user2 gilles.lamiral@gmail.com \
|
||||
--passfile2 ../../var/pass/secret.gilles_gmail \
|
||||
--host1 $HOST2 \
|
||||
--user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--nofoldersizes \
|
||||
--justfolders --regextrans2 's/ //g' --exclude 'INBOX.yop.YAP' --exclude Gmail
|
||||
}
|
||||
@ -1763,13 +1803,13 @@ xxxxx_gmail_5_justlogin() {
|
||||
xxxxx_gmail_6() {
|
||||
|
||||
! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \
|
||||
--host1 $HOST2 \
|
||||
--user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--host2 imap.gmail.com \
|
||||
--ssl2 \
|
||||
--user2 gilles.lamiral@gmail.com \
|
||||
--passfile2 ../../var/pass/secret.gilles_gmail \
|
||||
--host1 $HOST2 \
|
||||
--user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--nofoldersizes \
|
||||
--justfolders \
|
||||
--regextrans2 "s, +$,,g" --regextrans2 "s, +/,/,g" \
|
||||
@ -1778,6 +1818,20 @@ xxxxx_gmail_6() {
|
||||
#--dry --prefix2 '[Gmail]/'
|
||||
}
|
||||
|
||||
xxxxx_gmail_7() {
|
||||
|
||||
! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \
|
||||
--host1 $HOST2 \
|
||||
--user1 tata \
|
||||
--passfile1 ../../var/pass/secret.tata \
|
||||
--host2 imap.gmail.com \
|
||||
--ssl2 \
|
||||
--user2 gilles.lamiral@gmail.com \
|
||||
--passfile2 ../../var/pass/secret.gilles_gmail \
|
||||
--nofoldersizes \
|
||||
--folder INBOX.yop.yap
|
||||
}
|
||||
|
||||
|
||||
gmail_xxxxx() {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user