Macで、メール一括送信プログラムを作る

Author :

automatorアイコン☆このページで紹介しているプログラムは、最新のMac(Lion)ではうまく動きません。修正版作りました!(^∀^)→修正版の記事はこちら

例えば取引先にイベントのお知らせをしたいときとか、サークル仲間10名以上に飲み会のお知らせをしたいときなど、アドレスブックに登録した人に一気にメールを送りたいときって、ありませんか?
そんなときに役立つプログラムを、Macに付属のAutomatorとカンタンなApplescriptで作ってみました。
アドレスブックからグループを選んで実行すると、そのグループ内全員に宛名つきのメールを送ります。
対象はAutomator2.1(MacOS 10.6 Snow Leopard)です。
Automatorには触ったことがない、という方も多いようですが、面白いのでぜひ試してみてください。


ところで、Automatorのライブラリには「グループメーラー」というものが用意されています。実はこれを利用すると、一分もかからず、メールを一括送信できるようになります。
automatorでメール一括送信(プログラム書かない!)
こうすると、一行のプログラムも必要ありません。
ただ、オプションのあいさつが英語仕様っぽく、名前が呼び捨てになってしまったり、本文が入らなかったりと、少し足りない感じがします。
というわけで、私はこうしてみました。

選択されたアドレスブックのグループを取得
グループのカード情報をとって、次のアクションへ渡します。
アドレス情報を取得
ここで、名前・メールアドレス・会社名を選んでおきます。すると次のアクションへは、グループ全員のそれらのリストを流します。
Applescriptを実行
ここだけ、プログラムを書きます。メールを送信する動作をここで作ります。

以上が肝の部分です。
これに、使い回ししやすいよう、前半に件名と本文の入力部分をつけると、こんな感じになりました。
automatorでメール一括送信
件名と本文は、最初のほうで入力部分を作っておいて、あとで「変数を取得」します。
「アドレス情報を取得」で「Applescript配列」のオプションを選んでおくと、次のアクションへはアドレス情報の配列が渡されます。それに続いて「変数を取得」すると、そこまで流れてきた情報の後にその内容がつらなるみたいです。
次の画像を見てください。アドレスの配列のあとに、「変数を取得」で取り戻した本文がくっついている様子が分かります。
変数が後ろにくっつく。
こんな風にして後ろへ情報を流していって、最後にApplescriptで処理をします。

on run {array}
set i_title to end of array–arrayの最後の要素を取って、i_titileにセットする
set array to reverse of array–arrayの順番をさかさまに。これで、i_titleにセットした値は先頭へ。
set array to rest of array–先頭の要素をすてて、残りの要素をarrayにセットする。#お尻の要素をすてる関数はナイのかしら??–もうひとつも、同じように。
set i_body to item 1 of array –arrayの先頭の要素を取って、i_bodyにセットする。#1からはじまります
set array to rest of array –先頭の要素をすてて、残りの要素をarrayにセットする。
set array to reverse of array –arrayの順番をさかさまに。アドレスブックのデータだけ残りました。–アドレスの一件一件に対してループ
repeat with person in array
–名前、メルアドをセット
if item 1 of person is not equal to missing value then
set i_company to item 1 of person –会社名
end ifset i_name to item 2 of person –名前(結合済み)if item 3 of person is not equal to missing value then
set i_address_biz to item 3 of person –勤務先メール
end if

if item 4 of person is not equal to missing value then
set i_address_per to item 4 of person –自宅メール
end if

–送信先を決定
if i_address_biz is not equal to missing value then –もし、勤務先メールが空じゃなければ、
set i_address to i_address_biz –送信先を勤務先へセット。
else if i_address_per is not equal to missing value then –勤務先メールが空で、自宅メールがあれば
set i_address to i_address_per –送信先を自宅へセット。
end if

–display dialog i_address –表示テスト

–宛名を決定
set i_forname to i_name & “さま:

if i_company is not equal to “” then
set i_forname to i_company & ”
” & i_forname
end if

try
tell application “Mail”
set newMessage to make new outgoing message with properties ¬
{subject:i_title, content:i_forname & i_body, visible:true}
tell newMessage to make new to recipient at end of to recipients with properties ¬
{address:i_address}
–send newMessage –そのまま送信してしまう場合は、先頭のコメントを外す
end tell
end try
end repeat

return true
end run

書きなれてないから、スマートじゃないと思うけど、まあ動くから…。
サンプルスクリプトを置いておきます。
もしよろしければ参考になさってください。
automator_addressbook-to-mail.zip(但し、最新のMacでは動きません!)