# # Perl Mailsplit
APLawrence.com -  Resources for Unix and Linux Systems, Bloggers and the self-employed

Perl Mailsplit

I've removed advertising from most of this site and will eventually clean up the few pages where it remains.

While not terribly expensive to maintain, this does cost me something. If I don't get enough donations to cover that expense, I will be shutting the site down in early 2020.

If you found something useful today, please consider a small donation.



Some material is very old and may be incorrect today

© November 1998 Tony Lawrence

I read and post mail with Netscape, and divide mail up into different folders. That's easy to do for incoming mail; I just drag it where I want it when I'm done. It should be just as easy for outgoing, but I usually forget to open up "Sent" to drag stuff out, so I end up with thousands of messages in Sent.

I finally decided to do something about it, and this is the result.

Mailsplit.pl

Mail files begin with a line that says "From ". Everything after that belongs to that message until you find another "From ". This format is true for Netscape and many other mail handling programs.

Netscape also creates another relaed file to handle sorting and deleting, but it watches the date stamps and will recreate the other file if you mess with the original as we are doing here. After adding messages, the folder will appear with "???" until you click on it; Netscape recreates its summary file then (Note that you want Netscape mail CLOSED while doing the splitting).

#!/usr/bin/perl
open(INDEX,"index");
# "index" is a file that contains lines that look like this:
#       To: "[email protected]" <[email protected]>|Vermont
#       To: Raven <[email protected]>|Personal
#       To: Richard MacNevin <[email protected]>|Mac
#
# 
# It was produced by grepping "^To:" from the "Sent" file,
# discarding duplicates with "sort -u" and then adding 
# the "|File" to indicate where I ultimately want to file
# the messages.
# I did this only for the few dozen addresses I want and discarded
# the rest of them.
#
while (<INDEX>) {
        chomp;
        ($who,$file)=split /\|/;
        $who =~ s/To: .*<(.*)>/$1/;
        $who =~ s/To: (.*)/$1/;
        $who = lc($adds);
        # this all just gets the address down to a simple "[email protected]"
        if (! $file) {
                $file = "Misc" 
                };
        # I didn't bother with a lot of the addresses, so we need to
        # default them
        $myfiles{$who}=$file;
        #create the hash
}
chdir "/usr/tony/nsmail"
# obviously this varies
open(MAIL,"Sent");
$mesg="";
$inaddr=0;
while(<MAIL>) {
# this won't be true until we hit the second "From " that
# indicates the beginning of a message
        if (/^From / && $inaddr) {
        # when it is true (we have a new message)
        # print out the old and close the file
          print MYFILE "$mesg";
          close MYFILE;
          $mesg=$_;
          $inaddr=0;
          next;
        }

        $mesg .= $_;
        # accumulate lines
        # I've seen people read files like this in paragraph
        # mode, but that won't work for mail files because
        # the end of one message does not necessarily have a blank line
        
        next unless /^To: /m;
        # now we have the "To:" line.
        chomp;
        $adds=$_;
        $adds =~ s/To: .*<(.*)>/$1/;
        $adds =~ s/To: (.*)/$1/;
        $adds = lc($adds);
        # make it look like the index
        $inaddr=1;
        # set this so when we next reach "From: " we will write.
        $outfile=$myfiles{$adds};
        if (! $outfile) {
           # "index" doesn't contain all the addresses that might be in "Sent"
           $outfile="Misc";
           }
                open(MYFILE,">>$outfile");
                
}
# at the very end there is left over stuff to write
print MYFILE "$mesg";
close MYFILE;
 

© November 1998 Anthony Lawrence


If you found something useful today, please consider a small donation.



Got something to add? Send me email.





(OLDER)    <- More Stuff -> (NEWER)    (NEWEST)   

Printer Friendly Version

->
-> Perl Mailsplit


Inexpensive and informative Apple related e-books:

Take Control of IOS 11

Take Control of High Sierra

Photos: A Take Control Crash Course

Take Control of Automating Your Mac

El Capitan: A Take Control Crash Course





More Articles by © Tony Lawrence





Printer Friendly Version

Have you tried Searching this site?

This is a Unix/Linux resource website. It contains technical articles about Unix, Linux and general computing related subjects, opinion, news, help files, how-to's, tutorials and more.

Contact us


Printer Friendly Version





er.




Linux posts

Troubleshooting posts


This post tagged:

Code

Mail

Perl

Programming



Unix/Linux Consultants

Skills Tests

Unix/Linux Book Reviews

My Unix/Linux Troubleshooting Book

This site runs on Linode