#!/usr/bin/perl # # MDaemon msg to mailbox mail file converter # Usage: msg2mbox mail.msg # Suggested use: ls -c1 *.msg | awk '{system("msg2mbox "$1)}' >> mail.mbox # # msg2mbox utility by Artem Litvinovich use strict; die "Must specify msg file.\nUsage: msg2mbox file.msg > file.mbox\n" unless($ARGV[0]); open(MSG,"<$ARGV[0]") || die("Could not open"); my($adr,$dt) = (); while(my $line = ) { chomp($line); my($fld,$nfo) = split(':',$line,2); $adr = $nfo if($fld =~ /^Return-path/); $dt = $nfo if($fld =~ /^Date/); $adr = "__SKIP" if($line =~ /^Encrypted\s+By\s+MDaemon/); last if(($adr eq "__SKIP") or ($adr and $dt)); } #filter encrypted messages if($adr eq "__SKIP") { close(MSG); exit 1; } #filter out msft junk $adr = join ' ',split /\s/,$adr; $dt = join ' ',split /\s/,$dt; #kill spaces $adr =~ s/\s//; #kill surrounding brackets $adr =~ s/<(.+)>/$1/; #kill outside spaces $dt =~ s/^\s*//; #kill commas $dt =~ s/,//; #set dummy vals if info not found $adr = "unknown\@uknown.com" if(!$adr); $dt = "Mon, 1 Jan 2000 01:00:00" if(!$dt); #reformat date my($dw,$dat,$mo,$yr,$tm,$adj) = split(/\s/,$dt); $dt = "$dw $mo $dat $tm $yr"; print "From $adr $dt\n"; seek(MSG,0,0); while(my $line = ) { $line =~ s/\r//g; #kill ^M print $line; } close(MSG);