Skip to content

Instantly share code, notes, and snippets.

@shingorow
Last active December 11, 2016 04:30
Show Gist options
  • Save shingorow/9df941f9076d4dce92007431cabc5548 to your computer and use it in GitHub Desktop.
Save shingorow/9df941f9076d4dce92007431cabc5548 to your computer and use it in GitHub Desktop.
Google Form で入力されたメールアドレスに画像つき HTML メールを送信します。
<img width=200 src=cid:banner>
{ お名前 } 様
この度はお問い合わせいただき、ありがとうございます。
後ほど担当者より回答いたします。
もうしばらくお待ち下さい。
===========================
<img width=120 src=cid:logo>
HOGE 株式会社 カスタマーサポート
---- お問い合せ内容 ---
{ お問い合せ内容 }
var config = {
sender: 'hoge@fuga.com',
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