Last active
March 20, 2016 08:31
-
-
Save mountcedar/a525570f3431565456ab to your computer and use it in GitHub Desktop.
Googleフォームを使った出欠席確認と自動返信、その後の連絡方法まとめ ref: http://qiita.com/mountcedar/items/3454d7aafcf1fd4541ff
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Logger.log('hogehoge'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* メール一括送信処理の定義 | |
*/ | |
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); | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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