AppleScriptでメール一括送信プログラム 2013–Automator使わなかった。

Author :

AutomatorとApplescriptエディタ昨日試してみた「Automatorでメール一括送信プログラム2013 on MacOS Lion」。Automatorだけを使ってメールを一括送信させるプログラムを作ってみたいのですが、宛名の問題を解決できませんでした。

ただ、私自身がほしいのもあって、あきらめないでもうちょっとちゃんと動くものを作ってみました。

私がほしいのは、数十〜数百のメールをまとめて作れるプログラム。おなじ文面で、宛名だけを変えるようにするものです。例えばメールアドレス変更のお知らせを取引先様に一括で送りたいとか、そういうときに欲しいなぁって。

それで、せっかくのAutomatorを有効利用したくて、いろいろ試してはみたのですが…どうも、どうもやっぱりなにかしっくりこなかったです。変数の使い方がなんかむずかしいのがいちばんのネックだったかもしれません。

で、検討の結果…
全部Applescriptで書いてしまうことにしました。

(ダウンロードはページの最後にあります。「続きを読む」からどうぞ)

プログラムの流れはこんな感じ

プログラムのなかみは、こういう動作で構成されてます。

  1. まず、ダイアログを出して、そこで件名と本文を入力しておく。
    入力した本文/件名は、変数にしまっておく。
    件名を入力
  2. 次に、選択した連絡先情報を取得。
    連絡先の項目を選択
  3. それから、その情報を持ってメールをつくる。

メールを作る前に社名、名前を組み合わせて、宛名をととのえる記述を入れておいて、こんな感じの複数のメールを一気に作ります。

AppleScriptによるメール一括送信プログラム2013 by Factory70の実行結果例

実際の中身はこうなってます

実際に作るときは、Macに付属の「AppleScriptエディタ」を開いて、つぎのようなプログラムを書きます。


--ダイアログを出す
display dialog "メールを一括で送りますよ。
あらかじめ文面とタイトルを用意してください。
 
それから、「連絡先」を開いて
対象のカードを選択した状態にしてください。"
 
display dialog "件名を記入してください。" default answer "件名にゃ"
set mySubject to text returned of result
display dialog "本文を記入してください。" default answer "本文にゃ"
set myBody to text returned of result
 
 
 
--連絡先情報を取得
tell application "Contacts"
    
    set pList to selection --選択したカードを取得
    
    repeat with onePerson in pList
        set lName to last name of onePerson --姓
        set fName to first name of onePerson --名
        set cName to organization of onePerson --会社名
        
        --メールアドレスの取得
        --メルアドは複数ある場合があるので、まずはリストをつくる
        set eMailAdrList to email of onePerson
        set eMailAdr to ""
        repeat with oeMail in eMailAdrList
            --「勤務先」優先で、なければその他のをつめる
            if label of oeMail is equal to "work" then
                set eMailAdr to value of oeMail
            else if eMailAdr is equal to "" then
                set eMailAdr to value of oeMail
            end if
        end repeat
        
        
        --宛名をととのえる
        set forString to ""
        if cName is not equal to missing value then
            set forString to cName & " "
        end if
        set forString to forString & lName & " " & fName & "さま:
 
" --改行を入れました。
        
        
        --取得した内容をもとに、メールを作ります
        tell application "Mail"
            set newMessage to make new outgoing message with properties ¬
                {subject:mySubject, content:forString & myBody, visible:true}
            tell newMessage to make new to recipient at end of to recipients with properties ¬ -- ←これはスクリプト改行
                {address:eMailAdr}
            --send newMessage --そのまま送信してしまう場合は、先頭のコメントを外す
        end tell
        
        
        --リセット
        set forString to missing value
        set cName to missing value
        set lName to missing value
        set fName to missing value
        set eMailAdr to missing value
    end repeat
    
    
end tell
return true

最後に「書き出し」から「アプリケーション」を選んで保存しておくと使いやすいです。

いろいろいじっていて気づいたのですが、「『連絡帳』からグループ一括の情報を全部リストに詰めて返す」ということができなくなっているみたいですね、ApplescriptでもAutomatorでも。なので、最初に作ったAutomatorプログラムみたいにリストを渡して後で処理、というのができないので、それだったらもう書いちゃえ、ということになりました。で、全部AppleScriptで書いてみたら、意外とそんなにややこしくないということが分かりました。

ダウンロードはこちらから

さくっと使いたい!という方のために、ファイルを用意しました。

よかったらダウンロードしてお使いください。ただし、私は利用に関して一切の責任を負いません。それから、再配布はしないでください。

本文を入力するときは、入力ボックスが細くて心もとないのですけど、あらかじめメモパッドとかで書いたものをコピペすれば大丈夫です。