GAS メール下書きツールができた! スプレッドシートのデータを元にポチっとやってメールを自動作成じゃ~~~~~
できた~~~~~!!!!!
やった~~~~~!!!!!!
実戦で使えるぞ~~~~~~~~!!!!!!
経緯
サンプルコード
もっといい書き方があるのかもしれないけど、ひとまず上手くいったのでとてもうれしい!そして、一行一行の意味がわかるのがうれしい!
let j = 0; で下書き作成の有無をカウントするという発想がなかった。これはMさんに教えてもらった。ありがたい、なるほど~と思った半面、自分で思いつけなくてすごく悔しい。
/**
* スプレッドシートから、メールの下書きを作成する。
*/
function createDraftEmail() {
const ui = SpreadsheetApp.getUi();
const response = ui.alert('下書きメールを作成しますか?', ui.ButtonSet.YES_NO);
let j = 0; //下書き作成の有無カウント用
if (response == ui.Button.YES) {
//ui.alert('下書きを作成中です。'); ※この表示は不要なのでコメントアウトした。お好みで。
/* 値の取得・投稿したい内容をスプシから取得 */
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
/* 作成するかしないかの判定 */
for (let i = 5; i <= lastRow; i++) {
if (sheet.getRange(i, 8).getValue() === "下書き作成する") {
const values = sheet.getRange(i, 1, 1, 10).getValues();
/* メールに差し込む各項目 */
let recipientTimestamp = values[0][0]; //i行目の1行目1列のセル情報=タイムスタンプ
recipientTimestamp = Utilities.formatDate(recipientTimestamp,"JST", "yyyy/MM/dd-HH:mm:ss");//日付の表示形式変換
const recipient = values[0][1];
const inquiryType = values[0][2];
const inquiryDetails = values[0][3];
const recipientName = values[0][4];
const recipientAffiliation = values[0][5];
const recipientTel = values[0][6];
const replyperson = values[0][8];
const replyBody = values[0][9];
const options = {
// from: "メールアドレスを入れて、冒頭の//を削除してください。この項目を使用しない場合はこのままコメントアウト。",
// cc: "同上",
// name: '差出人名です、同上'
};
/* メール文面 */
//↓件名
const subject = (`${recipientName}様 お問い合わせについて`)
//↓本文
const body = (`${recipientAffiliation}
${recipientName} 様
お世話になっております。${replyperson}です。
この度はお問い合わせをいただき、ありがとうございます。
${replyBody}
----------------------------------------
▼お問い合わせ
----------------------------------------
${recipientAffiliation}
${recipientName} 様
お問い合わせ日時:${recipientTimestamp}
お問い合わせ種類:${inquiryType}
お問い合わせ内容:${inquiryDetails}
----------------------------------------
以上、どうぞよろしくお願いいたします。
----------------------------------------
署名など`)
/* メール下書き作成 */
GmailApp.createDraft(recipient, subject, body, options);
/* 下書き作成後の処理 */
sheet.getRange(i, 8).setValue("下書き作成済");//下書きが作成できたら、H列は「下書き作成済」とセットする。
j += 1;
}
}
if (j > 0) {
ui.alert(`下書きを ${j}件 作成しました。\n\nGmailの下書きにメールが作成されました。\nこのスクリプト終了後に、自分でGmailを開いて確かめてください。\n\nすぐに下書きが反映されないときは、しばしお待ちください(30秒~1分程度)`);
} else {
ui.alert(`「下書き作成する」の指定が 0件 のようです。\nメールの下書き作成をキャンセルします。`);
}
}
else {
ui.alert('下書き作成をキャンセルしました。');
}
}
解説
スプレッドシートはこんな感じなっている。
1行目はグダグダと注意や説明を書いている。
5行目以降のデータを取得している。
やっていることは単純で、H列で「下書き作成する」と選択されていれば、その行のデータのメールの下書きを作成する。
青い「メール下書きを作成する」というボタンを押せばスクリプトが実行される。
スプレッドシートのメニューに足すこともできるが、ボタンがあったほうがみんな気づいてくれるのでそうした。
「下書き作成する」を選んで、「メール下書きを作成する」ボタンをポチっとすると、
このようにメッセージが出る。
いいえを選ぶとそこで終わる。
はいを選ぶと下書き作成に進み、n件 作成しました とメッセージが出る。
また、スプレッドシートで「下書き作成する」となっていた箇所が「下書き作成済」に置き換わる。
メール下書きを確認すると、
このように下書きが出来ている。
これで、めんどうコピペをしなくて済む&コピペミスもない。やったー!
「下書き作成する」が2件なら2件分メール作ってくれる。
今後の課題
・スプレッドシートの行や列を動かされるとつらい。権限や保護するかなあ。
・日付をYYYY/MM/DD のような形に変換がよくわからない。→解決、コードも差し替え済。追記に書きました。
・配列のうまい書き方がわからない。
・return,continueの使い方がよくわからない。
・手続き型で書くと~とアドバイスいただいたが、それがよくわからない。
謝辞
noteでスキしてくださった方、
focebokでいいねやコメントくださった方、
Twitterでいいねやコメントくださった方、
slackでリアクションやコメントくださった方、
ほんとーーーーーーーーーーーーーーーーーにありがとうございます!!!!
とても励みになっています!!!
追記
日付はこちらの記事を参考に変換できました。
https://auto-worker.com/blog/?p=1114
リファレンスはこれです。