株式会社オズビジョンのユッコ (@terra_yucco) です。
日々細かい記事を上げていますが、その中でもそれなりに登場する Google Apps Script。
これは業務だけではなく、プライベートのサークル活動での事務活動を効率化するのにも使えています。今日はその中から、イベントご招待メールの送信を半自動化しているコードを共有します。
イベントご招待メール送信を半自動化したい
前提
- 大体、半年に 1 回イベントご招待があり、そのご案内をメールで送付している
- メールをプリントアウトして持参いただければ入場できる仕組み
- 次以降のご招待のため、来てくださった方の情報が必要
- 要するに何らかの差し込みが必要
Outlook とかの差し込み機能でもうまくいくのかもしれませんが、普段使っていないので使い方がわかりません。
顧客リストはパスワードをかけたローカル Excel で管理しているので、コピペしたら普通に扱える Spreadsheet がいいのではないかと思い GAS にしました。
シート
- イベント自体はどんどん回数表記が増えるタイプ
- 送付先ごとに ID を振っている
- 複数回ツールが動いても重複送信はできるだけしないように
ということで以下のような項目分けになっています。
チープ感満載ですが「メール送信」オブジェクトに次に記載するスクリプトが割り当ててあります。
コード
工夫してある点としては、上にも書きましたが、メール送信が終わったらフラグを立て、同じシートで複数回送信することが無いようにしてある点となります。
※実際この記事を書いているときも誤爆しそうになりました。
function sendInvitationMail() {
var mySheet = SpreadsheetApp.getActiveSheet();
var rowSheet = mySheet.getDataRange().getLastRow();
var docMail = DocumentApp.openById("【ドキュメントID】"); //ドキュメントをIDで取得
var strDoc = docMail.getBody().getText(); //ドキュメントの内容を取得
/**
* 1行目はヘッダ
* 2行目以降データがなくなるまで差し込む
*/
for (var i = 2; i <= rowSheet; i++) {
var strNumber = mySheet.getRange(i, 1).getValue(); // 回次
var strID = mySheet.getRange(i, 2).getValue(); // ID
var strEmail = mySheet.getRange(i, 3).getValue(); // メールアドレス
var isSent = mySheet.getRange(i, 4).getValue(); // 送信済みか
var strBody=strDoc.replace(/{ID}/g, strID);
if (isSent != "") {
Logger.log(strID + ": skipped");
continue;
}
// メール件名
var strSubject = "第{Number}回【イベント名】へのご招待".replace(/{Number}/g, strNumber) + " (" + strID + ")";
var strFrom = "【From メールアドレス】"; //From
var strSender = "【From 表示名】"; //差出人
/* メールを送信 */
GmailApp.sendEmail(
strEmail, //toアドレス
strSubject, //メールタイトル
strBody, //本文
{
from: strFrom, //fromアドレス
name: strSender //差出人
}
);
mySheet.getRange(i, 4).setValue(1);
Logger.log(strID + ": sent");
}
}
このあたりもいつかもう少しブラッシュアップしたいのですが、ちょっとスクリプトが書けるだけで、プライベート活動も効率化することができるよ、という話でした。