[GAS] GASで送信したメールのリンクを踏むと受領確認できる仕組み

Google Apps Script (GAS)を使って、文書ファイルを指定のメールアドレスに送信する。文書ファイルの内容を確認した旨を自動で取得するため、送信されるメールにはGASへのリンクを張っておき、ワンクリックで受領確認の記録が残るようにする。このとき、文書ファイルのファイルID、受信者のアドレス、受領確認日時が記録されるようにする。

STEP1 承認用のリンクを踏んだ時に動くdoGET関数を定義

承認用のリンクをつくるには、まずdoGET関数を含むプロジェクトを定義し、ウェブアプリケーションとして導入する必要がある。ウェブアプリケーションとして導入するには、doGET関数を定義したのちに、スクリプトエディタのメニュー「公開」から「 ウェブアプリケーションとして導入 」を選択する。作業が完了すると、ウェブアプリケーションにアクセスするためのURLが発行される。

下にスクリプトの例を示す。
URLの最後尾にパラメータとして、スプレッドシートの何行目に承認済みの記録を記入するか (8行目 row)と承認者名 (9行目 SV)を入れるようにする。
12行目はスプレッドシートへの書き込みの例である。8行目で求めたrow行のA列からC列に対して、”recipt”という文字列, rowの中身, supervisor中身を記入する。冒頭で述べた、文書ファイルのファイルID、受信者のアドレス、受領確認日時あたりはここを書き換えればいい。
16,17行目で送信するメール本文を作成する。16行目はプレーンテキストの場合、17行目はHTMLテキストの場合である。受信者の環境によって、いずれかが表示される。
19行目でメールを送信する。送信者は、このスクリプトを実行するアカウントである。宛先はrecipient、メールタイトルはsubject、本文は前述のとおりである。
21行目以降は、ウェブアプリケーションとして導入したURLにアクセスした人に表示される画面を示している。
※「ウェブアプリケーションとして導入」したあとにdoGETの中身を変更した場合は、再度 「ウェブアプリケーションとして導入」 を行う。このときProject VersionをNewにしてから「更新」すること。

//ウェブアプリケーションとして導入する
function doGet(e) {
  var recipient = "受信者のメールアドレス",
      SS_id = "情報を記録するスプレッドシートのファイルID",
      SheetName = "情報を記録するスプレッドシートのシート名",
      Sheet = SpreadsheetApp.openById(SS_id).getSheetByName(SheetName),
      data = Sheet.getDataRange().getValues(),
      row = e.parameter.row,
      supervisor = e.parameter.SV;

  //ファイルに書き込み
  Sheet.getRange(row,1,1,3).setValues([["recipt",row, supervisor]]);

  var subject = '回覧通知';
  
  var plaintxt = "上長の承認が得られたので、報告書を回覧します。";
  var html = '<h1>報告書の回覧通知</h1>'+ '<p>上長の承認が得られたので、報告書を回覧します。</p>';
    
  GmailApp.sendEmail(recipient, subject, plaintxt, { htmlBody: html });

  var display = '<p>報告書の承認を受けつけました。N氏に回覧します。ご協力ありがとうございました。</p>';
  return HtmlService.createHtmlOutput(display);
}

STEP2 承認リンクのURLにパラメータを付加してメールで送信する

STEP1で作成したウェブアプリケーションのURLに、スプレッドシートの情報を読みだしてパラメータを付加させる。

下にスクリプトの例を示す。
7行目のsupervisorを承認依頼メールの受信者にする。data[0][2]すなわちシートのC1セルに入っている値を読みだしている。8,9行目も同様にスプレッドシートのB1セル、A1セルの値を読み込んでいる。
11,12行目で、ウェブアプリケーションにアクセスするURLに、パラメータとしてrowとSVを付加している。パラメータSVならdoGET関数でe.parameter.SVとして受け渡される。複数のパラメータは&で結ぶ。※下のスクリプトでは&amp;となっているが、amp;は除く。
14,15行目はメールに本文を生成している。
17行目は添付したいファイルを呼び出している。ファイルはあらかじめGoogle Driveに入れておく。ファイルIDの調べ方
あとはメールでsupervisorに送る。

//承認依頼のメールを送信する
function myFunction() {
  var SS_id = "情報が記録されているスプレッドシートのファイルID",
      SheetName = "情報が記録されているスプレッドシートのシート名",
      Sheet = SpreadsheetApp.openById(SS_id).getSheetByName(SheetName),
      data = Sheet.getDataRange().getValues(),
      supervisor = data[0][2],
      subject = data[0][1],
      row = data[0][0];
      
  var url = "ウェブアプリケーションのURL(execで終わる)";
      url += '?row=' + row + '&amp;SV=' + supervisor;

  var txt = '承認リンク ' + url;
  var html = '<h1>次のリンクを開いてください</h1>' + '<a href="' + url + '">承認</a>';
 
  var file = DriveApp.getFileById("Google Drive上のファイルのID")
    
    //承認依頼メールを送信する
    GmailApp.sendEmail(supervisor, subject, txt, { htmlBody: html, attachments: file});
}

参考
「Google Apps Script」で社内システムをつくってみた~GASとの出会い編~
GASのワークフローでURLのパラメータで承認・否認を切り替える方法

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください