適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話など気になったことも載せているブログです。

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

VBAからNotesメールを操作する

毎日の日報メールや、同じようなメールをちょこっとだけ変えて一度に送信しなければならない場面など、メールの作成や送信を自動化すると便利な場面があるかと思います。

同じような作業を繰り返して行っていれば、人間ですから抜けや漏れがでることもあるでしょう。

また、コピペ作業を何度も行って時間の無駄としか思えないようなことに時間を費やしている方もいるかも知れません。

そんな作業の結果、メールの内容ミスや誤送信などで、情報漏洩などを起こした日には目も当てられません。

Notesのメールを使っておりながら、そのような作業を強いられている人は、ぜひVBAでNotesメールの作成・送信を使ったメール関係業務の自動化を考えてみてはどうでしょうか。

VBAであればExcelやWordなどのOfficeアプリケーションさえインストールされていれば、特別な環境構築の必要がないため、簡単にメールの送信を自動化することができます。

この記事ではVBAを使ってNotesメールを自動送信する最も単純なサンプルを紹介します。

新規メールを作成して、宛先に対してメールを送信するサンプルです。

宛先は一人とし、添付ファイル等もない、シンプルなものです。

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

 
Option Explicit
'定数は環境に合わせて設定
Const DB_PATH As String = "○○.nsf"
Const SERVER_NAME As String = "SERVER"
Const PASSWORD As String = "pass"
'参照設定:Louts Domino Object
Sub sample1()
     'セッションを開始する
    Dim ntSession As NotesSession: Set ntSession = New NotesSession
    ntSession.Initialize PASSWORD
    
    'データベースのオープン
    Dim ntDB As NotesDatabase: Set ntDB = ntSession.GetDatabase(SERVER_NAME, DB_PATH)
    
    '新規文書を作成
    Dim ntDoc As NotesDocument: Set ntDoc = ntDB.CreateDocument()
    
    '件名の設定
    ntDoc.AppendItemValue "Subject", "件名を設定します"
    
    '送信先
    ntDoc.AppendItemValue "SendTo", "sample@mail.co.jp"

     '本文の設定
    Dim ntRtItem As NotesRichTextItem: Set ntRtItem = ntDoc.CreateRichTextItem("Body")
    
    '本文の設定
    ntRtItem.AppendText "本文を設定します"

    '送信するメールを送信済みフォルダに保存する設定
    ntDoc.SaveMessageOnSend = True    
    
    '送信
    ntDoc.Send False
    
    '送信せずに下書きする場合はこちら
    ntDoc.Save True,False
        
End Sub

サンプルを使う前に

前提条件として、当然ですが、Notesのクライアントまたは、サーバがインストールされている必要があります。

VBEの標準モジュールにこのコードをコピーします。また、実行前に、Louts Domino Objectの参照設定にチェックします。

定数を環境に合わせて編集します。

また、送信先も任意のアドレスに変更するようにしてください。

コードの解説

 
'定数は環境に合わせて設定
Const DB_PATH As String = "○○.nsf"
Const SERVER_NAME As String = "SERVER"
Const PASSWORD As String = "pass"
'参照設定:Louts Domino Object

まず、DB_PATH とSERVER_NAME はNotesの画面から確認できます。
f:id:shinmai_papa:20190724095457p:plain

f:id:shinmai_papa:20190724095545p:plain

PASSWORD はお使いのユーザーパスワードを設定します。
また、Louts Domino Objectに参照設定のチェックをいれます。

 
   'セッションを開始する
   Dim ntSession As NotesSession: Set ntSession = New NotesSession
   ntSession.Initialize PASSWORD
    
   'データベースのオープン
   Dim ntDB As NotesDatabase: Set ntDB = ntSession.GetDatabase(SERVER_NAME, DB_PATH)

NoteSessionとは、IBM公式サイトによると、

現在のスクリプトの環境を表します。このクラスを使用すると、環境変数、アドレス帳、現在のユーザーに関する情報、現在の Notes のプラットフォームとリリース番号の情報にアクセスできます。
という、Notesアプリケーションにアクセスするための基本的なオブジェクトになります。何はなくともこれをまず呼び出します。

Initialize メソッドは、

現在のユーザーの ID で COM セッションを初期化します。

というものになります。「COMセッションってなんやねん!!」という質問は受け付けません。

話が長くなるので(本当はよくわかってない)。

何はともあれ、引数にパスワードを設定します。

次にデータベースを開きます。

