適材適所

システム屋のくらげが気ままに書いているブログです。PowerShellやVBAなどプログラミング系の話をメインに書いています。

MENU

VBAでNotesメールを取得する簡単なサンプル

VBAでNotesメールを取得する

仕事の中には「毎日、毎週、この作業やるの面倒だなぁ・・・。」というシーンが多々あります。そんな場面で役に立つのがVBAを使った自動化です。

VBAは敷居が低い分、ネット上には色々な情報があふれています。

しかし他のアプリケーションとの連携という視点だと、情報が少ないのが現状です。

ここでは自動化をメインとして語る(ことが多い)ブログなので、そのようなアプリケーション間の連携に纏わる情報をお伝えしたいと思います。

今回はVBAを使ってNotesメールを取得する方法です。

Notesは、グループウェアの先駆け的存在として、その根強い人気から(?)今でも使っている組織もあるのではないでしょうか?

チャットがこれだけ浸透したこの時代でも、まだまだメールを使う場面も少なくありません。

メールの件名をリスト化したいであるとか、メールの内容によってさらに別の業務に繋げるなど、

メールは普段のデスクワークに欠かせませんよね。

というわけで、この記事ではVBAとNotesの連携を行う上で、

土台となる簡単なサンプルとしてNoteメールの方法を取得する例を紹介したいと思います。

VBAでNotesメールを取得する簡単なサンプル

VBAを使ってNotesメールを取得する簡単なコードです。

このコードの実行の前には、事前に「Lotus Dimino Objects」の参照設定チェックが必要になります。

また、ご利用の環境に合わせて定数の設定を行ってください。

詳しい手順は↓の記事をご参考にしていただければ幸いです。

www.tekizai.net

コードを実行すると、イミディエイトウィンドウに下記の情報が出力されます。

  • 送信者
  • 受信者
  • CC
  • BCC
  • タイトル
  • 内容(メール本文)
 
Sub printNotesMailList()
    Const PASSWORD As String = "(環境に合わせて設定)"
    Const SERVER As String = "(環境に合わせて設定)"
    Const NOTES_FILE As String = "(環境に合わせて設定).nsf"
    'セッションを確立
    Dim notesSession As notesSession: Set notesSession = New notesSession
    notesSession.Initialize PASSWORD
    'Notesのデータベースを取得
    Dim notesDB As NotesDatabase: Set notesDB = notesSession.GetDatabase(SERVER, NOTES_FILE)
    'Notesデータベースから全ての文書を取得する
    Dim notesDocs As NotesDocumentCollection: Set notesDocs = notesDB.AllDocuments
    '最初の文書を取得
    Dim notesDoc As NotesDocument: Set notesDoc = notesDocs.GetFirstDocument
    
    '全ての文書にアクセスする
    Do Until (notesDoc Is Nothing)
        Dim subject As String: subject = notesDoc.GetItemValue("Subject")(0)
        Dim body As String: body = notesDoc.GetItemValue("Body")(0)
        Dim from As String: from = notesDoc.GetItemValue("From")(0)
        Dim cc As String: cc = notesDoc.GetItemValue("CopyTo")(0)
        Dim bcc As String: bcc = notesDoc.GetItemValue("BlindCopyTo")(0)
        Dim sendTo As String: sendTo = notesDoc.GetItemValue("SendTo")(0)
        
        Debug.Print "送信者:" & from
        Debug.Print "受信者:" & sendTo
        Debug.Print "CC:" & cc
        Debug.Print "BCC:" & bcc
        Debug.Print "タイトル:" & subject
        Debug.Print "内容:" & body
        Debug.Print "---------------------------------"
        '次の文書を取得する
        Set notesDoc = notesDocs.GetNextDocument(notesDoc)
    Loop
    
End Sub

応用のヒント

VBAを使ってNotesメールを取得することができれば、プチRPAができます。

例えば、定期的にNotesメールを取得して、特定の新しいメールが届いていたら自動で返信メールを送信したり、

受信メールの一覧を作成して、やりとりの証跡として保存したり、

Notesの標準機能ではできないような検索条件でメールを検索したり・・・。

なんでNotesをVBAから扱えるの?

NotesはCOMインターフェースを備えてくれているからです。

COMとは、Component Object Modelの略で、平たく言えば外部から操作できるようなAPIです。

COMを使っているので、VBA以外のプログラミング言語からもNotesを扱うことができます。

www.tekizai.net

終わりに

今回は、VBAを使ってNotesメールを取得するサンプルの紹介でしたが、COMインターフェースのおかげで、VBAを使った様々なNotesの操作が実現できます。

Notesメールを取得する以外にもNotesカレンダーを取得したり、Notesメールを送信したり・・・Notesで日々行っているルーチンワークを軽減できるヒントがたくさんあります。

VBAでNotesメールを作成・送信する_最も簡単なサンプル - 適材適所

VBAでNotesの特定のフォルダのメールを参照する - 適材適所

VBAでNotesカレンダーを取得する簡単なサンプル - 適材適所

VBAでNoteメールの添付ファイルを保存する - 適材適所

PowerShellでNotesメールを送信するサンプル - 適材適所

【VBA】Notesカレンダーを取得する簡単なサンプル【繰り返し予定対応バージョン】 - 適材適所

【PowerShell】Notesカレンダーを取得する - 適材適所

何かと下火なNotesですが、外貌からの操作性という意味ではピカイチな性能なので、ぜひ他の記事も読んでいただいて、自動化の参考にして頂ければと思います。

というわけで、ここまでお読みいただき、ありがとうございました。