<やりたい事>
下記の様なメールリストが、あります。(実際にには数百の宛先に送付する必要があります。)
上のメールリストに対して、下記の様なOutlookメールを個別に自動送信して、楽をしたい。
(尚、手動のBCCメールは、経験上、誰も読まないのを知っているので、楽ですが、ダメです。あくまでも個別メールにしたいと思っている。)
山田様、
これからは本文です。本日は、こんにちは!テストです。先日はありがとうございました。これはテストです。
これですが、メール数通位なら、兎も角、数百通を手動で発信したら、丸2日は掛かります。また、手動特有のメール誤送信がマジで怖いですね。
従って、手動メール送信は論外です。
<もし、Windows環境なら>
因みに、過去にも、Windows環境なら構築したことがあります。
「Python+Openpyxl+win32comで、15分で開発できるだろう!」とタカを括っていたのですが、Win32comのモジュールは、Mac環境では使えない事に、最後の最後で気が付きました。
Windows環境で自動送信する方法。(過去記事)⇨
https://qiita.com/naiveprince0507/items/3e4d322f7f1c3068487a
尚、Win32comに相当するMac用のモジュールは、丸1日掛けて探したのですが、見つかりませんでした。
ご存じの方がいたら、教えてください。
<解決策>
Mac環境では、Pythonでの開発は難しいそうなので、Applescriptを使うことにしました。
http://tonbi.jp/AppleScript/Introduction/01/
このapplescriptですが、Macアプリを自在に操作する為のスクリプト言語の様です。(知らなかった。)
この文法を、丸一日、必死にネットで勉強したが、まあ、分かりやすいですね。(ただ、私が主戦場としている、Java,Python,Javascript等と比べると情報が少な過ぎるのが、難点。)
■ 事前準備
まず、元のExcelで、A列が宛先、B列がメールアドレスのシンプルなシートを作り、それをCSVでrecipient1.csvという名前で保存します。(保存先は、/Users/xxxxx_yyy/Desktop/code/recipient1.csv)
中身は次のような形になります。
山田,yamada@gggmail.com
高橋,takahashi@gggmail.com
鈴木,suzuki@gggmail.com
これを1行ずつ読み込み、名前とメールアドレスに分解します。この形なら1つのrepeat文で両方が得られる様にします。
で、下記のコードで動きます。
set org to AppleScript's text item delimiters -- オリジナルの区切り文字を保存
set AppleScript's text item delimiters to "," -- 区切り文字を","に変更
set srcFile to ("/Users/xxxxx_yyy/Desktop/code/recipient1.csv") as text
set lns to paragraphs of (read srcFile as «class utf8»)
-- ここからは、メール本文の読み込み。
set theText to loadText("/Users/xxxxx_yyy/Desktop/code/mailcontent1.txt")
on loadText(theFile)
try
open for access theFile
set theText to read theFile
end try
close access theFile
return theText
end loadText
-- メール読み込み。ここまで。
repeat with ln in lns
set theList to every text item of ln -- 区切り文字で分解してリストを作成
set theHonbun to (item 1 of theList) -- リストから宛先を取り出して本文を作成
set theAddress to item 2 of theList -- リストからアドレスを取り出し
display dialog theHonbun -- 確認のため本文を表示
display dialog theAddress -- 確認のためアドレスを表示
display dialog theText
tell application "Microsoft Outlook"
set theMessage to make new outgoing message with properties {subject:theHonbun & "様、
先日はありがとうございました。これはテストです。", content:theHonbun & "様" & theText}
make new recipient with properties {email address:{address:theAddress}} at end of to recipients of theMessage
send theMessage
end tell
end repeat
set AppleScript's text item delimiters to org -- オリジナルの区切り文字に戻す
完璧に動作します。
丸2日作業を、瞬殺した事になります。