LotusNotesのメール作成・送信をフルオート化してみた
LotusNotesでメール作成→送信をフルオートにする
LotusNotesでメールを送る作業が大量発生したときは、メール自動作成ツールで対応している。
ただ、誤送信が怖いので、基本的にメール作成までは自動でやっても、送信自体は手作業でやっていた。
しかしながら、ついに背に腹は替えられぬようになり、作成・送信フルオートをやってみた。
作業の手順としては、
といった感じ。
フルオート送信の壁
これまでのマクロに、「送信」という過程と「次へ移る」という過程を付け加えるだけなので、楽勝だと思っていたんだが、いざやってみると、
- 送信後、閉じるときに「……保存しますか? [はい][いいえ]」という確認メッセージが出てしまう
- メール作成後のNotesDocumentクラスのSaveメソッドを実行しなければ確認メッセージは出ないが、送信履歴に残らない
という問題が生じた。
復習~LotusNotesのメールができるまで
【スキップ】
ちょっと復習として、LotusNotesでメールができるまでの処理の過程をおさらいしておく。興味がなかったら上の「スキップ」リンクを踏んだら下にワープするのでどうぞ。
やっとクラスリファレンスの読み方が分かってきたので、自身の勉強のために書くだけ。よって、説明の中には素人の推定によるものも含まれているw
Notesメールができるまで
- NotesSessionクラスのインスタンスを作成
→これで現在使用中のNotesのいろんなものが使える。 - NotesUIWorkSpaceクラスのインスタンスを作成
→これでNotesのワークスペースのうち、現在使用中のウインドウが使える - NotesDatabaseクラスのインスタンスを作成
→これで現在使用中のNotesデータベースにアクセスできる。 - NotesDatabaseクラスのOpenMailメソッドで現在のユーザーのメールデータベースを開く
→これでメールデータベースが使える。 - NotesDatabaseクラスのCreateDocumentメソッドを用いて、NotesDocumentクラスのインスタンスを作成
- NotesDocumentクラスのインスタンスに、宛先、件名、受信確認の有無など諸データをセット
- NotesDocumentクラスのCreateRichTextItemメソッドを用いて、NotesRichTextItemクラスのインスタンスを作成
- NotesSessionクラスのCreateRichTextStyleメソッドを用いて、NotesRichTextStyleクラスのインスタンスを作成
- NotesRichTextItemクラスのAppendTextメソッド等を用いて本文を作成
- 必要ならNotesRichTextItemクラスのEmbdedObjectメソッドを用いて添付ファイルを追加
- NotesDocumentクラスのSaveメソッドを用いて文書を保存する
→これで作成したメールがドラフトに保存される。 - NotesUIWorkSpaceクラスのEditDocumentメソッドを用いて、NotesUIDocumentクラスのインスタンスを作成
→これで画面に作成したメールが表示される。
とまあ、こんな手順。
ちょっとづつ分かってきたような気がする。
確認メッセージの表示を防止するのは簡単
上掲Notesメールができるまでの11.、12.の過程は、
リスト1
notesDocument.Save False, False Set notesUIDocument = notesUIWorkSpace.EditDocument(True, notesDocument, False)
というコードになる。※
で、これに「送信→閉じる」という過程を付け加えれば、あとは処理全体をループで回すだけなのだが、単純に
リスト2
notesDocument.Save False, False Set notesUIDocument = notesUIWorkSpace.EditDocument(True, notesDocument, False) CallByName notesUIDocument, "Send", VbMethod, False notesUIDocument.Close True '……(*)'
と書いて実行すると(*)を実行したところで、保存確認のメッセージボックスが出てきてしまう。
VBAでいうところの「Saved」みたいなプロパティはないものか、とクラスリファレンスを探してみると、NotesUIDocumentクラスのリファレンスにSaveメソッドというやつがあった。
そこで、リスト2を
リスト3
notesDocument.Save False, False Set notesUIDocument = notesUIWorkSpace.EditDocument(True, notesDocument, False) CallByName notesUIDocument, "Send", VbMethod, False notesUIDocument.Save '……(*)' notesUIDocument.Close True
このたった1行(*)を加えるだけでうまく行ったw
おかげで、80件近くの宛先に文面も添付ファイルも異なるメールを送る、という苦行が便所に行っている間に完了w
おわりに
一昨年の今頃は、まったく意味も分からずに使っていたマクロだが、「クラス」の概念が理解できてきたことによってLotusScriptのクラスリファレンスがだんだん読めるようになってきた。
その結果、コードの意味が分かるようになり、いろいろアレンジを加えることができるようになってきた。
オブジェクト指向を勉強してよかったなあ、と思う今日この頃。
参考~LotusScriptのクラスリファレンス
- NotesSessionクラス
- NotesDatabaseクラス
- NotesUIWorkSpaceクラス
- NotesUIDocumentクラス
- NotesDocumentクラス
- NotesRichTextItemクラス
- NotesRichTextStyleクラス
- NotesEmbededObjectクラス