Last active
December 11, 2016 04:30
-
-
Save shingorow/9df941f9076d4dce92007431cabc5548 to your computer and use it in GitHub Desktop.
Google Form で入力されたメールアドレスに画像つき HTML メールを送信します。
This file contains hidden or 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
<img width=200 src=cid:banner> | |
{ お名前 } 様 | |
この度はお問い合わせいただき、ありがとうございます。 | |
後ほど担当者より回答いたします。 | |
もうしばらくお待ち下さい。 | |
=========================== | |
<img width=120 src=cid:logo> | |
HOGE 株式会社 カスタマーサポート | |
---- お問い合せ内容 --- | |
{ お問い合せ内容 } |
This file contains hidden or 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
var config = { | |
sender: '[email protected]', | |
name: 'picotaro', | |
docId: 'Template Document ID', | |
keyEmail: 'メールアドレス', | |
folderId: 'Image folder ID' | |
} | |
function autoReplyEmail(e) { | |
var formData = loadFormData(e.response); | |
var template = loadEmailTemplate(config.docId); | |
var contents = createEmailContents(template, formData); | |
var recipient = formData['メールアドレス']; | |
sendAutoReply(recipient, contents); | |
} | |
/* 送信されたフォームデータを取得する | |
* @return {Object} | |
*/ | |
var loadFormData = function(response) { | |
var results = {}; | |
var itemResponses = response.getItemResponses(); | |
for (var i = 0; i < itemResponses.length; i++) { | |
var itemResponse = itemResponses[i]; | |
results[itemResponse.getItem().getTitle()] = itemResponse.getResponse(); | |
} | |
return results; | |
} | |
/* 送信メールのテンプレートを取得する | |
* @param {string} docId テンプレートドキュメントの ID | |
* | |
* @return {Object} {title: string, body: string} | |
*/ | |
var loadEmailTemplate = function(docId) { | |
var doc = DocumentApp.openById(docId); | |
var title = doc.getName(); | |
var body = doc.getBody().getText(); | |
var template = { | |
title: title, | |
body: body | |
} | |
return template; | |
} | |
/* メールテンプレートに差し込みを行う | |
* @param {Object} template | |
* @param {Object} formData | |
* | |
* @return {Object} {title: string, body: string} | |
*/ | |
var createEmailContents = function(template, formData) { | |
this.title = template.title; | |
var body = template.body; | |
for (var i in formData) { | |
var re = new RegExp('\{ ' + i + ' \}', 'g'); | |
body = body.replace(re, formData[i]); | |
} | |
var emailContents = {title: this.title, body: body}; | |
var htmlString = body.replace(/\n/g, '<br>'); | |
var html = HtmlService.createHtmlOutput(htmlString); | |
emailContents['htmlBody'] = html.getContent(); | |
return emailContents; | |
} | |
/* 本文に挿入する画像を取得する | |
* @param {string} folderId | |
* | |
* @return {Object} {imageName: string, imageBlob: Blob} | |
*/ | |
var getInlineImages = function(folderId) { | |
var folder = DriveApp.getFolderById(folderId); | |
var files = folder.getFiles(); | |
var images = {}; | |
var image, imageName, imageBlob; | |
while(files.hasNext()) { | |
image = files.next(); | |
imageName = image.getName().replace(/\..{3,4}$/, ''); //拡張子を削除 | |
imageBlob = image.getBlob(); | |
images[imageName] = imageBlob; | |
} | |
return images; | |
} | |
/* メールを送信する | |
* @param {Object} formData | |
* @param {Object} emailContents | |
* | |
* @return {void} | |
*/ | |
var sendAutoReply = function(recipient, emailContents) { | |
var recipient, subject, body, options; | |
var images = getInlineImages(config.folderId); | |
options = { | |
from: config.sender, | |
name: config.name, | |
htmlBody: emailContents.htmlBody, | |
inlineImages: images | |
} | |
subject = emailContents.title; | |
body = emailContents.body; | |
GmailApp.sendEmail(recipient, subject, body, options); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment