Thunderbirdメール自動作成マクロで複数アドレス指定に対応するのは簡単だった

Thunderbirdで複数の宛先を指定するのは簡単だった

Shell関数でThunderbirdのメールを作成する

このときにも紹介したが、VBAThunderbirdのメールを作成するには、次のようなコードを書けば良い。

リスト1
Shell "Thunderbird実行ファイルのフルパス  -compose _
to=送信先メールアドレス, _
cc=CCアドレス, _
subject=メール件名, _
body=本文文字列, _
attachment='添付ファイルフルパス'"

普通、複数の宛先を設定するときには「,」(半角カンマ)でアドレスを区切ったら良さそうなものなんだが(実際、LotusNotesの場合はそれでうまく行く)、Thunderbirdだとうまく行かない。

実験

スト2
Public Sub testHoge()
  Dim tbPath As String
  tbPath = "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"
  tbPath = """" & tbPath & """ -compose """
  Dim mailTo As String
  mailTo = "hoge@foo.bar.jp,fuga@foo.bar.jp"    '……(1)'
  Dim mailSubj As String
  mailSubj = "ち~んw"
  Dim mailBody As String
  mailBody = "ち~んw"
  Shell tbPath & _
    "to=" & mailTo & "," & _
    "subject=""" & mailSubj & """," & _
    "body=""" & mailBody & """"
End Sub

たとえば、(1)のように送信先アドレスに半角カンマ区切りで複数のアドレスを与えたつもりでも、これを実行すると、

f:id:akashi_keirin:20170423074123j:plain

こうなる。一つ目のアドレスにしか反応しとらん。

対応

あれこれとggっていて、このページにたどりついた。

カンマではなく、セミコロン ";" で連結するのでは?

ということだったので、そうしてみた。

リスト3
Public Sub testHoge()
  Dim tbPath As String
  tbPath = "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"
  tbPath = """" & tbPath & """ -compose """
  Dim mailTo As String
  mailTo = "hoge@foo.bar.jp;fuga@foo.bar.jp"    '……(1)'
  Dim mailSubj As String
  mailSubj = "ち~んw"
  Dim mailBody As String
  mailBody = "ち~んw"
  Shell tbPath & _
    "to=" & mailTo & "," & _
    "subject=""" & mailSubj & """," & _
    "body=""" & mailBody & """"
End Sub

変えたのは(1)のところのみ。「,」(半角カンマ)を「;」(半角セミコロン)に変えただけ。

実行結果

コードを実行してみると、

f:id:akashi_keirin:20170423074127j:plain

おおっ! ちゃんと2箇所あてのメールになっとる!

感想

めちゃくちゃ簡単でした。

幸せというものは、案外足下に転がっているものなんだなあ。。。(『青い鳥』風)

これで、このときThunderbirdメール作成メソッドで、メールアドレスを渡す部分

Shell thunderbirdPath & _
    "to=" & mailTo_ & "," & _
    "cc=" & CC_ & "," & _
    "bcc=" & BCC_ & "," & _
    "subject=""" & mailSubject_ & """," & _
    "body=""" & strBody & """," & _
    "attachment=""" & strAttFile & """"
End Sub

を、

Shell thunderbirdPath & _
    "to=" & Replace(mailTo_, ",", ";") & "," & _
    "cc=" & Replace(CC_, ",", ";") & "," & _
    "bcc=" & Replace(BCC_, ",", ";") & "," & _
    "subject=""" & mailSubject_ & """," & _
    "body=""" & strBody & """," & _
    "attachment=""" & strAttFile & """"
End Sub

に変えるだけで複数アドレス指定に対応できるなあ。