ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [Comm] Mozilla Thunderbird
@ 2004-12-02 10:11 Сергей Шамрин
  2004-12-02 10:16 ` evgen
  2004-12-02 12:14 ` [Comm] " Vitaly Ostanin
  0 siblings, 2 replies; 6+ messages in thread
From: Сергей Шамрин @ 2004-12-02 10:11 UTC (permalink / raw)
  To: community

Кто-нибудь знает плагин для Mozilla Thunderbird который позволяет 
удалять копии сообщений?
Просто при переходе с The Bat на Mozilla Thunderbird появилось несколько 
тысяч копий сообщений в разных папках и руками их удалять больно 
проблематично.
Заранее спасибо.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Comm] Mozilla Thunderbird
  2004-12-02 10:11 [Comm] Mozilla Thunderbird Сергей Шамрин
@ 2004-12-02 10:16 ` evgen
  2004-12-02 12:56   ` Kolotov Alexandr
  2004-12-02 12:14 ` [Comm] " Vitaly Ostanin
  1 sibling, 1 reply; 6+ messages in thread
From: evgen @ 2004-12-02 10:16 UTC (permalink / raw)
  To: community

Сергей Шамрин пишет:
> Кто-нибудь знает плагин для Mozilla Thunderbird который позволяет 
> удалять копии сообщений?
> Просто при переходе с The Bat на Mozilla Thunderbird появилось несколько 
> тысяч копий сообщений в разных папках и руками их удалять больно 
> проблематично.
> Заранее спасибо.

Нету. Сам искал.
Нашёл только прогу для обработки UNIX ящиков.
Но в данный момент она утеряна. И как зовётся - не помню.
Но нашёл я её на сайте мозиллы (на форуме)

Евгений


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Comm] Re: Mozilla Thunderbird
  2004-12-02 10:11 [Comm] Mozilla Thunderbird Сергей Шамрин
  2004-12-02 10:16 ` evgen
@ 2004-12-02 12:14 ` Vitaly Ostanin
  2004-12-02 12:47   ` Сергей Шамрин
  1 sibling, 1 reply; 6+ messages in thread
From: Vitaly Ostanin @ 2004-12-02 12:14 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 1053 bytes --]

Сергей Шамрин пишет:
> Кто-нибудь знает плагин для Mozilla Thunderbird который позволяет 
> удалять копии сообщений?
> Просто при переходе с The Bat на Mozilla Thunderbird появилось несколько 
> тысяч копий сообщений в разных папках

Это очень странно, я несколько раз так переносил почту, и ни разу 
такого не было.

> и руками их удалять больно 
> проблематично.
> Заранее спасибо.

Если возможности повторить переезд нет, а папки создавались по 
автоматическим фильтрам, то можно попробовать так:

- слить все папки в одну большую
- написать procmailrc, где указать правила автоматической фильтрации
- в начало правил вписать убиение дубликатов (рецепт не мой):

:0 Whc: msgid.lock
| formail -D 8192 msgid.cache

:0 a:
duplicates

После чего натравить procmail на эту большую папку. В результате 
почта должна быть отсортирована по указанным папкам, а все 
дубликаты помещены в duplicates.

man procmail
man formail
в основном, на тему примеров.

Запарно, что и говорить :)

<skipped/>

-- 
Regards, Vyt
mailto:  vyt@vzljot.ru
JID:     vyt@vzljot.ru

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Comm] Re: Mozilla Thunderbird
  2004-12-02 12:14 ` [Comm] " Vitaly Ostanin
@ 2004-12-02 12:47   ` Сергей Шамрин
  2004-12-02 14:52     ` Vitaly Ostanin
  0 siblings, 1 reply; 6+ messages in thread
From: Сергей Шамрин @ 2004-12-02 12:47 UTC (permalink / raw)
  To: community


> Это очень странно, я несколько раз так переносил почту, и ни разу 
> такого не было.
>
> Если возможности повторить переезд нет, а папки создавались по 
> автоматическим фильтрам, то можно попробовать так:
>
это точно, повторить не получиться

> - слить все папки в одну большую
> - написать procmailrc, где указать правила автоматической фильтрации
> - в начало правил вписать убиение дубликатов (рецепт не мой):
>
> :0 Whc: msgid.lock
> | formail -D 8192 msgid.cache
>
> :0 a:
> duplicates
>
> После чего натравить procmail на эту большую папку. В результате почта 
> должна быть отсортирована по указанным папкам, а все дубликаты 
> помещены в duplicates.
>
> man procmail
> man formail
> в основном, на тему примеров.
>
> Запарно, что и говорить :)

я так понимаю что это все под linux? а под виндой нет такой возможности?


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Comm] Mozilla Thunderbird
  2004-12-02 10:16 ` evgen
