Does anyone know of a cheap (free?), easy, and effective way to handle duplicate messages in Outlook Express?

I’ve seen several commercial products that claim to do this, and I’ve tried several, but they have their limitations and drawbacks that make their price not worth it.

It doesn’t really matter if it is a plugin or a standalone app, as long as it provides sufficient control for detecting duplicates during scanning and handling them afterwards.

(If there is another method that can do this, I am open to that as well, as long as it has minimal impact; for example, I considered dumping all—yikes!—messages out to EML files, then running a standard duplicate-file-finder, then re-importing, but that would strip them of their flags, accounts, etc. The same goes for importing them into another email client and back.

As a last resort, I am even open to—as usual—just writing my own app, but would need a decent OE library and example program(s).)


I tried several (~eight); unfortunately most (all?) were commercial, pay-for apps.

Of the ones I tried, OE Duplicate Remover from AJ Systems was one of the best, as was MAPILab’s Remove Duplicates from Outlook Express. Again unfortunately, the trial versions are too limited to be of any real use if you have more than a couple of duplicates. Also, MAPILab’s was too limited in its “configurability” (yet even then, it was more configurable than most other apps).

If you have enough to justify paying for an app, I would recommend AJ System’s tool. It is a standalone tool (not a plugin) that can scan all of your messages and allow you to select what to remove.

In the end, I forwent apps for manual weeding. Yes, I had almost 10,000 duplicate messages (don’t ask) that needed to be confirmed as duplicates and weeded out from the other 24,000, and yes, not all of them were duplicates, thus making it even more important to have manual control. However, I found that the Find dialog turned out to be the most useful tool to get the job done.

Specifically, I opened the Find dialog and had it search for all messages by setting it to search for any messages after OE’s earliest possible date, Sep. 1753 (I found that searching for all files before a high date, say Dec. 9999, missed any messages that did not have a date). Then I sorted them by Send date (not Received date!), and went through them.

I found that it was easier because I had marked all of the likely-duplicate messages in the target folder as Ignored/Flagged, so they stood out better in the Find dialog.

It was surprisingly easy because duplicate messages have the same Subject and Send date as good messages, so I was able to easily see them (especially after adjusting the columns).

I then went through them and deleted them as I found them (I found that it was easier to do this if I made sure to exclude the Deleted Items folder from the search because then they would disappear from the Find dialog, thus reducing the clutter and making things easier).

Finally, I went through whatever was left and did a search to see if there existed any messages like those (I found several that did not, and moved them to the appropriate folders).

I’ll admit that doing this task manually was quite daunting; ~9,000 messages in a pile of ~30,000! but once I got a handle on what to do and got a rhythm going, I got through it all in about 4 hours (that’s including about an hour for dinner, breaks, and such). Plus, since I did it while watching television, the task felt even easier and went by even quicker.

NB: I should point out, that I made a back-up of my entire message store beforehand, just in case (in fact, I had to restore it numerous times while testing those apps and trying to find an effective manual method). Also, make sure to disable automatic checking (or even block OE from connecting to the Internet), otherwise you’ll lose any messages you download since the back-up was made.

  • Well this is awkward. I’m thinking of moving from OE to something else (Thunderbird?), so I wanted to export my OE message store, but first I need to clear out duplicate emails (apparently there are still a bunch of duplicates from the mid ’90s that I hadn’t noticed). I was going to ask/check here for a way to do it, but found this question and answer. Sadly it seems that I am still looking for a solution. ◔̯◔ – Synetech Aug 30 '13 at 15:50

I wrote an Autoit Script for this v3.3.8.1. And used it with MapiLab trial. VirtualBOX Windows XP SP3.

Because it will fetch only 5 duplicates per scan the script will gradually increase timeout before it cancels the scan to speed up the process.

  1. Drag script shortcut to start bar (you will need to press it often)
  2. Right click and Edit. Leave it open. You will need to edit that too
  3. Open rdoe.exe and select one folder
  4. Run the script. If it fails, note the timeout from message and type it in manually
  5. When you have an idea of number of duplicates, change $x to their number divided with 5

If you have more than 10000 messages in one folder, split it in smaller folders.

$timeout = 1
For $x = 1 to 50
Press("Remove Duplicates from Outlook Express", "", "Button5")
WinWaitActive("Removing duplicates - stage 1 of 3 : collecting messages")
If Not WinWaitNotActive("Removing duplicates - stage 1 of 3 : collecting messages", "", $timeout) Then
    Press("Removing duplicates - stage 1 of 3 : collecting messages", "", "Button1")
    Press("Remove Duplicates from Outlook Express", "", "Button1")
    WinWaitNotActive("Remove Duplicates from Outlook Express")
    WinWaitNotActive("Removing duplicates - stage 2 of 3 : analyzing messages")
    WinWaitNotActive("Removing duplicates - finish")
WinWaitNotActive("Removing duplicates - stage 2 of 3 : analyzing messages")
If WinActive("Remove Duplicates from Outlook Express",  "All done, selected folders processed.") <> 0 Then
    WinWaitActive("Removing duplicates - finish", "", 1)
    If WinActive("",  "0") <> 0 Then
        $timeout = $timeout + 1
    Press("Removing duplicates - finish", "", "Button1")
ElseIf WinActive("Trial Limitations") <> 0 Then
    Press("Trial Limitations", "", "Button2")
    Press("Remove Duplicates from Outlook Express", "", "Button1")
    Press("Removing duplicates - finish", "", "Button1")
    If WinActive("[ACTIVE]") = "Remove Duplicates from Outlook Express" Then
        Press("Remove Duplicates from Outlook Express", "", "Button1")
        Press("Removing duplicates - finish", "", "Button1")
    $x = 99999

Func Press($title,$text,$button)
    WinActivate($title, $text)

You can work with other programs in Host OS if your Windows is running as Virtual Machine. Inside the machine, change of focus will terminate the script with timeout message.

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.