操作対象のメールも、データベースなのです。

 
Dim ntDB As NotesDatabase: Set ntDB = ntSession.GetDatabase(SERVER_NAME, DB_PATH)

NoteSessionのGetDatabaseメソッドを呼び出すことでデータベースを開くことができます。

構文

Set notesDatabase = notesSession .GetDatabase( server$ , dbfile$ [, createonfail ] ) server$ String 型。データベースが置かれているサーバーの名前。空の文字列 ("") を使用すると、現在使用しているコンピュータ上のデータベースが指定されます。スクリプトがクライアント上で実行されるとき、空の文字列はローカルデータベースを示します。スクリプトがサーバー上で実行されるとき、空の文字列はそのサーバーのデータベースを示します。

第一引数はサーバー名を指定します。

dbfile$

String 型。Notes データディレクトリ内のデータベースのファイル名と位置です。データベースが Notes データディレクトリにないときは、フルパス名で指定します。まだデータベースに関連付けられていない Database オブジェクトを作成する場合は、dbfile$ と server$ の両方に空の文字列を使用します。

第二引数はデータベース名です。○○.nsfってやつ。

createonfail

注 このパラメータは R5 で新しく追加されました。 Boolean 型。オプション。指定されたデータベースが開けなくても、Database オブジェクトを作成する場合は True (デフォルト) を指定します。データベースを開けない場合に Nothing (Database オブジェクトは作成されていません) を返すには、False を指定します。

第三引数は、状況によって指定します。

 
    '新規文書を作成
    Dim ntDoc As NotesDocument: Set ntDoc = ntDB.CreateDocument()

ここまでで、既にメールデータベースは開いているのであとは新規文書、つまり新規メールを作成します。

NotesDocumentとは、データベース内の文書を表すオブジェクトです。

Notesでは、メールでもカレンダーでも一つ一つの要素を「文書」として扱います。

メールの場合は、単純で、メールひとつがひとつの文書です。

NotesDataBaseのCreateDocumentメソッドを呼び出すと、新規文書を作成できます。

 
    '件名の設定
    ntDoc.AppendItemValue "Subject", "件名を設定します"
    
    '送信先
    ntDoc.AppendItemValue "SendTo", "sample@mail.co.jp"

     '本文の設定
    Dim ntRtItem As NotesRichTextItem: Set ntRtItem = ntDoc.CreateRichTextItem("Body")
    
    '本文の設定
    ntRtItem.AppendText "本文を設定します"

ここは、新規文書、つまり新規メールの内容を設定しているところです。

文書の各アイテムを追加するためには、AppendItemValue メソッドを使います。

アイテム名と値を引数に与えてあげます。

どんなアイテムがあるかは、NotesのGUI画面から確認することができます。

Notesのメール画面で文書のプロパティを選択すると小さな窓が出てくるので、その中で選択中の文書のフィールド一覧と設定されている値を確認することができます。

f:id:shinmai_papa:20190722114810j:plain
文書のプロパティ

 
'送信するメールを送信済みフォルダに保存する設定
ntDoc.SaveMessageOnSend = True    

必要なフィールドを設定し終えたら、いよいよ送信です。

その前に送信前に、NotesDocumentのSaveMessageOnSendをtrueに設定します。

そのようにしないと、送信したメールが送信済みフォルダに残らないためです。

デフォルトではfalseになっています(デフォルトはtrueの方がいいような)。

 
'送信
ntDoc.Send False
    
'送信せずに下書きする場合はこちら
'ntDoc.Save True,False  

準備ができたら、いよいよ送信です。
NotesDocumentのSendメソッドを呼び出します。

メールを送るだけであれば、引数はFalseになります。

もしくは、Saveメソッドを呼ぶと、メールを下書き保存できます。

これでVBAを使ってNotesからメールを送信することができます。

ワークシート上に本文のテンプレートと宛先を用意しておいて連続でメールを送信する、といったことも簡単にできるようになります。

終わりに

機能は充実しているのに、その見た目から古臭いと敬遠されがちなNotes・・・。

でも外部から操作するためのプログラムが用意されているところなど、さすが、考えられたツールだなと思います。

インターフェースが古臭くても、いぶし銀のナイスガイですね。

この機能を使って、Notesメールの面倒な業務から解放される人が増えればと思います。

他にもNotesメールを操作する記事を書いておりますので、よければ他の記事もご参照頂ければ幸いです。

Notes カテゴリーの記事一覧 - 適材適所

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