例えば取引先にイベントのお知らせをしたいときとか、サークル仲間10名以上に飲み会のお知らせをしたいときなど、アドレスブックに登録した人に一気にメールを送りたいときって、ありませんか?
そんなときに役立つプログラムを、Macに付属のAutomatorとカンタンなApplescriptで作ってみました。
アドレスブックからグループを選んで実行すると、そのグループ内全員に宛名つきのメールを送ります。
対象はAutomator2.1(MacOS 10.6 Snow Leopard)です。
Automatorには触ったことがない、という方も多いようですが、面白いのでぜひ試してみてください。
ところで、Automatorのライブラリには「グループメーラー」というものが用意されています。実はこれを利用すると、一分もかからず、メールを一括送信できるようになります。
こうすると、一行のプログラムも必要ありません。
ただ、オプションのあいさつが英語仕様っぽく、名前が呼び捨てになってしまったり、本文が入らなかったりと、少し足りない感じがします。
というわけで、私はこうしてみました。
- 選択されたアドレスブックのグループを取得
- グループのカード情報をとって、次のアクションへ渡します。
- アドレス情報を取得
- ここで、名前・メールアドレス・会社名を選んでおきます。すると次のアクションへは、グループ全員のそれらのリストを流します。
- Applescriptを実行
- ここだけ、プログラムを書きます。メールを送信する動作をここで作ります。
以上が肝の部分です。
これに、使い回ししやすいよう、前半に件名と本文の入力部分をつけると、こんな感じになりました。
件名と本文は、最初のほうで入力部分を作っておいて、あとで「変数を取得」します。
「アドレス情報を取得」で「Applescript配列」のオプションを選んでおくと、次のアクションへはアドレス情報の配列が渡されます。それに続いて「変数を取得」すると、そこまで流れてきた情報の後にその内容がつらなるみたいです。
次の画像を見てください。アドレスの配列のあとに、「変数を取得」で取り戻した本文がくっついている様子が分かります。
こんな風にして後ろへ情報を流していって、最後にApplescriptで処理をします。
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 if
set 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
読んでくれてありがとう!
もし記事が良かったと思ったら、いいね!やTweet、お願いします。
ほかの記事も読む
- 前のページ:「ソーシャルメディア」とシータの台詞。
- 次のページ:阪神甲子園駅の改築が決まった
- Illustratorで、たくさんのアートボードを自動で作るスクリプト(2)2012.02.21
- Illustratorで、たくさんのアートボードを自動で作るスクリプト(1)2012.02.21
- 私流「ネットショップシステム開発」の説明書。2011.08.26
イラストレーターとIT系エンジニアの二足のわらじで活動中。イラストでは一般書挿絵から教材図版まで、エンジニアとしてはネットショップ向けアプリケーションの開発など、幅広く仕事をこなすフリーランスワーカー。お酒とタイガースの町を拠点に精力的に活動中。