@ 2004-12-02 12:56   ` Kolotov Alexandr
  0 siblings, 0 replies; 6+ messages in thread
From: Kolotov Alexandr @ 2004-12-02 12:56 UTC (permalink / raw)
  To: community

>> Кто-нибудь знает плагин для Mozilla Thunderbird который позволяет 
>> удалять копии сообщений?
>> Просто при переходе с The Bat на Mozilla Thunderbird появилось 
>> несколько тысяч копий сообщений в разных папках и руками их удалять 
>> больно проблематично.
>> Заранее спасибо.
> 
> 
> Нету. Сам искал.
> Нашёл только прогу для обработки UNIX ящиков.
> Но в данный момент она утеряна. И как зовётся - не помню.
> Но нашёл я её на сайте мозиллы (на форуме)

где-то когда-то нашел...

----------------------------------------------------------------
#!/usr/bin/perl -w
use strict;

# mergebox [-h] [-d]
#
# Merge mboxen.  First argument is taken to be the destination mbox, all
# other arguments are asssumed to be source mboxen.  If a message doesn't
# have a Message-ID, construct one using MD5.  Can read Maildirs as well.
# Uses Mail::Folder::Mbox, which is nominally obsolete.  Will optionally
# delete messages older than date (ISO format YYYYMMDDhh:mm:ss) from
# source mbox(en).

# Performance - When reading the destination mbox, this program will look
# out for duplicate messages and keeps the longer message (under the
# assumption that truncation is the biggest source of duplicates).  Not
# the best, but who knows.  Once the destination mbox has been parsed,
# the program will read mbox (or maildir) looking out for duplicates.
# If the duplicate is smaller, it is skipped.  If it is longer, it is
# appended (and a warning printed).  The next time the destination is
# processed, the duplicate should be picked up and dealt with.
#
# The applicable license for distributing this module, is that
# which is common across much of the perl world, that being you get
# to use your choice of either The Artistic License of perl,
# or the GPL.  You can find copies of the Artistic License at
# perl.com (and other places), and you can find copies of the GNU
# Public License at Gnu.org (and other places).
#
# Gordon Haverland, Matter Realisations, perl@materialisations.com
# 2003/05/11

use Digest::MD5 qw(md5_base64);
use Mail::Folder::Mbox;
use Mail::Folder::Maildir;
use Mail::Internet;

use Getopt::Std;
use Date::Manip;
use vars qw($opt_h $opt_d);
my( $date, $date_dm, $past );

getopts('hd:');  # Delete messages older than $opt_d in source(s)
&usage() if( $opt_h );
if( $opt_d ) {
   die "Strange input (Date::Manip) format\n"
       unless( $opt_d =~ /^\d\d\d\d\d\d\d\d\d\d:\d\d:\d\d$/ );
}

#use Data::Dumper;  # For debugging

my( %dest,                     # Cache of Message-ID's
     $dest_folder, $dest_mbox,  # destination mbox/folder
     $email,                    # Mail::Internet email object
     $hdr,                      # Mail::Header header of $email
     $ID,                       # Message-ID of $email message
     $junk,                     # Flag to show if Message-ID present
     $size,                     # Size of message, as mbox message.
     $src_folder, $src_mbox,    # (Temporary) source mbox/folder name.
     @list,                     # Array to stick message numbers into
     );

if( $#ARGV > 0 ) {
     $dest_mbox = shift( @ARGV );
} else {
     &usage();
}

# Some email systems, have a placeholder first message, so create
# one here too.  The dummy message was sent at the origin of the
# UNIX epoch (Jan 1, 1970).
unless( -e $dest_mbox ) {
     # Grrrrr, now I find out that Mail::Folder is no longer supported,
     # and that Mail::Box is (sort of) preferred.  Okay, create a
     # single message mbox by hand.
     &write_init_mbox();
}
$dest_folder = new Mail::Folder('mbox', $dest_mbox ) ||
     die "Error, $dest_mbox is NOT a mbox\n";

my $dmessages = 0;
my $smessages = 0;
my $amessages = 0;
@list = [];         # Empty list.

# All our messages in destination mbox, are tidied, and have
# Message-IDs.  Get the first message, then iterate on the
# folder until all messages are processed.

@list = sort { $a <=> $b } $dest_folder->message_list;

foreach (@list) {
     $email = $dest_folder->get_message( $_ );

     $dmessages++;
     ($ID, $size, $junk) = &get_id( $email );
     die "Bad destination folder:($ID,$size,$junk)\n" if( $junk );
     if( exists( $dest{$ID} ) ) {           # Message exists already
	if( $dest{$_}->{size} && ($dest{$_}->{size} >= $size) ) {
	    # Truncation is the most common problem, assume newer message
	    # (which is smaller or same size) can be ignored (with warning).
	    print STDERR "Repeat message ($ID), keeping earlier one (bigger)\n";
	    $dest_folder->delete_message( $_ );

	} else {
	    # Later message is bigger, keep it.
	    print STDERR "Repeat message ($ID), keeping later one (bigger)\n";
	    $dest_folder->delete_message( $dest{$ID}->{msg} );
	    $dest{$ID}->{msg} = $_;
	    $dest{$ID}->{size} = $size;
	}

     } else {
	my $hash      = {};
	$hash->{msg}  = $_;
#       $hash->{ID}   = $ID;
	$hash->{size} = $size;
         $dest{$ID}    = $hash;
     }
}


# Okay, we are initialized.  Start to read in source folders and
# process them.
while( $src_mbox = shift( @ARGV ) ) {
     my( @del_messages );
     if( -e $src_mbox ) {
	unless( $src_folder = new Mail::Folder('AUTODETECT', $src_mbox, ) ) {
	    print "$src_mbox is NOT an mbox or maildir\n";
	    next;
	}

     } else {
	print "$src_mbox doesn't exist\n";
	next;
     }

     eval {
	@list = sort { $a <=> $b } $src_folder->message_list;
     };

     foreach (@list) {
	$email = $src_folder->get_message( $_ );
	$hdr   = $email->head();
         if( $opt_d ) {
	    $date  = $hdr->get('Date');
	    if( $date_dm = &ParseDate($date) ) {
		$past = &Date_Cmp( $date_dm, $opt_d );
		if( $past < 0 ) {
		    push( @del_messages, $_ );
		}
	    }
	}

	$smessages++;
	($ID, $size, $junk) = &get_id( $email );
	if( $junk ) {      # No Message-ID, so MD5 calculated.  Make new email
	    $email->tidy_body();
	    my $body = $email->body();

	    $hdr->add('Message-ID', $ID);
	    $email = new Mail::Internet( Header => $hdr, Body => $body );
	}

	unless( exists( $dest{$ID} ) ) {
	    my $hash      = {};
	    $hash->{msg}  = -1;  # Don't know message number
	    $hash->{size} = $size;
	    $dest{$ID}    = $hash;
	    $dest_folder->append_message( $email );
	    $amessages++;

	} else {  # Message already exists
	    if( $size > $dest{$ID}->{size} ) {
		print "Newer duplicate Message-ID ($ID), but bigger.  Appending anyway\n";
		$dest_folder->append_message( $email );
		$amessages++;

	    } else {
		print "Message $ID already exists in dest, skipping\n";
	    }
	}
     }
     if( $opt_d && ($#del_messages > 0) ) {
	$src_folder->delete_message( @del_messages );
	$src_folder->sync;
     }
     $src_folder->close;
}
$dest_folder->sync;
$dest_folder->close;
#undef( $dest_folder );
print STDERR "$dmessages originally in $dest_mbox\n";
print STDERR "$smessages in source folders to process\n";
print STDERR "and $amessages of those were added to $dest_mbox\n";
exit( 0 );

sub get_id {
     my $email = shift;
     my $hdr   = $email->head();
     my @tags  = $hdr->tags();
     my @mids  = grep( /Message-ID/i,         @tags );
     @mids     = grep( !/Resent-Message-ID/i, @mids );  # Filter out Resent

     if( $#mids > -1 ) {  # We have a Message-ID, use it
	my $mid;
	if( $#mids == 0 ) {
	    $mid = $hdr->get( $mids[0] );
	} else {
	    print "Strange, more than 1 Message-ID here\n";
	    foreach (@mids) { print " $_\n"; }
	    $mid = $hdr->get( $mids[0] );
	}
	my $size  = length( $email->as_mbox_string() );
	return( $mid, $size, undef );

     } else {                             # Make one from MD5 hash
	$email->tidy_body();
	my $size  = length( $email->as_mbox_string() );
	my $md5 = md5_base64( $email->as_string() );
	return( $md5, $size, $md5 );
     }
}
sub write_init_mbox {
     my $hdr = new Mail::Header(MailFrom => "KEEP");
     my @hdr_array = [
		     'From nobody@nowhere.org',
		     'From: nobody@nowhere.org',
		     'To: nobody@nowhere.org',
                      'Date: Thur,  1 Jan 1970 00:00:01 -0700 (MST)',
		     'Subject: Dummy Message for Mbox',
		     ];
     my @bdy_array = [
		     "Don't delete this message, I need a stub message.\n",
		     ];
     $hdr->extract( @hdr_array );
     my $email = new Mail::Internet( Header => $hdr, Body => @bdy_array );
     my $email_as_string = $email->as_mbox_string;

     # Note, this is a constant.  We could save time and just calculate
     # it once and then store that value here.
     my $ID = md5_base64( $email_as_string );

     $hdr->add( 'Message-ID', $ID );
     $email = new Mail::Internet( Header => $hdr, Body => @bdy_array );
     $email_as_string = $email->as_mbox_string;

     open( MBOX, "> $dest_mbox" ) ||
         die "Can't open $dest_mbox to write initial message to\n";
     print MBOX $email_as_string;
     close( MBOX );
}
------------------------------------------------------------------------------

-- 
С уважением, Kolotov Alexandr aka mr. Эбола
              отвечать: akmypost@mail.ru
                   ICQ: 100349254

    ---------------------------------------
   |  Registered Linux user       # 236664 |
    ---------------------------------------


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Comm] Re: Mozilla Thunderbird
  2004-12-02 12:47   ` Сергей Шамрин
