Before I left on my trip through South America, I decided to clean up all my mailboxes (I never delete a mail) and organize all mails in different PSTs, one for every year. So, I decided to use the import and archiving function of Outlook.
Step 1 : import all mails from a PST to a bulk PST
Step 2 : archive all mails older than a certain date (eg 2005) to a dedicated PST
Step 3 : goto step 1
After an hour or so, I had 10 PST files, each containing all mails sent and received that year. I thought. Outlook had messed up bigtime, it worked for most, but there were still mails from 1999 in the PST of 2004 and vice versa. NOT GOOD. Because I was leaving on my trip, I forget about it, until today and needed a mail I sent in September 2006 and did not find it, because it was in a wrong PST file. Crap. Crap. Triple crap. So, I surfed the web a bit, found myself a program called MessageSave, which made it possible to copy the Outlook folder structure to a filesystem and then you can sort them out quite fast (find will do the job perfectly) and then recreate the PST files. Too bad, the program was expensive.
So, I decided to write it myself. After surfing some VBS sites for half an hour (I hate VB, but hey it was fast, included in Windows and up to the task, but I hadn't used it for 10 years) and writing code for another half hour, the program was finished and worked splendid. Now, it is dumping all PSTs to the filesystem, reoganize them and recreate PST files.
If you would ever need the code, here it is :
' ******************************************************
' Sync_outlook_filesystem.vbs
' Rez Kiyn
' ******************************************************
On Error Resume Next
Dim myNameSpace
Dim ofChosenFolder
Dim myOlApp
Dim myItem
Dim objItem
Dim myFolder
Dim strSubject
Dim strName
Dim strFile
Dim strReceived
Dim strSavePath
Dim strSubFolder
Dim objFileSystem
Dim objOutputFile
Dim strOutputFile
strOutputFile = "./" & Split(WScript.ScriptName, ".")(0) & ".log"
'********************************************************************************************************************
' Initialisation
'********************************************************************************************************************
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set objOutputFile = objFileSystem.CreateTextFile(strOutputFile, TRUE)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set myOlApp = CreateObject("Outlook.Application")
Set myNameSpace = myOlApp.GetNamespace("MAPI")
WriteLog("Initialising synchronisation")
'********************************************************************************************************************
' Runtime parameters
'********************************************************************************************************************
WriteLog("Querying for runtime parameters")
Set ofChosenFolder = myNameSpace.PickFolder
strSavePath = InputBox("Please enter the path to save to", "Save Emails To:", "d:\Data\")
If not right(strSavePath,1) = "\" then
strSavePath = strSavePath & "\"
wscript.echo "You forgot a backslash at the end of your path." & vbcrlf & "But don't worry, I added one for you."
End If
strSaveFolder = Left(strSavePath, Len(strSavePath)-1)
WriteLog("Fetch mails from " & ofChosenFolder )
WriteLog("Saving mails to " & strSavePath )
'********************************************************************************************************************
' Start synchronisation
'********************************************************************************************************************
WriteLog("Starting synchronisation")
syncFolder strSavePath & StripIllegalChar(ofChosenFolder.Name), ofChosenFolder
'********************************************************************************************************************
' End synchronisation
'********************************************************************************************************************
MsgBox "Finished syncing", VBYesNo
WriteLog("Finished Syncing")
objOutputFile.Close
Set objFileSystem = Nothing
'********************************************************************************************************************
' Function to write log line to logfile
'********************************************************************************************************************
Function WriteLog(logLine)
objOutputFile.WriteLine(Date() & " " & Time() & " " & logLine)
End Function
'********************************************************************************************************************
' Function to sync a folder in outlook with the folder on the file system
'********************************************************************************************************************
Function syncFolder(strFSPath, myFolder)
Writelog("Syncing folder '" & myFolder & "' to path '" & strFSPath & "'")
If not right(strFSPath,1) = "\" then
strFSPath = strFSPath & "\"
End if
CreateDirectory strFSPath
Syncitems strFSPath , myFolder
j = 1
For each Folder in myFolder.Folders
set mySubFolder = myFolder.Folders(j)
SyncFolder strFSPath & StripIllegalChar(mySubFolder.Name), mySubFolder
j = j + 1
next
' syncItems strFSPath, myFolder
End Function
'********************************************************************************************************************
' Function to sync a directory contents in outlook with the contents on the file system
'********************************************************************************************************************
Function syncItems(strFSPath, myFolder)
i = 1
For each Item in myFolder.Items
Set myItem = myFolder.Items(i)
WriteLog("Found item '" & myItem & "' in folder '" & myFolder & "'")
strReceived = ArrangedDate(myitem.ReceivedTime)
strSender = StripIllegalChar(myItem.SenderName)
strSubject = myItem.Subject
strName = StripIllegalChar(strSubject)
strFile = strFSPath & strReceived & "_" & strSender & "_" & strName & ".msg"
If Not Len(strfile) > 256 then
myItem.SaveAs strfile, 3
WriteLog("Saving item : " & myItem & " " & " in folder " & myFolder & " to " & strFile)
Else
WriteLog("Path and filename too long for " & strFile)
End If
i = i + 1
next
End Function
'********************************************************************************************************************
' Function to create a directory
'********************************************************************************************************************
Function CreateDirectory(strDirectory)
On Error Resume Next
If Not objFSO.FolderExists(strDirectory) then
objFSO.CreateFolder(strDirectory)
If Err Then
WriteLog("Error in CreateDirectory(" & strDirectory & ")")
End if
WriteLog("Creating directory : " & strDirectory)
Else
WriteLog("Not creating directory : " & strDirectory)
End if
End Function
'********************************************************************************************************************
'Simple function that removes illegal file system characters.
'********************************************************************************************************************
Function StripIllegalChar(strInput)
Set RegX = New RegExp
RegX.pattern = "[\" & chr(34) & "\!\@\#\$\%\^\&\*\(\)\=\+\|\[\]\{\}\`\'\;\:\<\>\?\/\,]"
RegX.IgnoreCase = True
RegX.Global = True
StripIllegalChar = RegX.Replace(strInput, "")
Set RegX = nothing
End Function
'********************************************************************************************************************
'This function re-arranges the date data in order for it to display in chronilogical order in a
'sorted list in the file system. It also removes illegal file system characters and replaces them with dashes.
'Example:
'Input: 2/26/2004 7:07:33 AM
'Output: 2004-02-26_AM-07-07-33
'********************************************************************************************************************
Function ArrangedDate(strDateInput)
Dim strDateTime
Dim RegX
Dim sDate
sDate = CDate(strDateInput)
strDateTime = Year(sDate) & "-" & Month(sDate) & "-" & Day(sDate) & "_" & Hour(sDate) & "-" & Minute(sDate) & "-" & Second(sDate)
Set RegX = New RegExp
RegX.pattern = "[\:\/\ ]"
RegX.IgnoreCase = True
RegX.Global = True
ArrangedDate = RegX.Replace(strDateTime, "-")
Set RegX = nothing
End Function
Ik stond gisteren ook in die file, gelukkig niet op de eerste rij. Ik had vrij snel door dat het om een dodelijk ongeval ging want er dook plots een zwarte monovolume met blauwe zwaailichten op, gevolgd door een anonieme wagen, vermoedelijk de mensen van het Parket.Wat bezielt inderdaad iemand om op de A12 en dan nog zeker op dat gevaarlijk punt met de fiets te gaan rijden? Zo zie je maar dat er maar een fractie van een seconde nodig is…Grtz,Cyber
Stukje uit Het Laatste Nieuws van 1 februari : ,,De fietser die afgelopen maandag om het leven kwam bij een verkeersongeval op de A12 was ere-gemeenteraadslid [naam verwijderd door webmaster] (55) uit Londerzeel. [naam verwijderd door webmaster] wilde met zijn fiets aan de doorsteek bij de firma Saerens de autoweg oversteken, maar op het tweede rijvak werd hij gegrepen door een auto. Het medische urgentieteam van het AZ-VUB probeerde hem nog tevergeefs te reanimeren. [naam verwijderd door webmaster] werd geboren in Willebroek en werkte bij de Controle der Belastingen in Grimbergen. In 1977 stapte hij de gemeenteraad binnen en maakte drie legislaturen vol bij de fractie MENS. In december 1994 verdween hij van het politieke voorplan. [naam verwijderd door webmaster] laat een vrouw en een zoon na. Hij wordt verast op maandag 5 februari om 10 uur in het crematorium van Vilvoorde. Om 14 uur wordt de urne bijgezet op het kerkhof van Londerzeel. (DBS)'’
Ik ken hem, vriend van mijn pa. Ik zag hem vroeger altijd bij de bloedgevers, met zijn zoon. Was altijd wel lachen. Vaders gaven bloed en wij (mijn broer en ik en nog kinderen) staken ondertussen kattekwaad uit.Hij ree altijd zo naar huis van zijn werk. Ik weet wel dat hij niet vies was van een pintje (meer of minder) maar dat hij echt zo roekeloos overstak?! Hij nam speciaal die weg omdat die "veiliger" was dan oversteken aan de lichten, waar je niet in het midden van de baan kan stoppen..Ik weet niet hoe of wat, heb het gelukkig niet gezien. Kvind het wel erg voor zijn vrouw en zoon. En voor die vrouw, ik zou het niet willen meemaken
@ frank..ten eerste: die man, is mijn nonkel!!!ten tweede: hij was bloednuchter, kwam rechtstreeks van zijn werk!! politie-onderzoek heeft dit uitgewezen!!! (dmv bloedonderzoek, controle tikkaart, enz…)ten derde: hij reed met een mannenfiets!!! ten vierde; een rugzak, nee nee dat was het niet..het was een aktentas!!ik ben zelf niet helemaal zeker..dat jij het wel hebt gezien…en niet gehoord via via..want van je verhaaltje klopt niveel…alleen het feit dat mijn nonkel dood is en een vrouw en een zoon achterlaat!!!
@ wendje:
1) Eerst en vooral innige deelneming.
2) Ik heb niet geschreven dat hij gedronken had. Ik heb hoogstens een vermoeden in die zin geuit. En dat is iets heel anders. Leg mij maar eens uit hoe iemand het verzint om zomaar zonder omkijken de A12 over te fietsen in volle avondspits!? Ik zocht gewoon een verklaring, en niet meer dan dat. Bovendien heb ik deze getuigenis de dag na het fatale ongeluk neergepend.
3) Ik blijf erbij: het was een vrouwenfiets.
4) Ik blijft erbij (bis): er lag een rugzak op de weg, die even daarvoor wel degelijk op zijn rug hing.
Ik heb getwijfeld of ik hier wel op zou reageren, omdat het een gevoelig onderwerp betreft. Maar je insinuaties als zou ik hier wat verzinnen of de sensatiejournalist uithangen die toevallig wat heeft opgevangen, laten mij geen andere keus.
Beste FrankIk denk dat het best is dat jij je vermoedens voor jezelf houdt. Feit is inderdaad dat er die avond een heel spijtig ongeluk gebeurd is maar dat is nog altijd iets heel anders dan dronkenschap laat staan zelfmoord suggereren. Hou je aan de feiten man! En dan nog je niets aan de verbeelding overlatende taalkeuze. Heb jij er ooit bij stilgestaan hoe deze heer zijn echtgenote en zoon zich moeten voelen als ze dit lezen. Enige discretie is hier toch wel gepast. Ik ben zelf ook getuige geweest van een dodelijk ongeval en het is mij nooit ter gedachte gekomen dit op zo een degoutante - gewilde woordspeling - wijze openbaar te maken. Wel heb ik contact gehad met het slachtoffer zijn vrouw en getracht haar te steunen voor zover dit mogelijk was ook heb ik mijn volledige medewerking aan het onderzoek gegeven. Maar dit, sorry gewoon laag! Mensen met enige vorm van respect trachten elkaar te steunen en dit geldt voor alle slachtoffers, ook de vrouw die hem aangereden heeft want zoiets doe je niet opzettelijk. Het moet voor haar ook niet makkelijk zijn want een mensenleven stelt wel heel veel voor! Ik hoop ten zeerste dat jij nooit nog getuige mag zijn van een ongeluk het zal veel mensen uw sarcastisch leed besparen.
Ik geef toe dat ik het nu anders zou formuleren, maar het was hoegenaamd niet sarcastisch bedoeld. Ik was hier niet goed van, en wellicht heeft dat er wat mee te maken. Onbewust afstand houden misschien. Ik zocht naar een manier om uitdrukking geven aan iets wat ik niet begreep, en nog steeds niet begrijp.
En ja, ik was verbijsterd en ook een beetje kwaad omwille van de man zijn roekeloze actie. Hoe raar het ook mag klinken. Ik ben ook getuige geweest van het leed van de vrouw die het slachtoffer had aangereden.
Ik wil er tenslotte ook nog even op wijzen dat dit een persoonlijk weblog is, en geen gazet. Ik hoef me dus niet noodzakelijk bij de feiten te houden. Bovendien heb ik nergens namen genoemd. Dat dit uiteindelijk onder ogen is gekomen van nabestaanden, is iets waar ik dan ook nooit rekening mee heb gehouden. Fout dus… Het is nooit mijn bedoeling geweest om iemand te kwetsen. Bij deze mijn excuses. Maar oordeel asjeblieft niet te vlug, want daar schiet niemand wat mee op. Er is daar iets vreselijks gebeurd voor mijn ogen, en dat moest ik op een of andere manier kwijt.