Fortunately I know Perl, and wrote a script to restore the mail from my local Thunderbird file back to Yahoo! Inbox.
You will need to stop Thunderbird deleting mail from the server. This is under
Account Settings... > Server Settings > Leave messages on server . Make sure this is ticked as well as Until I delete themNow you will want to Exit Thunderbird to stop the application downloading more email while you restore the mail.
Find your Thunderbird mail location :: something of the sort
Users/YOUR_USER_NAME/AppData/Roaming/Thunderbird/Profiles/THE_PROFILE_DIRECTORY/Mail . Make a directory tmp under that directory.Save the script below as
RestorePOP3.pl to the new tmp directory. Now you will need to edit the file to place in your details. You will need to put in your email address in the my $emailAddress = "username@yahoo.co.uk"; variable on line ~35. You will also need to change $smtp->auth('LOGIN','myUserNameWithoutAtSymbol','YourNormalPassword'); touse your username and password respectively.Use the
cpan command to ensure you have the requirementsinstall Mail::MboxParserinstall Net::SMTP_auth. These have requirements of their own, so I suggest installing them too.
Now you should be ready to
cd Users/YOUR_USER_NAME/AppData/Roaming/Thunderbird/Profiles/THE_PROFILE_DIRECTORY/Mail/tmp and execute perl RestorePOP3.plSee the Caveats below.
Caveats:
- You should know Perl reasonably well
- The server you are trying to restore to may have a daily limit. Yahoo! Mail had a limit of 300 messages per day. So if you have slurped 3000 messages off the server, it will take you 10 days to restore it.
- Do not keep running the script again and again, you will simply get the same 300 top messages resent. Alter line 12:
my $startIndex=$numMessages-1;To use the index that was printed out once the mail server overflowed - If you have touble, try changing line 28 to enable debugging of the SMTP server response
- You may need the Yahoo! Plus paid-for-account to be able to use the SMTP
use Mail::MboxParser; use NetSMTP_auth;my $mb = MailMboxParser->new('../Local Folders/Inbox', decode => 'NEVER', #Yahoo! client should do the escaping parseropts => $parseropts);my $numMessages = $mb->nmsgs; my $endIndex = 0; my $startIndex=$numMessages-1; my $sleepInterval=5; print "# Working from ".($startIndex+1)." to $endIndex of $numMessages messages\n"; #for my $idx ($startIndex .. $endIndex-1) { for (my $idx=$startIndex; $idx >=$endIndex; $idx--){ my $msg = $mb->get_message($idx); print "Working on $idx::->'".$msg->header->{subject}, "'<- [".$msg->header->{"Date"}."]\n"; # Constructors $smtp = Net::SMTP_auth->new('smtp.mail.yahoo.co.uk', Hello => 'terry.internal', Timeout => 30, # Debug => 1, ); #print "SMTP server supports: '".$smtp->auth_types()."'\n"; $smtp->auth('LOGIN','myUserNameWithoutAtSymbol','YourNormalPassword'); my $emailAddress = "username@yahoo.co.uk"; $smtp->mail($emailAddress); #don't worry, the message will write in the correct sender $smtp->to($emailAddress); my $success = $smtp->data(); if(! $success) { die "Server error at index $idx. Restart later"; } my $payload = $msg->as_string; # print "Sending: \n".$payload."\n#---\n"; $smtp->datasend($payload); # $smtp->dataend(); $smtp->quit(); print "Done $idx.\n"; sleep($sleepInterval); print "Slept $sleepInterval s.\n"; } print ("-* ENDE *-");