@ 2004-12-02 14:52     ` Vitaly Ostanin
  0 siblings, 0 replies; 6+ messages in thread
From: Vitaly Ostanin @ 2004-12-02 14:52 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 831 bytes --]

Сергей Шамрин пишет:

<skipped/>

>>- слить все папки в одну большую
>>- написать procmailrc, где указать правила автоматической фильтрации
>>- в начало правил вписать убиение дубликатов (рецепт не мой):
>>
>>:0 Whc: msgid.lock
>>| formail -D 8192 msgid.cache
>>
>>:0 a:
>>duplicates
>>
>>После чего натравить procmail на эту большую папку. В результате почта 
>>должна быть отсортирована по указанным папкам, а все дубликаты 
>>помещены в duplicates.
>>
>>man procmail
>>man formail
>>в основном, на тему примеров.
>>
>>Запарно, что и говорить :)
> 
> я так понимаю что это все под linux? а под виндой нет такой возможности?

Можно переехать обратно в бат, убить дубликаты, и переехать в TB :)

Под винду тоже можно завести unix-окружение, cygwin там...

<skipped/>

-- 
Regards, Vyt
mailto:  vyt@vzljot.ru
JID:     vyt@vzljot.ru

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2004-12-02 14:52 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-12-02 10:11 [Comm] Mozilla Thunderbird Сергей Шамрин
2004-12-02 10:16 ` evgen
2004-12-02 12:56   ` Kolotov Alexandr
2004-12-02 12:14 ` [Comm] " Vitaly Ostanin
2004-12-02 12:47   ` Сергей Шамрин
2004-12-02 14:52     ` Vitaly Ostanin

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git