適材適所

パソコン作業の自動化・効率化のための情報を発信するブログ(VBA,PowerShellなど)

VBAでNotesメールを作成・送信する_ファイル添付

この記事では

  • VBAを使ってNotesのメール操作を自動化するためのアイディアを書いています。
  • Notesを使った日々の業務を自動化したい人に向けて書いています。

VBAでNotesメールにファイル添付する

前回はCCとBCCを追加するサンプルを紹介しました。 今回は、添付ファイルを追加するサンプルを紹介します。

ファイルをメールに添付することができれば、いい感じに業務レベルで使えるものができるのでは?

コード

まずはコードを紹介します。

Option Explicit
'定数は環境に合わせて設定
Const DB_PATH As String = "○○.nsf"
Const SERVER_NAME As String = "SERVER"
Const PASSWORD As String = "pass"
Const EMBED_ATTACHMENT as Long = 1454
'参照設定:Louts Domino Object
Sub sample2()
     'セッションを開始する
    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")
    
    With ntRtItem
        .AppendText "本文を設定します"
        .AddNewLine
        '添付ファイルの設定
        .EmbedObject EMBED_ATTACHMENT, "", "C:\sample.txt"
    End With
    
    '送信するメールを送信済みフォルダに保存する設定
    ntDoc.SaveMessageOnSend = True    

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

コードの解説

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

まず、定数は、お決まりの通り、環境に合わせて設定してください。 今回一つ目のポイントは、このConst EMBED_ATTACHMENT as Long = 1454です。 これはNotesで指定されている値になるので、お決まりの定数として定義しておきます。

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

これらはNotesアプリケーションを外部から操作するときのお決まりのようなものです。
詳しくはVBAでNotesメールを作成・送信する_最も簡単なサンプル - 適材適所で解説しています。

    '新規文書を作成
    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")

ここまではこれまでと同じです。

    With ntRtItem
        .AppendText "本文を設定します"
        .AddNewLine
        '添付ファイルの設定
        .EmbedObject EMBED_ATTACHMENT, "", "C:\sample.txt"
    End With

ここが今回のポイントです。NotesRichTextItemオブジェクトのこれまで呼び出したことのないメソッド、EmbedObject を呼び出します。IBMの公式サイトによると、

指定された名前のファイルまたはアプリケーションを対象に次のいずれかの機能を実行します。
・指定されたファイルをリッチテキストアイテムに添付します。
・リッチテキストアイテムにオブジェクトを埋め込みます。オブジェクトは指定されたアプリケーションまたはファイルで作成します。
・リッチテキストアイテムにオブジェクトリンクを配置します。リンクは指定したファイルで作成します。
ということで、添付ファイルは3種類選べるみたいです。今回は指定したファイルを添付することになります。

構文はこんな感じ
Set notesEmbeddedObject = notesRichTextItem .EmbedObject( type% , class$ , source$ , [ name$ ] )
引数が3つあります。

  • type$
定数 意味
EMBED_ATTACHMENT 1454 添付ファイル
EMBED_OBJECT 1453 埋め込みオブジェクト
EMBED_OBJECTLINK 1452 オブジェクトリンク

今回は添付ファイルなので、EMBED_ATTACHMENTを指定します。ここで最初に定義しておいた定数が生きてくるわけですね!

  • class$

String 型。

・EMBED_OBJECT を指定してアプリケーションから空の埋め込みオブジェクトを作成する場合、このパラメータにアプリケーションの名前 (「1-2-3® Worksheet」など) を指定します。また、source$ には空白文字列 ("") を指定します。大文字小文字を区別して指定します。
EMBED_OBJECTLINK または EMBED_ATTACHMENT を指定したときは、空の文字列 ("") を指定します。

「EMBED_ATTACHMENT を指定したときは、空の文字列 ("") 」を指定します、とあります。つまり今回は空の文字を指定します。

  • source$

String 型。

・EMBED_OBJECT を指定してファイルから埋め込みオブジェクトを作成する場合、このパラメータにファイルの名前を指定します。また、class$ には空白文字列 ("") を指定します。
・EMBED_ATTACHMENT または EMBED_OBJECTLINK を指定した場合、このパラメータに追加またはリンクするファイルの名前を指定します。

今回の場合は単純に、添付したいファイルのパスを指定してあげます。

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

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

ここもお決まりの文句ですね。

終わりに

NotesのメールをVBAで操作するサンプルを3回に渡り紹介してきました。

大量のメール処理の自動化、一連の業務の中でのメール処理の自動化など・・・。

これまで紹介したものを使って、皆さん業務自動化の一助になればいいなぁと思います。

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

関連記事

www.tekizai.net

www.tekizai.net

参考サイト

IBM Knowledge Center