Help us understand the problem. What is going on with this article?

イベント招待メール送信の半自動化ばなし【vol.1】

株式会社オズビジョンのユッコ (@terra_yucco) です。
日々細かい記事を上げていますが、その中でもそれなりに登場する Google Apps Script。
これは業務だけではなく、プライベートのサークル活動での事務活動を効率化するのにも使えています。今日はその中から、イベントご招待メールの送信を半自動化しているコードを共有します。

イベントご招待メール送信を半自動化したい

前提

  • 大体、半年に 1 回イベントご招待があり、そのご案内をメールで送付している
  • メールをプリントアウトして持参いただければ入場できる仕組み
  • 次以降のご招待のため、来てくださった方の情報が必要
    • 要するに何らかの差し込みが必要

Outlook とかの差し込み機能でもうまくいくのかもしれませんが、普段使っていないので使い方がわかりません。
顧客リストはパスワードをかけたローカル Excel で管理しているので、コピペしたら普通に扱える Spreadsheet がいいのではないかと思い GAS にしました。

シート

  • イベント自体はどんどん回数表記が増えるタイプ
  • 送付先ごとに ID を振っている
  • 複数回ツールが動いても重複送信はできるだけしないように

ということで以下のような項目分けになっています。
チープ感満載ですが「メール送信」オブジェクトに次に記載するスクリプトが割り当ててあります。

image.png

コード

工夫してある点としては、上にも書きましたが、メール送信が終わったらフラグを立て、同じシートで複数回送信することが無いようにしてある点となります。
※実際この記事を書いているときも誤爆しそうになりました。

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");
  }
}

このあたりもいつかもう少しブラッシュアップしたいのですが、ちょっとスクリプトが書けるだけで、プライベート活動も効率化することができるよ、という話でした。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away