Outlook 2010 より SQL へ直接 INSERT

Outlook 2010 から EXCELや、CSV への出力は、ファイルへのエクスポートで簡単にできるが、直接SQLに入れたい場合。

[Outlook のオプション]で、[開発]タブは規定値でオフになっているので、ここにチェックを入れる。

image

すると[開発]タブが表示される。

image

[マクロ]ボタンを押し、[マクロ]ダイアログより、たとえばOutlookToSqlマクロを作成する。

image

すると、Visual Basic のエディタが開く。[ツール]→[参照設定]を選択する。

image

[参照設定]より、”Microsoft ActiveX Data Objects 6.0 Library”を選択する。バージョンは環境によって異なるので最新のもので試してみればよいと思う。

image

SQL Server では、たとえばこんなテーブルを作っておく。

image

そして、次のマクロを実行する。

Sub OutlookToSql()
    Dim myOlapp As New Outlook.Application
   
    Dim myNameSpace As Outlook.NameSpace
    Dim myFolder As Outlook.Folder
   
    Dim 送信日時 As Date
    Dim 受信日時 As Date
    Dim 件名 As String
    Dim 内容 As String
   
    Set myNameSpace = myOlapp.GetNamespace(“MAPI”)
    Set myFolder = myNameSpace.Folders.Item(“Outlook”).Folders(“受信トレイ”)
   
    Dim adoCon As New ADODB.Connection
   
    adoCon.Open “Driver={SQL Server};” & _
      “server=192.168.11.9; database=test;Trusted_Connection=yes”
       
    Dim cmd As String
   
    With myFolder
        For i = 1 To .Items.Count
            件名 = .Items(i).Subject
            件名 = Replace(件名, “‘”, “””)
           
            送信日時 = .Items(i).SentOn
            受信日時 = .Items(i).ReceivedTime
            内容 = .Items(i).Body
            内容 = Replace(内容, “‘”, “””)
           
            cmd = “insert into Mail(Subject, SentOn, Received, Body) values (” & _
                “‘” & 件名 & “‘,” & _
                “‘” & 送信日時 & “‘,” & _
                “‘” & 受信日時 & “‘,” & _
                “‘” & 内容 & “‘” & _
                “)”
            adoCon.Execute cmd
        Next i
    End With
   
    adoCon.Close
   
    MsgBox “Done”
   
End Sub

結果はこんな感じ。

image

VBA でSQLのコマンドを文字列で生成しているので、SQL Injection 対策が必要なので注意。