Category: | E-Mail Programs |
Author/Contact Info | /msg davis |
Description: | This script works on Mozilla Thunderbird email stores, and attempts to upload the emails to an IMAP server. Right now, it's not finished, in that it doesn't upload the top-level emails (ie mails from Inbox, Sent etc). It handles subfolders of those just fine. There's slso some dirty hackery to munge folder paths for dovecot. YMMV Update: Fixed now, ie it correctly parses email in top-level folders. I'd still call it a quick-and-dirty script though. |
use warnings; use strict; use Data::Dumper; use Mail::MboxParser; use Mail::IMAPClient; my $base_dir = ".thunderbird/profile_path/Mail/Local Folders/"; my $imap_server = "localhost"; my $imap_user = "username"; my $imap_pass = "password"; my $parseropts = { enable_cache => 0, enable_grep => 0, cache_file_name => 'cache-file', }; my $skip_deleted = 1; my $imap = Mail::IMAPClient->new( Server => $imap_server, User => $imap_user, Password => $imap_pass, ) or die "Cannot connect to $imap_server as $imap_user: $@"; parse_dir($base_dir); sub parse_dir { my $dir = shift; opendir my $dir_h, $dir or die "Unable to opendir $dir: $!\n"; print "Reading directory $dir\n"; ##Dirty, probably IMAP-server dependent stuff. #This stuff is for dovecot. my $temp_dir = $dir; $temp_dir =~ s!\.sbd!!g; $temp_dir =~ s!^$base_dir!!; $temp_dir =~ s!^/!!; $temp_dir =~ s!/!.!g; print "Making dir $temp_dir\n"; $imap->create($temp_dir); foreach my $directory (grep /\.sbd$/, readdir $dir_h) { parse_dir($dir."/".$directory); } seekdir($dir_h, 0); foreach my $mail_file (grep !/^\./, grep !/(\.html|\.sbd|\.msf +|\.dat)$/, readdir $dir_h) { my $mf = $dir."/".$mail_file; $mf =~ s!//+!/!g; print "Going to parse $mf\n"; my $mb = Mail::MboxParser->new($mf, decode => 'ALL', parseropts => $parsero +pts); for my $msg ($mb->get_messages) { #Skip deleted messages... my $folder_name = $temp_dir.".".$mail_file; $folder_name =~ s!//+!/!g; unless($skip_deleted and (hex($msg->header->{" +x-mozilla-status"}) & 0x0008)) { print "Appending msg " . $msg->header- +>{subject} . " to $folder_name\n"; $folder_name =~ s/^\.//; $imap->create($folder_name) or warn "unable to create $fol +der_name: $@\n"; unless($imap->append_string($folder_na +me, $msg)) { warn "Couldn't append " . $msg +->header->{subject} . " to $folder_name: $@\n"; warn "Skipping\n"; next; } } else { warn "Skipping " . $msg->header->{subj +ect} . " - deleted message\n"; } } } closedir($dir_h); } |
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Mirror/Copy Mozilla thunderbird emails to IMAP server
by davidrw (Prior) on Mar 08, 2006 at 16:08 UTC | |
Mark messages as read
by nagelp (Initiate) on May 23, 2008 at 06:19 UTC | |
by davis (Vicar) on Jun 11, 2008 at 09:40 UTC | |
by Anonymous Monk on Mar 25, 2014 at 14:25 UTC | |
by AceT (Initiate) on Mar 26, 2014 at 15:38 UTC | |
Thanks for this timesaver!
by nagelp (Initiate) on May 22, 2008 at 17:03 UTC |