適材適所

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

PowerShellでNotesメールを送信するサンプル

PowerShellを使ってNotesメールを送信するサンプルです。

関数化してありますのでPoewrShellに読み込ませるだけで簡単に使うことができます。

PowerShell(x86)を起動して、下記に紹介しているコードを貼り付け、引数を設定して関数を実行すればPowerShellから簡単にNotesメールを送信することができます。

Notesの操作はNotesに用意されているCOMインターフェースを使用するのでVBAやその他の言語でも同じことができます。

下記の記事ではVBAで同じようにNotesメールを送信するサンプルを紹介しています。

www.tekizai.net

PowerShellでNotesメールを送るサンプル

次にPowerShellによるNotesメールの送信サンプルを紹介します。

PowerShellでNotesのCOMオブジェクトを扱うときのあるあるですが、実行するときは32bitのPowerShellを使う必要がありますのでご注意ください。

 
function Create-NotesMail
{
   [CmdletBinding()]
   param(
   [parameter(Mandatory=$true)]$ServerName,
   [parameter(Mandatory=$true)]$DBPath,
   [parameter(Mandatory=$true)]$Password,
   [parameter(Mandatory=$true)]$SendTo,
   [parameter(Mandatory=$true)]$Subject,
   [parameter(Mandatory=$true)]$Body,
   [AllowNull()][String[]]$CcArray,
   [AllowNull()][String[]]$BccArray,
   [AllowNull()][String[]]$AttachNames,
   [switch]$Send)

    $EMBED_ATTACHMENT= 1454
    
    #セッションを開始する
    $ntSession=New-Object -ComObject Lotus.NotesSession
    [void]$ntSession.Initialize($password)
    
    #データベースのオープン
    $ntDB = $ntSession.GetDatabase($serverName, $dbPath)
    
    #新規文書を作成
    $ntDoc = $ntDB.CreateDocument()
    
    #文書内容を作成
    #件名の設定
    [void]$ntDoc.AppendItemValue("Subject", $subject)
    
    #送信先
    [void]$ntDoc.AppendItemValue("SendTo", $sendTo)
    
    #CC設定(複数設定する場合は配列を与える)
    If ($ccArray -ne $null)
    {
       [void]$ntDoc.AppendItemValue("CopyTo", $ccArray)
    }
    #BCC設定
    If ($ccArray -ne $null)
    {
        [void]$ntDoc.AppendItemValue("blindCopyTo", $bccArray)
    }
        
    #本文の設定
    $ntRtItem = $ntDoc.CreateRichTextItem("Body")
    foreach($line in $body)
    {
        [void]$ntRtItem.AppendText($line)
        [void]$ntRtItem.AddNewLine(1)
    }
    if ($attachNames -ne $null)
    {
        foreach($_ in $attachNames)
        {
            #1行追加する
            [void]$ntRtItem.AddNewLine(1)
            #EMBED_OBJECTLINK または EMBED_ATTACHMENT を指定したときは、空の文字列 ("") を指定する
            [void]$ntRtItem.EmbedObject($EMBED_ATTACHMENT, "",$_)
        }
     }
     if($Send)
     {
       #送信するメールを送信済みフォルダに保存する設定
      $ntDoc.SaveMessageOnSend = $true    
      [void]$ntDoc.Send($False)
     }
     else
     { 
        [void]$ntDoc.Save($False, $True)       
   }
}

使い方の例

上記コードをPowerShell(x86)に貼り付けてエンターを押して読み込ませます。

すると、Create-NotesMail関数が使えるようになります。

ちゃんと読み込まれたか確認するためには、次のようにします。

 
Get-Command Create-NotesMail

正しく読み込まれている場合は次のように表示されます。

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Create-NotesMail

この状態になっていることが確認できたら、Notesサーバー名、データベース名を調べます。

下記の記事で具体的にサーバー名等の調べ方について触れています。

www.tekizai.net

下記に具体的な使い方を示します。

関数のデフォルトではメールは送信されず、ドラフトに格納されます。

Sendパラメータを指定することで、ドラフトに保存するのではなく、メールをいきなり送信することができます。

メールをドラフトに保存する

宛先にa@gmail.comとb@yahoo.co.jpを指定し、

メールはドラフトに保存するサンプルです。

 
Create-NotesMail -ServerName "ServerName" -DBPath "aa.nsf" -Password "pass" -SendTo @("a@gmail.com","b@yahoo.co.jp") -Subject "題名だよ" -Body "本文だよ" 

メールをそのまま送信する

宛先にa@gmail.com、ccにb@yahoo.co.jpを指定し、メールはそのまま送信します。

ちなみに宛先は配列でも文字列でもどちらでもOKです。

 
Create-NotesMail -ServerName "ServerName" -DBPath "aa.nsf" -Password "pass" -SendTo "a@gmail.com -Subject "題名だよ" -Body "本文だよ" -Save $true -cc @("b@yahoo.co.jp") -Send

ファイルを添付する

宛先にa@gmail.comにtext.txtを添付して送信するサンプルです。

 
Create-NotesMail -ServerName "ServerName" -DBPath "aa.nsf" -Password "pass" -SendTo "a@gmail.com" -Subject "題名だよ" -Body "本文だよ" -AttachNames @("C:\text.txt") -Send

簡単な解説や改良ポイント

Sendパラメタはswitchとしています。これは、パラメタを付けて呼ばれた場合は変数$SendがTrueになります。

Notesの各メソッドにしつこいくらい[void]がついていますが、
これはNotesの各メソッドが返してくれる戻り値の画面出力を抑止するためです。

また、パスワードを平文で指定するようにしていますが、セキュリティの面を考えると、Secure-Stringなどを使うように改良してもいいかも知れません。

サーバー名やデータベース名もいちいち指定するようにしていますが、
いちいち指定するのが面倒な場合は、関数の中で指定したり、設定ファイルから読み込む形にするのもありかと思います。

終わりに

PowerShellでNotesメールを送信するサンプルを紹介しました。

毎日送信しなくてはいけないメールをスケジュールに登録して自動で送信したり、定型的なメールを自動で作成したり、あるいは届いたメールに自動で返信する、なんてこともやろうと思えばできます。

これを使ってNotesメールの送信作業を楽にできる人が一人でもいれば幸せです。

どうぞご笑納ください。

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