Skip to content

Instantly share code, notes, and snippets.

@mountcedar
Last active March 20, 2016 08:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mountcedar/a525570f3431565456ab to your computer and use it in GitHub Desktop.
Save mountcedar/a525570f3431565456ab to your computer and use it in GitHub Desktop.
Googleフォームを使った出欠席確認と自動返信、その後の連絡方法まとめ ref: http://qiita.com/mountcedar/items/3454d7aafcf1fd4541ff
Logger.log('hogehoge');
/**
* メール一括送信処理の定義
*/
function sendReminder() {
//------------- (1)宛先リストから処理対象の行数を取得 -----------------------
// スプレッドシート(MS Excelで言う所のブック)を取得
var book = SpreadsheetApp.getActiveSpreadsheet();
// 宛先リストシートを取得
var membersList = book.getSheetByName("members");
// データが入力されている範囲を取得
var datRange = membersList.getDataRange();
// 処理対象の行数を取得
var numRows = datRange.getNumRows();
//------------- (2)メール本文の情報を取得 -----------------------
// メール本文シートを取得
var mailForm = book.getSheetByName("reminder");
// メール件名を取得
var subject = mailForm.getRange(2, 3).getValue();
// メール本文を取得
var body = mailForm.getRange(4, 3).getValue();
//------------- (3)メール送信処理 -----------------------
for (var i = 2;i <= numRows;i++) {
// 出席の有無を確認。欠席だったら、スキップ
var participation = membersList.getRange(i, 6).getValue();
var name = membersList.getRange(i, 2).getValue();
if (participation != "ご出席") {
Logger.log("skipping " + name);
continue;
}
// 対象行の差込データを取得
var name = membersList.getRange(i, 2).getValue();
var buf = body;
if (name != "") {
buf = buf.replace("{{name}}", name, "g");
}
// 対象行の宛先を取得
var to = membersList.getRange(i, 9).getValue();
MailApp.sendEmail(to, subject, buf);
}
// 終了確認ダイアログを表示
Browser.msgBox("確認", "リマインダ一括が完了しました。", Browser.Buttons.OK);
};
/**
* スプレッドシート(MS Excelで言う所のブック)を開いた時に実行する処理。
* スプレッドシートを開いた際に、以下の処理(関数)が自動実行される。
* ここではコントロールメニューにスクリプト実行コマンドを追加している。
*/
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [
{
name : "リマインダ送信",
functionName : "sendReminder"
}
];
sheet.addMenu("スクリプト実行", entries);
};
function sendMail() {
//------------------------------------------------------------
// 設定エリアここから
//------------------------------------------------------------
// 件名、本文、フッター
var subject = "ご登録ありがとうございます!";
var body
= "こんにちは\n\n"
+ "XXXフォームへのご登録ありがとうございます!\n"
+ "\n";
var footer
= "----\n"
+ "<<<署名>>>\n";
// 入力カラム名の指定
var NAME_COL_NAME = '御氏名'; // フォームに対応するカラム名を入れる
var MAIL_COL_NAME = '連絡先(メールアドレス)'; // フォームに対応するカラム名を入れる
var MAIL2_COL_NAME = '連絡先(携帯メールアドレス)'; // フォームに対応するカラム名を入れる
var PARTICIPATION_COL_NAME = '御出欠席'; // フォームに対応するカラム名を入れる
// メール送信先
var admin = "<<< sending mail address >>>";
var cc = ""; // Cc:
var bcc = admin; // Bcc:
var reply = admin; // Reply-To:
var to = ""; // To: (入力者のアドレスが自動で入ります)
var to2 = ""; // To: (メールアドレス2)
//------------------------------------------------------------
// 設定エリアここまで
//------------------------------------------------------------
try{
// スプレッドシートの操作
var sh = SpreadsheetApp.getActiveSheet();
var rows = sh.getLastRow();
var cols = sh.getLastColumn();
var rg = sh.getDataRange();
// メール件名・本文作成と送信先メールアドレス取得
for (var j = 1; j <= cols; j++ ) {
var col_name = rg.getCell(1, j).getValue(); // カラム名
var col_value = rg.getCell(rows, j).getValue(); // 入力値
if ( col_name === NAME_COL_NAME ) {
body = col_value+" 様\n\n" + body;
}
if ( col_name === MAIL_COL_NAME ) {
to = col_value;
}
if ( col_name === MAIL2_COL_NAME ) {
to2 = col_value;
}
if ( col_name === PARTICIPATION_COL_NAME ) {
body = body + "会への" + col_value + "確かに承りました。\n" + "ご回答ありがとうございます。\n\n"
}
}
body += footer;
// 送信先オプション
var options = {};
if ( cc ) options.cc = cc;
if ( bcc ) options.bcc = bcc;
if ( reply ) options.replyTo = reply;
// メール送信
if ( to ) {
var addr = to;
if ( to2 ) { addr = to + ',' + to2; }
MailApp.sendEmail(addr, subject, body, options);
Logger.log("send mail to " + addr);
} else {
MailApp.sendEmail(admin, "【失敗】Googleフォームにメールアドレスが指定されていません", body);
}
}catch(e){
MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment