Outlookにemlファイルを一括登録する方法

はじめに

私は基本的にBeckyを使っていますが、O365を使うようになり、今までのデータをOutlookに移す必要が出てきました。調べてみると、結構大変なんですよね。
EMLファイルは直接Outlookに登録できないですし。(正確には登録できるけど、プレビューできない。)

それを有償で変換するソフトも沢山出ているのですが、疑い深い私はそれを使うのもって感じだったので、自分で作れないか調べてみました。
Google先生で調べてみると、VBSで作っているものが出てきます。
けどこの方法は、1件ずつ開いてインポートするので、かなり遅い・・・・。
海外まで検索すると、もうちょっと高速で動く方法が載っていたので、それを改造してみたので、今回皆さんに公開したいと思います。

前準備

「Outlook Redemption」のDeveloper versionをダウンロード

ダウンロードしたファイルを実行して、インストールします。

BeckyからのEMLへの一括変換は、「CircleBecky」のプラグインが便利です。

プログラム

下記のプログラムをコピペして、適当な名前(例:imporrt-eml.vbs)にして保存します。

Dim objShell : Set objShell = CreateObject("Shell.Application")
Dim FSO : Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Dim objFolder : Set objFolder = objShell.BrowseForFolder(0, "Select the folder", 0)
Dim oLog, fn

Set wFolder = FSO.GetFolder(objFolder.Items.Item.Path)
Set oOutlook = CreateObject("Outlook.Application")

' Log Setting
fn = FSO.getParentFolderName(WScript.ScriptFullName) & "\" & _
    FSO.GetBaseName(WScript.ScriptFullName) & "_" & _
    Year(Now()) & Right("0" & Month(Now()), 2) & Right("0" & Day(Now()), 2) & ".log"
If FSO.FileExists(fn) = False then
    Set oLog = FSO.CreateTextFile(fn)
Else
    Set oLog = FSO.OpenTextFile(fn, 8, True)
End If


If (NOT objFolder is nothing) Then

    Dim oBaseFolder : Set oBaseFolder = oOutlook.Session.PickFolder

    If NOT oBaseFolder Is Nothing Then

        oLog.WriteLine(Now() & " Start...")
        LoopFolder wFolder, oBaseFolder
        oLog.WriteLine(Now() & " Finish...")
        MsgBox "Import completed.", 64, "Import EML"

    Else
        MsgBox "Import canceled.", 64, "Import EML"
    End If

    Set Folder = Nothing
Else
  MsgBox "Import canceled.", 64, "Import EML"
End If

oLog.Close
Set oLog = Nothing
Set objFolder = Nothing
Set objShell = Nothing


Sub LoopFolder(in_wFolder, in_oFolder)

    Dim wSubFolder
    Dim i : i = 0
    Dim oFolder : Set oFolder = in_oFolder.Folders.Add(in_wFolder.Name) 

    For Each file In in_wFolder.files
        If LCase(Right(file.Name,4)) = ".eml" Then
            OpenEml oFolder,file 
            i = i + 1
        End If 
    Next

    For Each wSubFolder In in_wFolder.SubFolders
        LoopFolder wSubFolder, oFolder
    Next

    oLog.WriteLine(Now() & " " & in_wFolder.Name & ":" & i)

End Sub

Sub OpenEml( Folder, file ) 
    Set objPost = Folder.Items.Add(6)
    Set objSafePost = CreateObject("Redemption.SafePostItem")
    objSafePost.Item = objPost
    objSafePost.Import file, 1024
    objSafePost.MessageClass = "IPM.Note"
    Set utils = CreateObject("Redemption.MAPIUtils")
    PrIconIndex = &H10800003
        utils.HrSetOneProp objSafePost, PrIconIndex, 256, true 'Also saves the message
    i = i + 1
End Sub 

使い方

1.まずインポート元のEMLファイルが格納されているフォルダを指定します。
2.Outlook側でどのフォルダにインポートするかを指定します。
3.「Outlook Redemption」のライセンスの同意画面が出るので、「I Agree」を選択します。

あとは、全階層を見て自動的にインポートされますので、ゆっくり待ちましょう。
VBSと同じ階層に、簡単なログファイルが吐き出されますので、件数など見て、正常にインポートされているか確認してみてください。

 まとめ

いかがだったでしょうか?これで少しは移行も簡単になったとは思います。
あまり需要の無い情報かもしれませんが、良かったら使ってみてください。

IT,技術ネタ

Posted by スングル