Ibland är oturen framme och kvar sitter man med en .ost fil från outlook och en tom inkorg på hotmail. Detta hände min sambo för ett tag sedan och jag tog på mig att försöka lösa problemet på ett bra sätt. Ett problem som i sin tur kan upplevas enkelt men som i praktiken blir allt annat än enkelt.

Efter en hel del sökande och letande upptäckte jag att man förutom att köpa massa dyra mjukvaror för 50$ eller så kan använda libpst för att läsa innehållet i en ost fil. Hela lösningen gjordes på min Mac för att sedan flyttas över till hennes Windows laptop. Därav en salig blandning av verktyg på olika plattformar.

Lösningen landade på en hybridlösning av den ovanligare sorten. Det första som skedde i valet av libpst var att det självklart inte gick att kompilera som det skulle i OS X 10.8 och någon färdig binär fanns inte på libpsts webb. Istället laddade jag ned applikationen Xena som innehåller de binärer jag var ute efter. Att det blev just den applikationen var för att en sökning gav träff på programmet och det visade sig att det innehöll en fungerande version av readpst som jag var ute efter. Efter att ha laddat ner Xena valde jag att inte installera det utan bara ha diskbilden öppen och därefter använda mig av readpst för att exportera ut eposten. Körschemat för att uppnå detta är beskrivet nedan:

cd ~/Public/mail
cp /Volumes/NO\ NAME/hotmail.ost hotmail.pst
mkdir output
cd output
/Volumes/Xena\ 6.0.1/Xena/macx86/readpst -M ../hotmail.pst

Nu hade jag en bunt filer med enbart en siffra i som filnamn inget mer. Utan större eftertanke inser jag för att få windows att kunna göra något med dessa filer behövde dom en filändelse. Hur ska man lägga på samma filändelse på mer än 2000 filer? Python, ett litet skript med python för att lägga på eml filändelsen på alla filerna. Skriptet går igenom alla filer i en mapp och lägger på eml filändelsen på dom. Skriptet förutsätter att filen som ska få namnbyte ligger i samma mapp som man det körs i. Inget avancerat säkert kan en bra python utvecklare skriva något bättre men för detta behov räcker koden mer än väl. Användningen av skriptet blev som detta:

cd ~/Public/mail/output/hotmail.pst/Inkorgen
python ../renamer.py .

Nästa steg blev att lyckas importera alla EML filerna tillbaka in i Outlook. Ett standard format som detta borde ju fungera utan problem kan man tycka men icke. Outlook kan öppan ett EML brev i taget men har ingen inbyggd funktion för att importera alla i ett svep. Lösningen som presenterade sig efter ett par minuter på google var Outlook Message Import ett gratis plugin för Outlook som kunde ta alla EML filerna i en mapp och placera dom i en vald mottagarmapp i Outlooks datafil. Det lite omständiga med detta plugin var att man måste registera sig på deras site och även ladda ner en runtime för att kunna köra de olika plugin som fanns upplagda där. En kort registrering och lite nedladdning senare kunde importen påbörjas. Några mintuer senare har outlook läst in alla EML filerna och inne i gränssnittet hade vi åter igen all epost snyggt och fint på rätta ställena i den lokala datafilen i Outlook.

Som kuriosa kan det tilläggas att vi att via Outlook kopiera upp filerna till hotmail igen genom att markera alla filer i en av mapparna och välja att kopiera dom till hotmail kontot.

Lathunden i komprimerat format.

  1. Kopiera ut ost filen till en tom mapp, ex. ‘c:\temp\ostrecovery\hotmail.pst’
  2. Ladda ner Xena från deras webb.
  3. Kör readpst kommandot ‘readpst -M ../hotmail.pst’
  4. Kopiera python skriptet till ‘c:\temp\ostrecovery’
  5. ställ dig i ‘c:\temp\ostrecovery\inkorgen’ och kör ‘python ../renamer.py .’
  6. Installera EML Importen från outlookfreeware med tillhörande runtime.
  7. Kör import verktygen och importen inkorgen till inkorgen i din lokala pst fil.
  8. Repitera steg 5-7 för skickat eller andra mappar som ska hanteras.
  9. Klart, se glad ut och se att all mail är hatnerad igen.

Python skript

import os
import sys

for current,folders,files in os.walk(sys.argv[1]):
    for fileName in files:
        print 'Renaming ',fileName
        os.rename(fileName,fileName+'.eml')