【Outlook VBA】署名と挨拶文の動的制御:HTMLBodyを完全掌握する極限の設計
開発プロジェクトの現場で、こんな要望を受けたことはないだろうか。
「朝のメールは『おはようございます』、夜は『お疲れ様です』にしたい」
「社外の宛先と社内の宛先で、挿入する署名を自動で切り替えたい」
「でも、Outlook標準の署名機能だと制御しきれない……」
手動でコピペしているうちは良いが、大規模な組織やミスが許されない業務において、こうした細部の手間は確実に生産性を蝕む。そして、これを解決しようと安易にネット上の古いサンプルコードをコピペすると、「署名が二重に挿入される」「改行が潰れてHTMLが崩壊する」「HTMLBodyに代入した瞬間に既存の署名が吹き飛ぶ」という地獄のようなバグの沼にハマる。
今回は、Outlook VBAのオブジェクトモデル、特に`MailItem`と`HTMLBody`のライフサイクルを熟知したアーキテクトが、実務で絶対に破綻しない、堅牢で美しい動的署名・挨拶文の挿入ロジックを伝授する。
—
1. なぜ「標準の署名機能」や「単純な代入」では破綻するのか?
多くの初学者が陥る罠は、`MailItem.Body` や `HTMLBody` に対して、単に文字列を「代入(`=`)」してしまうことだ。
Outlookのメール作成画面を開いた瞬間、実はすでにデフォルトの署名が自動挿入されているケースが多い。そこにプログラムから `objMail.HTMLBody = “新しい文章”` などと書くと、既存の署名がきれいさっぱり消滅する。
かといって、現在のHTMLBodyを取得して末尾に文字列を結合しようとすると、以下の問題が発生する。
1. HTMLタグの構造破壊: 単純な文字列結合を行うと、`