適材適所

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

MENU

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

この記事では

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

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

前回はCCとBCCを追加するサンプルを紹介しました。

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

添付ファイルの送信を自動化できれば、

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

多分。

VBAでファイルを添付して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 を呼び出します。

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

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

ということで、添付ファイルは3種類選べるみたいです。今回は指定したファイルを添付することになります。

→現在(2021/11/1)はNotesはIBMからインドのHCLに売却されたので公式はこちらになります

構文は次の通りです。

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回に渡り紹介してきました。

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

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

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

参考サイト

LotusScript /COM/OLE クラス