Notes式では@MailSendを使えば比較的簡単にメールを送ることが出来ますが、Lotus Scriptでも比較的簡単にメールの送信が出来ます。
場合によっては、Notes式でメールを送信するより高度な内容を作ることができます。
シンプルな内容を送る場合。NotesDocumentのSendメソッドを用います。
Sub SendMail()
'宣言
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim richTextItem As NotesRichTextItem '本文
Set db = session.CurrentDatabase
'メール送信用文書作成
Set doc = db.CreateDocument
doc.Form = "Memo" 'FormはMemoにする
doc.SendTo = "送信者" '送信先 複数の送信先は配列を格納する
doc.CopyTo = "CC" 'CC 複数の送信先は配列を格納する
doc.BlindCopyTo = session.UserName 'BCC メールの送信済みボックスに格納されないため、送信者にBCCでメールが入るようにする
mailDoc.Subject = "タイトルです" 'タイトル
Set richTextItem = New NotesRichTextItem( doc, "Body" ) 'Bodyが本文 リッチテキストアイテムとして弄れる
Call richTextItem.AppendText( "お疲れ様です。" )
Call richTextItem.AddNewLine( 1 ) '改行
Call richTextItem.AppendText( "テストです。" )
Call mailDoc.Send( False ) 'メール送信
End Sub
リッチテキストアイテムには、文書リンクを付与することも可能です。
対象のNotesDocumentを取得して、 NotesRichTextItemのAppendDocLinkで挿入します。
'targetDocに文書リンク先を取得した状態
'本文に文書リンクを挿入する
Call richTextItem.AppendDocLink(doc, "コメント")
これだけで文書リンクが付きます。そのままだとその時点での文書の末尾に付与されます。
コメントの箇所は、文書リンクにカーソルを合わせると表示されるコメントになります。
Notesでは表の機能がありますが、Notes式ではメール送信時に表を挿入することが出来ません。
Lotus Scriptであれば、表をメール本文に挿入することが出来ます。
ただし、非常に扱いが難しいです。
①NotesRichTextParagraphStyle オブジェクトを作成
②列幅を指定
③表を作成してリッチテキストアイテムへ挿入
④データーをリッチテキストアイテム内の表へ挿入
とりあえずソースコード見て下さい。
'列幅設定
Dim rtpsCols(5) As Variant '6列作成する 列数に併せて配列数を調整
'新しい NotesRichTextParagraphStyle オブジェクトを作成
Dim i as Integer
For i = 0 To 5 'ここも列数によって配列数を調整する
Set rtpsCols(i) = session.CreateRichTextParagraphStyle 'RichTextParagraphStyleオブジェクトの作成
rtpsCols(i).Alignment = 0 '左揃え
rtpsCols(i).Firstlineleftmargin = RULER_ONE_CENTIMETER * 0.1 '一行目の左余白
rtpsCols(i).Leftmargin = RULER_ONE_CENTIMETER * 0.1 '二行目以降の左余白
Next
'二行目以降の右余白
rtpsCols(0).RightMargin = RULER_ONE_CENTIMETER * 0.5
rtpsCols(1).RightMargin = RULER_ONE_CENTIMETER * 2
rtpsCols(2).RightMargin = RULER_ONE_CENTIMETER * 2
rtpsCols(3).RightMargin = RULER_ONE_CENTIMETER * 2
rtpsCols(4).RightMargin = RULER_ONE_CENTIMETER * 8
rtpsCols(5).RightMargin = RULER_ONE_CENTIMETER * 2.5
'表の作成
Call richTextItem.AppendTable(2, 6,,,rtpsCols) '2行6列のテーブルを挿入 行数はここで指定すること
Set rtnav = richTextItem.CreateNavigator 'Navigator取得 リッチテキストアイテムの入力位置を取得するためのオブジェクト
'編集するテーブルオブジェクトの取得
Dim rtt As NotesRichTextTable
Set rtt = rtnav.GetFirstElement(RTELEM_TYPE_TABLE)
'先頭行取得
'セル位置を取得し、編集点を移動して次の列のセルの位置を取得を最後の列まで繰り返す
Call rtnav.FindFirstElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendText( "*" )
Call richTextItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendText( "項目A" )
Call richTextItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendText( "項目B" )
Call richTextItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendText( "項目C" )
Call richTextItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendText( "項目D" )
Call richTextItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendText( "項目E" )
Call richTextItem.EndInsert
'受注データー挿入
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendDocLink(doc, doc.A(0))
Call richTextItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendText(doc.B(0))
Call richTextItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendText(doc.C(0))
Call richTextItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendText(doc.D(0))
Call richTextItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendText(doc.E(0))
Call richTextItem.EndInsert
Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)
Call richTextItem.BeginInsert(rtnav)
Call richTextItem.AppendText(doc.F(0))
Call richTextItem.EndInsert
扱えるようになると、見た目がリッチなメールを自動送信することが可能です。
情報を伝えるときに簡潔に見せることが可能になるので重宝します。ソースコード組むのが大変ですけど。
エージェントにメール送信処理を任せちゃえば、エージェント実行者を弄ることによって送信者の変更が出来ます。
でもそれだと面倒くさいので、ひとつのソース内に抑える方法のご紹介。ですが、厳密には送信者は変わってないです。技術的な問題でしょうか…
二種類ございます。
Dim strFrom As String
strFrom = "送信者"
doc.Principal = strFrom
doc.DisplayFrom = strFrom
doc.DisplaySent = strFrom
doc.DisplaySent_1 = strFrom 'R8用
一番上のソースコードにこれを加えると、送信者は変わらないのですが、返信時に指定の名前にすることが出来ます。
この方法なら、表示名も変わります。
ですがCCやBCCがいる場合だと、なぜか文書を開いたときに送信者の名前が実行者の名前になってることがあります。何ででしょうかね…
Dim session As New NotesSession
Dim db As New NotesDatabase("", "")
Dim doc As NotesDocument
Dim strSvr As String
strSvr = session.GetEnvironmentString("MailServer", True)
If db.Open(strSvr, "mail.box") = False Then
Msgbox "mail.box が開けません", 0, "Error"
Exit Sub
End If
Set doc = db.CreateDocument
doc.Form = "Memo"
doc.From = "送信者" '送信者名
doc.SendTo = session.UserName '宛先
doc.Recipients = doc.SendTo '宛先2 CCやBCCがある場合は、AppendArrayで結合して代入する必要がある
doc.PostedDate = Now '送信日
doc.Subject = "テストメールです" '件名
Dim richTextItem As NotesRichTextItem '本文
Set richTextItem = New NotesRichTextItem( doc, "Body" ) 'Bodyが本文 リッチテキストアイテムとして弄れる
Call richTextItem.AppendText( "お疲れ様です。" )
Call richTextItem.AddNewLine( 1 ) '改行
Call richTextItem.AppendText( "テストです。" )
Call doc.Save(True, True) '保存で送信
Recipientsをちゃんと正しく指定しないと正常に動作しません。面倒な仕様です。
そもそもこの方法ってかなりごり押しな方法なので、正常に動作し難いのだと思います。
送信者の変更に関してはこちらを参考にしました。