適材適所

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

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

この記事では

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

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

こちらの記事ではCCとBCCを追加するサンプルを紹介しました。

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

添付ファイルの送信についても自動化できれば、例えば

  • 別システムからデータを抽出してそのデータをメールに添付
  • システムに異常があったときに通知メールにログを添付

などなど、業務レベルで使えるものがいい感じに作ることができるのではないかと思います。

VBAでファイルを添付してNotesメールを作成・送信するコード

コードは次の通りです。

Notes関連の参照設定を忘れずにチェックをつけてください。

 
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 を呼び出します。

先述した通り、EmbedObjectは添付ファイル以外のオブジェクトを表すことがあります。

具体的には次の3つのオブジェクトのどれかを表します。

IBMの公式サイトによると、

NotesがIBMからHCLに売却されたのでこちらを参照→EmbedObject (NotesRichTextItem - LotusScript)

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

添付ファイルをメール本文に添付するときの構文は次の通りです。

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メールにファイルを添付する方法について解説してみました。

当ブログの他のNotesメール関連の記事も合わせて読んで頂ければ、大量のメール処理の自動化、一連の業務の中でのメール処理の自動化など、実務に耐えうるツールができるのではないかと思います。

これらの記事が皆さん業務自動化の一助になればいいなぁと思います。

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

参考サイト

LotusScript /COM/OLE クラス