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 + '&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のパラメータで承認・否認を切り替える方法